#1 Tue 27 May 2014 10:27
- Loutre
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 12 Jan 2008
- Messages: 146
Aide Programmation Python
Bonjour à tous,
J'ai commencé l'apprentissage du Python il y a quelques semaines. Je ne suis donc pas expert. Cependant, je suis en train d'écrire un petit script python permettant de travailler à partir d'une GDB pour récupérer des données.
Pour avoir un minimum de "portabilité", sachant que dans mon service nous sommes trois personnes, j'aimerai que mes collègues puissent renseigner une variable sans l'inscrire directement dans le code.
Je travail sur des bases de données cadastrales par commune. Du coup, dans mon code, j'ai une variable
Code:
commune = "Toulouse"
à titre d'exemple. Seulement voilà, pour que l'on puisse utiliser le script sans rentrer dans le code et sans changer le nom de la ville à chaque utilisation j'ai essayé de faire :
Code:
#Renseigner la commune commune = input ("Saisissez le nom de la commune sans espaces ni accents !") while commune != [a-z] or commune != [A-Z]: try: #On doit vérifier que l'utilisateur saisisse bien une chaîne de caractères (nom de commune) commune = str (commune) #Conversion de la variable 'commune' en chaîne de caractères except ValueError: #On ajoute une exception pour être certain que l'utilisateur entre un nombre malgré tout gràce au bloc TRY + EXCEPT print("Vous n'avez pas saisie le nom de la commune avec des lettres") commune = str() #On renvoit à la variable de départ si l'utilisateur n'a pas bien saisi le nom de la commune continue #On repart directement à la bouche WHILE sans exécuter les autres lignes if commune == [a-z] or commune == [A-Z]: print("Vous avez correctement saisi le nom de la commune suivante :", commune)
Bon le truc, c'est que j'ai un message d'erreur me disant que le nom de la commune que je rentre grâce à la fonction "input" n'est pas défini. Il y a donc quelque chose que je ne fais pas correctement.
Le but est juste d'entrer un nom de commune aléatoire, par l'utilisateur pour définir la variable "commune" et de vérifier que l'utilisateur a bien indiqué un nom avec seulement des lettres.
Si quelqu'un peut m'aider a mettre de l'ordre dans mon code
Merci
Hors ligne
#2 Tue 27 May 2014 11:23
- Loutre
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 12 Jan 2008
- Messages: 146
Re: Aide Programmation Python
Je viens de me rendre compte que la fonction "input" récupére que des "int" et dans mon cas ma chaîne est une "string". Du coup, il faut que j'utilise raw_input !
Hors ligne
#3 Tue 27 May 2014 11:31
- dominique.lys
- Participant assidu
- Date d'inscription: 5 Oct 2006
- Messages: 473
- Site web
Re: Aide Programmation Python
Salut,
Premièrement il vaut mieux utiliser la fonction raw_input() pour les saisies utilisateur car pour saisir une chaine avec input() il faut que l'utilisateur ajoute des guillemets. En revanche raw_input() ne nécessite pas de guillemet en renvoi forcement une chaine donc un type str().
Du coup le code commune = str(commune) n'a pas d’intérêt puisque la variable commune est déjà une chaine et quand bien même ce serait un nombre la fonction str() n'échouera pas, au contraire elle fera ce qu'on lui demande c'est à dire convertir un nombre en texte.
La syntaxe [a-z] ça n'est pas du Python c'est une expression régulière, mais il existe un module python nommé re (pour regular expression) qui permet de les utiliser. Je te conseil cette page assez synthétique pour comprendre les expressions régulières :
http://www.dsimb.inserm.fr/~fuchs/pytho … ode14.html
Pour tester si une chaine ne contient pas de chiffre on peut par exemple utiliser l'expression régulière suivante :
Code:
^([A-Z]|[a-z])+$
Pour l'ensemble du code on peut partir sur quelque chose de beaucoup plus simple dans ce gout là:
Code:
import re commune="" regex="^([A-Z]|[a-z])+$" while not re.match(regex, commune): commune = raw_input("Saisissez le nom de la commune sans espaces ni accents !")
Hors ligne
#4 Tue 27 May 2014 11:34
- Loutre
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 12 Jan 2008
- Messages: 146
Re: Aide Programmation Python
Merci pour beaucoup pour cette réponse et surtout pour le lien des expressions régulières !
Hors ligne
#5 Tue 27 May 2014 11:59
- Loutre
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 12 Jan 2008
- Messages: 146
Re: Aide Programmation Python
Code:
commune = "" #Notre variable commune regex = "^([A-Z]|[a-z])+$" #Expression régulière permettant de s'assurer de la saisie en lettres while not re.match (regex, commune): commune = raw_input ("Saisissez le nom de la commune sans espaces ni accents !") if commune == "^([A-Z]|[a-z])+$": print ("Vous avez correctement saisi le nom de la commune suivante :", commune) else: print ("Vous n'avez pas saisie le nom de la commune avec des lettres")
Du coup, mon code donne ça, mais avec la boucle "while", je n'arrive pas a faire afficher le "print" de mon "if" dans le cas où j'ai bien écrit une ville en lettre.
Hors ligne
#6 Tue 27 May 2014 13:17
- Marcos
- Juste Inscrit !
- Date d'inscription: 27 May 2014
- Messages: 6
Re: Aide Programmation Python
Pour savoir si la variable "commune" est bien un mot sans espaces ni accents : il faut faire "re.match (regex, commune)" et non "commune == "^([A-Z]|[a-z])+$"
Le if / else ne sert à rien car l'algorithme ne sort du while que quand la variable commune contient bien un mot sans espaces ni accents
Code:
commune = "" #Notre variable commune regex = "^([A-Z]|[a-z])+$" #Expression régulière permettant de s'assurer de la saisie en lettres while not re.match (regex, commune): commune = raw_input ("Saisissez le nom de la commune sans espaces ni accents !") print commune
Hors ligne
#7 Tue 27 May 2014 13:25
- Benoit B
- Juste Inscrit !
- Date d'inscription: 7 Jul 2006
- Messages: 2
Re: Aide Programmation Python
Bonjour,
la suggestion de Marcos est nickel, mais si vous tenez aux messages, quelque chose comme ça fera l'affaire :
Code:
commune = "" #Notre variable commune regex = "^([A-Z]|[a-z])+$" #Expression régulière permettant de s'assurer de la saisie en lettres while True: commune = raw_input ("Saisissez le nom de la commune sans espaces ni accents !") if re.match (regex, commune): print ("Vous avez correctement saisi le nom de la commune suivante :", commune) break else: print ("Vous n'avez pas saisi le nom de la commune avec des lettres")
Hors ligne
#8 Tue 27 May 2014 13:36
- Loutre
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 12 Jan 2008
- Messages: 146
Re: Aide Programmation Python
Merci pour votre aide.
Je tiens absolument a faire afficher les messages pour la simple et bonne raison que je ne serais pas seul à utiliser le script. Les autres utilisateurs n'ont pas de compétences sur ce type de langage, donc il faut que ce soit assez explicite.
Bonne journée,
Hors ligne
#9 Tue 27 May 2014 14:25
- grdfred
- Participant actif
- Lieu: nantes
- Date d'inscription: 17 Jul 2007
- Messages: 56
Re: Aide Programmation Python
Bonjour,
Si ton outil a vocation a être intégré dans une toolbox, utilise directement le paramétrage de la boite de dialogue
commune = arcpy.GetParameterAsText(0) # correpond au 1er parametre
Frédéric
Hors ligne