Résolue

Projet calculatrice avec gestion des erreurs

# Boucles # Résolution d'erreurs # Variables

Gabriel Trouvé

Mentor

Bonjour,


Je viens de terminer le projet de la calculatrice avec gestion des erreurs. J'ai fait 3 versions qui fonctionnent bien. Jusque-là pas de problème.


#V1
a = input("Entrez un premier nombre : ")
b = input("Entrez un deuxième nombre : ")


while not (a.isdigit() and b.isdigit()):
    print("Veuillez entrer deux nombres valides.")
    a = input("Entrez un premier nombre : ")
    b = input("Entrez un deuxième nombre : ")


print(f"Le résultat de l'addition de {a} avec {b} est égal = {int(a) + int(b)}")


#V2
a = b = ""
while not (a.isdigit() and b.isdigit()):
    print("Veuillez entrer deux nombres valides")#mais affiche le message alors que l'on a rien rentré
    a = input("Entrez un premier nombre : ")
    b = input("Entrez un deuxième nombre : ")


print(f"Le résultat de l'addition de {a} avec {b} est égal = {int(a) + int(b)}")


#V3 Meilleure version
a = b = ""
while not (a.isdigit() and b.isdigit()):
    a = input("Entrez un premier nombre : ")
    b = input("Entrez un deuxième nombre : ")
    if not (a.isdigit() and b.isdigit()):
        print("Veuillez entrer deux nombres valides.")


print(f"Le résultat de l'addition de {a} avec {b} est égal = {int(a) + int(b)}")


Mais j'aime bien tester plusieurs choses. Et dans les cas qui vont suivre ci-dessous, le script ne fonctionne pas si l'utilisateur rentre un chiffre et une lettre. S'il rentre deux lettres pas de problèmes...


# Version 1 qui ne fonctionne pas si on entre un chiffre et une lettre
a = b = ""
while not a.isdigit() and not b.isdigit():
    a = input("Entrez un premier nombre : ")
    b = input("Entrez un deuxième nombre : ")
    if not a.isdigit() and not b.isdigit():
        print("Veuillez entrer deux nombres valides")


print(f"Le résultat de l'addition de {a} avec {b} est égal = {int(a) + int(b)}")


# Version 2 ne fonctionne pas si on entre un chiffre et une lettre
a = b = ""
while a.isdigit() == False and b.isdigit() == False:
    a = input("Entrez un premier nombre : ")
    b = input("Entrez un deuxième nombre : ")
    if a.isdigit() == False and b.isdigit() == False:
        print("Veuillez entrer deux nombres valides.")


print(f"Le résultat de l'addition de {a} avec {b} est égal = {int(a) + int(b)}")


Dans la version 1 qui ne fonctionne pas j'ai utilisé deux fois not donc pas de parenthèse.

Dans la version 2 qui ne fonctionne pas j'ai utilisé isdigit == False.


Vous pouvez m'éclairer svp ?

Merci d'avance

Hello Gabriel,


premièrement lorsque tu as un and dans tes conditions, tu dois mettre des parenthèses sur chacun de tes conditions. Ensuite, ici en logique mathématiques

NON (condition 1 ET condition 2) est plutôt équivalent à (NON condition 1) OR (NON condition 2). C'est la Loi de De Morgan


Donc si tu veux couper en 2, il vaut mieux faire:


a = b = ""
while  (not a.isdigit()) or (not b.isdigit()):
    a = input("Entrez un premier nombre : ")
    b = input("Entrez un deuxième nombre : ")

Gabriel Trouvé

Mentor

Ah oui merci j'ai compris !

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.