Résolue

Bonjour, voici mon code pour l'exercice, qu'en pensez-vous?

# Boucles # Scripting
nb1 = 0 
nb2 = 0
resultat_calc = nb1 + nb2 
while nb1 == 0 and nb2 == 0: 
    resultat_calc = nb1 + nb2
    try:
        nb1 = int(input("Veuillez entrer votre premier nombre:"))
        nb2 = int(input("Veuillez entrer votre deuxième nombre:"))
    except ValueError:
        print("Vous devez entrer un nombre valide")
print(f"Le résultat de {nb1} + {nb2} est égal à {nb1 + nb2}")

Cordialement.

Thibault houdon

Mentor

Salut Benjamin !

C'est cool que tu aies testé autre chose que la solution de la vidéo ! Ton script est presque fonctionnel, il y a quelques points dans ton code qui doivent être ajustés pour que la calculatrice fonctionne.

nb1 = 0 
nb2 = 0
resultat_calc = nb1 + nb2 
while nb1 == 0 and nb2 == 0:  # Ça fonctionne, sauf dans le cas où l'utilisateur voudrait calculer 0 + 0 (même si c'est peu probable)
    resultat_calc = nb1 + nb2  # Cette ligne n'est pas utile ici, car tu fais déjà le calcul après la boucle, à la dernière ligne
    try:
        nb1 = int(input("Veuillez entrer votre premier nombre:"))
        nb2 = int(input("Veuillez entrer votre deuxième nombre:"))
    except ValueError:
                print("Vous devez entrer un nombre valide")
                # Si une exception est levée ici, la boucle se répète mais les valeurs de nb1 et nb2 ne sont pas remises à zéro.

print(f"Le résultat de {nb1} + {nb2} est égal à {nb1 + nb2}")

Le problème principal ici c'est que si tu entres une valeur incorrecte (une lettre par exemple) et que ton script tombe dans le ValueError, les valeurs ne sont pas remises à 0.

Du coup si tu réussis le premier input en donnant un nombre, mais pas le deuxième, tu vas avoir un comportement un peu spécial, puisque la variable nb1 aura changé (et contiendra un nombre), mais pas la variable nb2, car tu auras eu une erreur.

Mais comme ta boucle tourne tant que nb1 ET nb2 sont égaux à 0, dans ce cas de figure, tu vas sortir de ta boucle (car nb1 sera différent de 0, et nb2 sera toujours égal à 0, donc ta condition n'est plus validée car au moins l'un des deux est différent de 0).

Quand on lance le script, ça donne ça :

Veuillez entrer votre premier nombre:5
Veuillez entrer votre deuxième nombre:patrick
Vous devez entrer un nombre valide
Le résultat de 5 + 0 est égal à 5

Je te laisse avec ces considérations pour essayer de modifier ton script en conséquence, tu peux poster une version corrigée dans cette conversation pour qu'on regarde ça ensemble ;)

Bonjour, j'ai pris en compte tes remarques et corrigé mon code:

nb1 = 0
nb2 = 0
resultat_c = int(nb1) + int(nb2)
while resultat_c == 0:
    nb1 = input("Veuillez entrer un premier nombre: ")
    nb2 = input("Veuillez entrer un deuxième nombre: ")
    try:
        resultat_c = int(nb1) + int(nb2)
    except ValueError:
        print("Vous devez entrer deux nombres valides")

print(f"Le résultat de l'addition de {nb1} et {nb2} est égal à {resultat_c}")

ps1: je n'arrive pas à faire en sorte qu'il reboucle dès qu'on entre un caractère invalide au premier input sans doubler mes lignes de codes. Une astuce?
ps2: Le code Docstring valide aussi le calcul en cas d'addition 0 + 0.

Thibault houdon

Mentor

Salut Benjamin !

Je regarde ça et je te fais un retour, petite précision pour le formatage du code sur Docstring, tu peux le mettre dans le bon formatage en cliquant sur le bouton rouge ou en ajoutant à la main 3 backticks :

Formatage du code

Le bouton dans la barre d'outils va juste rajouter les backtick (ce qui permettra déjà de garder les indentations), et tu peux rajouter le nom du langage pour avoir en plus la bonne coloration syntaxique :)

Je regarde ton code et je te fais un retour dans un message séparé !

Thibault houdon

Mentor

Ok alors, pour que ça reboucle dès qu'un caractère invalide est entré au premier input (sans dupliquer ton code), on peut envisager plusieurs stratégies, je t'explique la théorie et je te laisse de nouveau essayer quelque chose (et si après ça tu en a marres de chercher je pourrai te proposer des solutions, mais tu avances sur la bonne voie, ça vaut le coup d'essayer encore un peu ;)

  1. Utiliser une boucle infinie et break :

Tu peux utiliser une boucle while True qui tourne indéfiniment jusqu'à ce que les deux nombres soient entrés correctement. Tu casseras la boucle (break) seulement quand un calcul valide aura été fait.

  1. "Flag" de validation :

Utiliser une variable (par exemple, valid_input) qui est mise à True seulement quand les entrées sont valides. Et faire en sorte que ta boucle principale continue de tourner tant que valid_input est False.

Peu importe la méthode que tu utilises, l'important c'est de te rappeler qu'une entrée invalide devrait non seulement indiquer un message d'erreur, mais aussi réinitialiser les valeurs pour forcer un autre passage dans la boucle.

N'hésite pas à passer par une étape de "pseudo code" pour voir comment ton script pourrait se dérouler (en écrivant en français les étapes à faire) avant de passer directement au code.

Bonsoir,
merci pour les retours rapides, c'est terriblement efficace.
Je vais me pencher de nouveau sur mon code avec tes conseils et essayer de les appliqué sur cette exercice et les prochains.

Hello,

merci Benjamin pour ton retour. Je ferme la question mais n'hésite pas à la rouvrir si besoin.

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.