-2
votes

Comment vérifier chaque entrée pour isdigit

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 , 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 pour chaque entrée. xxx


11 commentaires

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 .


@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


6 Réponses :


-1
votes

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)


0 commentaires

0
votes

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.

Vous pouvez utiliser tous les caractères dans l'entrée et vous assurer qu'ils sont tous des chiffres.

ou vous pouvez utiliser un essayer / sauf 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:

Comment comment Puis-je vérifier si une chaîne représente un int, sans utiliser d'essayer / sauf?

et aussi:

https://docs.python.org/3/Tutorial/Errors.html


3 commentaires

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



2
votes

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


0 commentaires

0
votes

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 int code> et de prendre des erreurs: xxx pré>

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>

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')


2 commentaires

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



0
votes
# 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.

0 commentaires

0
votes

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

code: - xxx


0 commentaires