[Python] Contrôle de saisie fin

Contrôle de saisie fin [Python] - Python - Programmation

Marsh Posté le 22-02-2018 à 22:57:29    

Bonjour/Bonsoir,
Le code suivant fonctionne :

Code :
  1. #!/usr/bin/python3.6
  2. # encoding: utf-8
  3. # form_test.py
  4. from dialog import Dialog
  5. import re
  6. d = Dialog(dialog="dialog" )
  7. # Idée :
  8. # Tant qu’une des cases de la liste est vide, on recopie
  9. # les réponses de l’utilisateur et on réaffiche.
  10. fields=['','','','','','','']
  11. #fields=[Null,Null,Null,Null,Null,Null,Null]
  12. #while None in fields:
  13. # Comment ça marche ?
  14. # <label>, <numero de ligne>, <numero de colonne>, <reponse utilisateur>, <numero de ligne de la reponse utilisateur>, <numero de colonne de la reponse utilisateur>, <largeur d'affichage du champ>, <maximum de caracteres du champ>
  15. # Cette ligne fonctionne mais ne capture pas plus d'un espace
  16. while '' in fields:
  17. #while Null in fields:
  18. #while re.compile(r'[ ]+').findall(str(fields)):
  19. #while re.compile(r"\s+" ) in fields:
  20.     #    if re.compile(r'\s+').match(ele):
  21. #while re.compile(r'\s+').match([ele for ele in fields]):
  22. #while '' in fields or re.match('\s+', [ele for ele in fields]):
  23. #while not fields:
  24. #while not re.match(r"\s+", [ele for ele in fields]):
  25. #while(re.match('\s+', [ele for ele in fields])):
  26.     return_code, fields = d.form("Texte",
  27.                                  [("Champ 1", 1, 1, fields[0], 1, 9, 25, 15),
  28.                                   ("Champ 2", 2, 1, fields[1], 2, 9, 25, 3),
  29.                                   ("Champ 3", 3, 1, fields[2], 3, 9, 25, 10),
  30.                                   ("Champ 4", 4, 1, fields[3], 4, 9, 25, 1),
  31.                                   ("Champ 5", 5, 1, fields[4], 5, 9, 25, 1),
  32.                                   ("Champ 6", 6, 1, fields[5], 6, 9, 25, 2),
  33.                                   ("Champ 7", 7, 1, fields[6], 7, 9, 25, 20)],
  34.                                  height=7, width=0,title="title",backtitle="backtitle",form_height=7)
  35.     if return_code == d.CANCEL:
  36.         print("CANCEL" )
  37.     if return_code == d.OK:
  38.         print("OK" )


Ce code effectue un contrôle de saisie 'simple'. Si l’utilisateur ne remplit pas les champs – en appuyant sur [ENTRÉE] par exemple – ça boucle. J’aimerais porter ce contrôle un cran au-dessus. En effet, si mon utilisateur mets un ou des espace(s) dans les champs, ça passe et il n’aura pas répondu aux questions. C’est ce comportement que je cherche à encadrer. J’ai laissé commenté divers essais. J’ai même tenté une Comprehension List, mais j’en ai jamais écrit et évidemment, ça ne marche pas.
 
Pourriez-vous me dire si je fais fausse route ou si je suis dans la bonne direction ?
Note : Vous aurez besoin de PythonDialog (# pip install pythondialog) pour faire fonctionner ce programme.


Message édité par Fork Bomb le 23-02-2018 à 10:30:25

---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
Reply

Marsh Posté le 22-02-2018 à 22:57:29   

Reply

Marsh Posté le 23-02-2018 à 13:18:00    

L'expression régulière pour détecter une chaine vide serait

Code :
  1. r'^s*$'


Si tu veut détecter au moins un champs vide du coup

Code :
  1. void_regexp = re.compile(r'^s*$')
  2. while any(void_regexp.match(f) is not None for f in fields):
  3.    # Bla

Message cité 1 fois
Message édité par h3bus le 23-02-2018 à 13:19:40

---------------
sheep++
Reply

Marsh Posté le 23-02-2018 à 17:08:05    

h3bus a écrit :

L'expression régulière pour détecter une chaine vide serait

Code :
  1. r'^s*$'


Si tu veut détecter au moins un champs vide du coup

Code :
  1. void_regexp = re.compile(r'^s*$')
  2. while any(void_regexp.match(f) is not None for f in fields):
  3.    # Bla



Après tests, ton code laisse passer les chaînes vides.
Durant mes recherches, je suis tombé sur isspace() (à accoler à une chaîne quelconque). Il ne fonctionne pas sur les éléments d’une liste, mais je vais continuer mes recherches.


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
Reply

Marsh Posté le 24-02-2018 à 14:44:37    

Code :
  1. #!/usr/bin/python
  2. # encoding: utf-8
  3. # form_test.py
  4. # Attend que l'utilisateur réponde à des questions
  5. # Boucle tant que les chaines sont vides
  6. # ou constituées uniquement d'espaces.
  7. # Idée :
  8. # Tant qu’une des cases de la liste est vide, on recopie
  9. # les réponses de l’utilisateur et on réaffiche.
  10. from dialog import Dialog
  11. import re
  12. d = Dialog(dialog="dialog" )
  13. fields=['','','','','','','']
  14. # Cette ligne gère les chaines vides et celles pleines d'espaces
  15. while '' in fields or [ele.isspace for ele in fields if ele.isspace()]:
  16.     for idx,value in enumerate(fields):
  17.         if value.isspace():
  18.             fields[idx]=""
  19.     return_code, fields = d.form("Veuillez répondre aux questions",
  20.                                  [("Champ 1", 1, 1, fields[0], 1, 9, 25, 15),
  21.                                   ("Champ 2", 2, 1, fields[1], 2, 9, 25, 3),
  22.                                   ("Champ 3", 3, 1, fields[2], 3, 9, 25, 10),
  23.                                   ("Champ 4", 4, 1, fields[3], 4, 9, 25, 1),
  24.                                   ("Champ 5", 5, 1, fields[4], 5, 9, 25, 1),
  25.                                   ("Champ 6", 6, 1, fields[5], 6, 9, 25, 2),
  26.                                   ("Champ 7", 7, 1, fields[6], 7, 9, 25, 20)],
  27.                                  height=7, width=0,title="title",backtitle="backtitle",form_height=7)
  28.     if return_code == d.CANCEL:
  29.         print("CANCEL" )
  30.     if return_code == d.OK:
  31.         print("OK" )


Après pas mal de tests, j’ai fini par trouver. Je place un contrôle avant l’affichage du formulaire (c’est une boucle de tout es façons). Ainsi, je suis sûr que les réponses de mon utilisateur ne seront pas vides et/ou ne contiendront pas un ou plusieurs espaces.
Merci à Hébus pour s’être penché sur mon problème.


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed