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")
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.
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.
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 ?')
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.
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
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.
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.