Résolue

Structure conditionnelle

# Structures conditionnelles # Correction de code

Voici un bout de code :

```
user_choice = input("Devine le nombre : ")

    if not user_choice.isdigit:

        print("Veuillez renseigner un nombre valide")
        i-=1

    elif int(user_choice) > 100:
        print("Veuillez saisir un chiffre en 0 et 100")
        i-=1

```

Lorsque l'utilisateur saisi un chiffre, c'est ok, ca passe dans le elif

Lorsque l'utilisateur saisi un string, ca plante sur l'évaluation elif int(userchoice) > 100: car mon string ne peut pas être converti en chiffre (normal). Cependant, il aurait du entrer dans mon premier if not userchoice.isdigit: avant d'évaluer le elif int(userchoice) > 100:

Cela signifie t-il que toutes les conditions sont systèmatiquement évaluées ? Je pensais qu'il les évaluaient dans l'ordre d'apparition et donc n'allait jamais vérifier que mon string > 100 vu que je vérifie avant qu'il s'agit bien d'un int.

Merci

Thibault houdon

Mentor

Salut Marc,

Effectivement, les conditions dans un if/elif sont évaluées les unes après les autres, et Python s'arrête dès qu'il en trouve une qui est vraie (il n'évalue pas les suivantes).

À moins qu'il ne s'agisse d'une erreur lors du copier/coller, il semble que tu aies oublié les parenthèses qui suivent le nom de la méthode isdigit. Du coup, au lieu d'appeler la méthode, ton code vérifie l'existence de la méthode elle-même, qui est toujours vraie puisque isdigit est bien une méthode des strings.

Voici comment il faudrait écrire ton code :

user_choice = input("Devine le nombre : ")

if not user_choice.isdigit():
    print("Veuillez renseigner un nombre valide")
    i -= 1
elif int(user_choice) > 100:
    print("Veuillez saisir un chiffre en 0 et 100")
    i -= 1

Avec les parenthèses après isdigit(), la méthode est appelée et renvoie un booléen qui indique si la chaîne de caractères est composée uniquement de chiffres. Si l'utilisateur entre autre chose qu'un nombre, isdigit() renverra False, et ton message d'erreur sera affiché, sans que le code n'atteigne le elif.

oups, effectivement j'avais oublié les parenthèses. C'est traitre car le compilateur ne renvoie aucune erreur mais j'en comprends la raison même si je ne vois pas l'intéret de vérifier l'existence d'une méthode dans le code étant donné que le compilateur se charge de vérifier qu'une méthode existe ou pas.

Je confirme qu'en mettant les parenthèses, cela fonctionne parfaitement.

Merci

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.