Partage
  • Partager sur Facebook
  • Partager sur Twitter

Interdire l'alphanumérique sur zone de saisis

Sujet résolu
    9 octobre 2012 à 22:11:50

    Bonsoir les Zéros :)

    Je suis en train de coder un petit jeux qui consiste à deviner un nombre (numérique) aléatoire que l’ordinateur aura définie.

    Cependant, j'ai besoin que lors de la saisis du nombre (que l'on pense avoir deviné), on ne puisse que saisir des caractères numériques de 0 à 9. Donc interdire les caractères alphanumériques. Ou bien limité la saisie aux caractères Numériques.

    Je vous met mon code à disposition :
    import random					# Mode aleatoire
    secret = random.randint(1,100)
    
    print 'Le nombre secret est :', secret		# Revelation du Nombre secret
    
    saisie = input('Veuillez saisir un nombre : ')	# Saisie d'un nombre
    
    
    if saisis == secret:				# Comparaison
    	print("Vous avez Gagne !")
    elif saisie != secret:
    	if saisie < secret:
    		print("Nombre trop petit !")
    	elif saisie > secret:
    		print("Nombre trop grand !")
    
    print("MERCI D'AVOIR JOUE A MON JEU")
    


    Merci de votre aide :)
    • Partager sur Facebook
    • Partager sur Twitter
    Débutant en C. Programmation sous Ubuntu 13.10
      9 octobre 2012 à 22:18:46

      Hello, essaie de faire quelque chose avec une exception du style ValueError.
      • Partager sur Facebook
      • Partager sur Twitter
        9 octobre 2012 à 22:27:36

        Merci, mais le problème, c'est que je débute ... Et je ne sais pas comment définir :/
        • Partager sur Facebook
        • Partager sur Twitter
        Débutant en C. Programmation sous Ubuntu 13.10
          9 octobre 2012 à 22:35:54

          Ok alors commence petit et fait un simple test ...

          tu peux passer la fonction input() en paramètre de la fonction int() pour forcer la saisie

          logiquement si ce n'est pas un nombre, ça va lever une exception.
          • Partager sur Facebook
          • Partager sur Twitter
            9 octobre 2012 à 22:59:09

            Merci de ta réponse.

            Je connais la fonction input() , mais je ne sais pas comment la définir pour limiter la chaine de caractère qu'aux nombres.
            • Partager sur Facebook
            • Partager sur Twitter
            Débutant en C. Programmation sous Ubuntu 13.10
              10 octobre 2012 à 2:21:26

              c'est comme je t'ai dit :

              tu passes la fonction input() en paramètre de la fonction int()

              si tu entres autre chose qu'un nombre (ce n'est pas tout à fait vrai mais osef) ton code va lever une exception ValueError.

              exemple :

              >>> saisie = int(input('Veuillez saisir un nombre : '))
              Veuillez saisir un nombre : neuf
              Traceback (most recent call last):
              File "<stdin>", line 1, in <module>
              ValueError: invalid literal for int() with base 10: 'neuf'

              A toi de voir comment gérer cela, débuter en python n'est pas une excuse.

              http://www.siteduzero.com/tutoriel-3-2 [...] ceptions.html

              Ceci dit ce n'est qu'une manière de résoudre le problème, tu peux te passer de int() et checker ta chaîne avec la méthode isdigit() de str.

              Bon courage et bonne nuit !
              • Partager sur Facebook
              • Partager sur Twitter
                10 octobre 2012 à 19:13:47

                Citation : Jimmy James

                Cependant, j'ai besoin que lors de la saisis du nombre (que l'on pense avoir deviné), on ne puisse que saisir des caractères numériques de 0 à 9. Donc interdire les caractères alphanumériques. Ou bien limité la saisie aux caractères Numériques.


                Si je comprends bien ce que tu demande (filtrer dynamiquement l'input), ce n'est pas simple à effectuer depuis une console, aussi la solution classique est simplement de vérifier si la chaine entrée par l'utilisateur correspond bien aux attentes.
                • Partager sur Facebook
                • Partager sur Twitter
                  10 octobre 2012 à 19:39:29

                  Voilà. J'essaye actuellement le faire. Mais sans résultats :/
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Débutant en C. Programmation sous Ubuntu 13.10
                    10 octobre 2012 à 19:48:36

                    Essaye de voir avec la fonction getch si tu ne peux pas bidouiller quelque chose...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 octobre 2012 à 20:58:53

                      J'ai regarder la fonction getch, mais elle n'est pas appropriée pour ce genre de choses.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Débutant en C. Programmation sous Ubuntu 13.10
                        10 octobre 2012 à 22:48:43

                        Citation : Jimmy James

                        J'ai regarder la fonction getch, mais elle n'est pas appropriée pour ce genre de choses.



                        Si tu es sous Windows, essaye ce code-ci (curieusement, ça ne fonctionne pas avec IDLE) :

                        from msvcrt import getch, putch
                        import sys
                        
                        
                        def filtered_input(prompt='', fltr=None):
                            sys.stdout.write(prompt)
                            sys.stdout.flush()
                        
                            fltr = set() if fltr == None else set(fltr)
                        
                            ret = b''
                            while True:
                                c = getch()
                                if c == b'\r':
                                    putch(b'\n')
                                    break
                                elif c == b'\x08' and len(ret) > 0:
                                    putch(c)
                                    putch(b' ')
                                    putch(c)
                                    ret = ret[:-1]
                                elif c in fltr:
                                    putch(c)
                                    ret += c
                            return ret.decode()
                        
                        def input_nb(prompt=''):
                            return filtered_input(prompt, [b'0',b'1',b'2',b'3',b'4',b'5',b'6',b'7',b'8',b'9'])
                        
                        
                        n = input_nb('Entrez un nombre : ')
                        print('Vous avez entre ', n)
                        input('quitter ?')
                        
                        • Partager sur Facebook
                        • Partager sur Twitter
                          11 octobre 2012 à 0:20:16

                          "filtrer dynamiquement l'input"

                          effectivement je n'avais pas capté la nuance, et là on entre dans une autre dimension où checker les caractères numériques est secondaire.

                          Autant c'est facile avec des langages comme ruby ou euphoria en 2 lignes de code, autant avec python je ne vois d'alternative à hacker stdin et ses proches amis.

                          ceci dit quand on regarde dans la documentation du module curses, il y a un début de solution dans le même genre d'idée :

                          import curses
                          
                          stdscr = curses.initscr()
                          
                          while True:
                                  c = stdscr.getch()
                                  if c not in range(ord("0"), ord("9")+1):
                                          print("not a number")
                                  else:
                                          print("ok number")


                          logiquement ça capture et filtre dynamiquement les touches, donc à améliorer.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 octobre 2012 à 9:55:46

                            yoch > Merci, mais effectivement, le code ne fonctionne pas sous IDLE Je suis sous MAC OS X).

                            rannik > Le code fonctionne, mais il reste un bug au niveau des comparaisons avec le nombre secret. J'essaye actuellement de régler ce problème. Mais sinon, cela fonctionne. Merci :)
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Débutant en C. Programmation sous Ubuntu 13.10
                              11 octobre 2012 à 10:53:11

                              Citation : Jimmy James

                              yoch > Merci, mais effectivement, le code ne fonctionne pas sous IDLE Je suis sous MAC OS X).


                              Si tu es sous Mac, ca ne peut pas fonctionner de toutes facons, le module employé est Windows spécifique. Sinon, tu peux utiliser le getch de curses puisque tu es sous Unixoïde, c'est d'ailleurs ce qu'a fait rannik.

                              Citation : Jimmy James

                              rannik > Le code fonctionne, mais il reste un bug au niveau des comparaisons avec le nombre secret. J'essaye actuellement de régler ce problème. Mais sinon, cela fonctionne.


                              Tu dois récupérer la saisie (en gérant au minimum la touche entrée et backspace, tu peux éventuellement t'inspirer de mon code). Ensuite, tu dois la transformer en int, ce que tu ne fais pas dans ton code ci-dessus.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Interdire l'alphanumérique sur zone de saisis

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown