0
votes

Essayer de créer une fonction pour accepter uniquement les nombres entre 1 et 5 et aucune chaîne en python

Je crée une fonction qui reçoit un nombre entre 1 et 5 (échelle de Likert), d'une question. Lorsque l'utilisateur saisit une mauvaise int, ma boucle est ok, la question se répète. Mais je veux que la question de répéter si l'utilisateur entrait également une chaîne. Mais dans ce cas, le programme bloque "ValueError: littéral non valide pour int () avec base 10" xxx


2 commentaires

Utilisez un Essayez: ... Sauf ValueError: ... Pour attraper l'exception et la gérer.


Exécutions de traitement


3 Réponses :


0
votes

Vous lancez l vers INT avant de vérifier son type. Donc, lorsque L est une chaîne, votre programme essaie de le jeter à INT et il se bloque. Vous devez effectuer des opérations numériques uniquement lorsque vous êtes sûr que L n'est pas une chaîne. La solution est soit à utiliser Essayer de prendre et de le gérer avec une instruction IF.


0 commentaires

0
votes

int () retourne toujours un entier, donc type (l) == int sera toujours vrai. Si l'utilisateur tape quelque chose qui n'est pas un entier actif, int () signalera une erreur.

Utiliser Essayez / sauf pour gérer l'erreur si l'utilisateur entre quelque chose qui n'est pas un entier. xxx

Vous n'avez pas besoin elif , car la condition est exactement l'opposé du si condition; Utilisez sinon . Vous n'avez pas non plus besoin Continuer , puisqu'il est à la fin de la boucle et qu'il va continuer de continuer quand même.


2 commentaires

Merci ! Je regarde des tutoriels de YouTube, et aucun d'entre eux n'est arrivé à cette partie (essayer / sauf) encore, mais cela a vraiment aidé!


C'est un sujet relativement avancé, vous n'êtes pas susceptible de le voir dans des tutoriels débutants.



1
votes

au lieu d'essayer de résumer l'entrée comme int code> à droite de la batte, faites-le à la place:

def likert():

    while True:
        L = input()

        if L.isalpha:
            #if input is string
            print('\033[031mError  [1 to 5] only\033[m')
            continue
        elif L.isdigit:
            #if input is int
            if 1 <= L <= 5:
                #if input is within range
                return L
            else:
                #if input is out of range
                print('\033[031mError  [1 to 5] only\033[m')
                continue


0 commentaires