J'essaie d'écrire un jeu qui génère un entier aléatoire et que l'utilisateur doit le deviner.
Le problème est que si l'entrée de l'utilisateur n'est pas un chiffre, il se bloque. J'ai donc essayé d'utiliser isdigit code>, et cela fonctionne au début, mais si l'utilisateur décide d'entrer non un nombre après la première entrée, il se bloque toujours. Je ne sais pas comment faire vérifier isdigit code> pour chaque entrée. P>
6 Réponses :
Vous devrez probablement apprendre à faire des fonctions et à écrire votre propre fonction d'entrée.
def my_input(prompt):
val = input(prompt)
if val.isdigit():
return val
else:
print('not a number')
# return my_input(prompt)
Si votre code s'est écrasé parce que l'utilisateur n'est entré pas un numéro, assurez-vous que l'utilisateur entre dans un numéro ou de gérer une erreur lors de la tentative de comparaison avec un numéro. P>
Vous pouvez utiliser tous les caractères dans l'entrée et vous assurer qu'ils sont tous des chiffres. P>
ou vous pouvez utiliser un Comment comment Puis-je vérifier si une chaîne représente un int, sans utiliser d'essayer / sauf? P>
et aussi: p>
essayer / sauf code> mécanisme. C'est-à-dire que vous essayez de convertir au type numérique, vous souhaitez que l'utilisateur entrave et gère toute erreur éventuelle. Vérifiez ce message: p>
Ce n'est pas la réponse à la question de l'OP
@Talhaisrar Le message dit: "Je ne sais pas comment le faire vérifier isdigit pour chaque entrée."
Ce n'est toujours pas la réponse s'il vous plaît lire l'explication. Cela aurait dû être un commentaire
Je suggérerais de faire ce qui suit:
completed = False
while not completed:
a = input("enter a number: ")
if a.isdigit():
a = int(a)
if a < x:
print("too little")
elif a > x:
print("too much")
else:
print("good")
completed = True
else:
print("It is not a digit")
La manière pythonique typique de s'attaquer aurait "demander le pardon au lieu de regarder avant de sauter". En concrètement, essayez d'analyser l'entrée comme au-delà de cela, le problème est évidemment que vous faites la vérification minutieuse Une fois au début du programme, mais pas plus tard lorsque vous demandez une entrée à nouveau. Essayez de réduire les endroits où vous demandez une entrée et vérifiez-le à un endroit et écrivez une boucle pour la répéter aussi souvent que nécessaire: P> int code> et de prendre des erreurs: while True:
try:
a = int(input('Enter a number: '))
except ValueError: # goes here if int() raises an error
print('Not a number')
continue # try again by restarting the loop
if a == x:
break # end the loop
elif a < x:
print('Too low')
else:
print('Too high')
print('Congratulations')
Eh bien, cela semble intéressant. Je suis un débutant, pourriez-vous m'expliquer que voulez-vous dire par ValueError? J'ouvre un code dans PowerShell alors vais-je simplement copier une erreur qui se produit?
Vous voudrez en savoir plus sur la manipulation des exceptions: Docs.pytHon.org/3/Tutorial/ erreurs.html
# user vs randint
import random
computer = random.randint(0,100)
while True:
try:
user = int(input(" Enter a number : "))
except (ValueError,NameError):
print(" Please enter a valid number ")
else:
if user == computer:
print(" Wow .. You win the game ")
break
elif user > computer:
print(" Too High ")
else:
print(" Too low ")
I think this can solve the issues.
Dans votre code, vous souhaitez vérifier si l'utilisateur dispose de la saisie de NO ou de la chaîne depuis votre entrée de l'utilisateur () dans votre entrée, il prendra l'entrée en tant que chaîne et incitera votre code ne pourra être en mesure de vérifier <= état < H2> Pour la vérification de la saisie, la chaîne ou non h2>
code: - p>
Bienvenue dans le débordement de la pile! Veuillez convertir la capture d'écran du code au code formaté dans votre question.
sur quelle ligne fait le crash de code
La manière pythonique de faire cela serait de l'essayer et de prendre une exception, au lieu de vérifier la double vérification avant de la tenter. C'est à dire.
Essayez: a = int (A) Sauf ValueError: # Demandez à nouveau l'utilisateur code>.@Talhaisrar Il renvoie "Traceback (appel le plus récent dernier): fichier" zl.py ", ligne 14, dans a = int (entrée (" Podaj LIBZBę: ")) ValueError: littéral invalide pour int () avec base 10: 'G' "Quand je tape g
C'est une simple erreur comme vous essayez de convertir "g" qui est une chaîne à un entier qui donne une erreur de valeur
@Talhaisrar Je sais, c'est pourquoi j'essaie d'implémenter isdigit. Si cela détectera ce n'est pas un chiffre, il suffit de dire que vous devez entrer le chiffre
Eh bien, ce message d'erreur que vous mentionnez dans le commentaire concerne le code qui est différent de celui de votre message. Veuillez vérifier à nouveau quelle version du code que vous utilisez réellement.
@Deceze Désolé, mais im Newbie, pourriez-vous être plus précis où je devrais mettre ce code? aussi, si je mets où j'ai un = int (a), cela me donne toujours la même erreur
@ Kamilkołodziej comme vous exécutez votre code est faux. Si vous utilisez ISDigit, alors pourquoi vous convertissez-vous en int A = int (entrée ("Podaj LIGZBę:"))?
@Talhaisrar `Parce qu'il ne veut pas comparer l'entrée si ce n'est pas un INT car le nombre généré est. donc je pensais que c'est je le convertit ça, cela résoudra un problème
Bien sûr, il ne résoudra pas le problème plutôt que cela créera un nouveau problème. Si l'entrée n'est pas un code entier se bloquera