Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
416 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  [Python] Contrôle de saisie fin

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Python] Contrôle de saisie fin

n°2311508
Fork Bomb
Obsédé textuel
Posté le 22-02-2018 à 22:57:29  profilanswer
 

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 !"
mood
Publicité
Posté le 22-02-2018 à 22:57:29  profilanswer
 

n°2311533
h3bus
Troll Inside
Posté le 23-02-2018 à 13:18:00  profilanswer
 

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++
n°2311549
Fork Bomb
Obsédé textuel
Posté le 23-02-2018 à 17:08:05  profilanswer
 

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 !"
n°2311566
Fork Bomb
Obsédé textuel
Posté le 24-02-2018 à 14:44:37  profilanswer
 

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 !"

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  [Python] Contrôle de saisie fin

 

Sujets relatifs
Contrôle formulaire : alert suivant oublis de l'utilisateurMacro pour insertion ligne après saisie
champs de saisie qu permet d'isoler une ligneJavascript - Controle d'une chaine de caractère
[QB64] Saisie d'un fonction dans un programme de mathsDésactiver saisie semi automatique sur un champs HTML (Chrome)
aide Inputbox pour saisie et boucle[résolu][sqlserver-managementstudio]plus de touches de contrôle
[Access] Formulaire de saisie -> Feuille blanche 
Plus de sujets relatifs à : [Python] Contrôle de saisie fin


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR