Je suis nouveau sur le site Web de stack overflow, python et la programmation dans son ensemble. Alors pardonnez-moi si le titre ou le corps de cette question ne convient pas.
J'essaie de créer un programme de calcul simple en python, qui n'effectue que quatre opérations, à savoir, l'addition, la soustraction (différence), la multiplication et la division .
Voici mon code:
Traceback (most recent call last): File "test4.py.txt", line 19, in <module> quotient = num1 / num2 ZeroDivisionError: division by zero
Tout fonctionne bien, sauf, lorsque je saisis zéro comme num2, et quel que soit l'opérateur que je sélectionne, la sortie est-ce:
print("Welcome to the calculator \n") num1 = int(input("Enter the first number \n")) num2 = int(input("Enter the second number \n")) operation = (input("""Enter the symbol of the operation to be performed. Your choices are: + - (Difference) * / \n """)) add = num1+num2 sub1 = num1-num2 sub2 = num2 - num1 product = num1*num2 quotient = num1 / num2 if operation == "-" : if num1 > num2: print(sub1) else: print(sub2) elif operation == "+" : print(add) elif operation == "*" : print(product) elif operation == "/" : if num2 == 0: print("Sorry, can't divide a number by zero") else: print(quotient) else: print("Please enter a valid operator from among the ones provided above")
Une aide serait grandement appréciée.Merci!
4 Réponses :
Trouvez le quotient à l'intérieur de la condition if
, pas avant de vérifier number == 0
, sinon la division par zéro
est déjà effectuée, provoquant l'erreur.:
elif operation == "/" : if num2 == 0: print("Sorry, can't divide a number by zero") else: quotient = num1 / num2 print(quotient)
Je pense que vous le voulez dans le bloc else
, pas dans le if
où il soulèvera toujours une exception.
Il faut absolument être dans le bloc else
Vous ne devez calculer les résultats qu'après avoir vérifié les opérateurs (évitant ainsi les erreurs causées par une tentative de division par zéro), de cette façon vous éviterez également les calculs inutiles:
elif operation == "/" : if num2 == 0: print("Sorry, can't divide a number by zero") else: quotient = num1 / num2 print(quotient)
Pourriez-vous s'il vous plaît clarifier pourquoi je semble obtenir une erreur avec seulement la partie de division si le calcul a été fait avant de vérifier les opérateurs?
Parce que vous pouvez effectuer toutes les autres opérations (ajouter, soustraire, multiplier), mais la division par 0 est une opération non valide.
print("Welcome to the calculator \n") num1 = int(input("Enter the first number \n")) num2 = int(input("Enter the second number \n")) operation = (input("""Enter the symbol of the operation to be performed. Your choices are: + - (Difference) * / \n """)) add = num1+num2 sub1 = num1-num2 sub2 = num2 - num1 product = num1*num2 quotient = None # Don't divide by num2 here or you will get error of divisionbyzero if operation == "-" : if num1 > num2: print(sub1) else: print(sub2) elif operation == "+" : print(add) elif operation == "*" : print(product) elif operation == "/" : if num2 == 0: print("Sorry, can't divide a number by zero") else: quotient = num1 / num2 print(quotient) else: print("Please enter a valid operator from among the ones provided above")
Puisque vous êtes nouveau, je vais vous expliquer cela plus en détail afin que vous sachiez réellement ce que vous faites de mal
Faites attention à ces lignes
if operation == "-" : sub1 = num1-num2 print(abs(sub1))
Quand vous le faites il effectue en fait le calcul et l'attribue à la valeur respective (c.-à-d. quotient = num1 / num2 fera réellement le calcul et stockera le résultat dans la variable de quotient). Ainsi, vous effectuez chaque calcul à chaque fois, quel que soit votre choix d'opérateur. Il serait préférable d'attribuer les valeurs uniquement si cet opérateur a été choisi comme ci-dessous.
print("Welcome to the calculator \n") num1 = int(input("Enter the first number \n")) num2 = int(input("Enter the second number \n")) operation = (input("""Enter the symbol of the operation to be performed. Your choices are: + - (Difference) * / \n """)) if operation == "-" : sub1 = num1-num2 sub2 = num2 - num1 if num1 > num2: print(sub1) else: print(sub2) elif operation == "+" : add = num1+num2 print(add) elif operation == "*" : product = num1*num2 print(product) elif operation == "/" : if num2 == 0: print("Sorry, can't divide a number by zero") else: quotient = num1 / num2 print(quotient) else: print("Please enter a valid operator from among the ones provided above")
Cette partie n'est qu'une suggestion. Vous pouvez également faciliter votre opération de différence en utilisant ce qui suit.
add = num1+num2 sub1 = num1-num2 sub2 = num2 - num1 product = num1*num2 quotient = num1 / num2
abs
obtient la valeur absolue, supprime essentiellement le négatif.
Merci! Je comprends maintenant qu'effectuer au préalable des calculs pour toutes les opérations est redondant.
Pourriez-vous également clarifier pourquoi python ne prend pas en compte l'instruction: if num2 == 0 pour la division par zéro?
Que veux-tu dire?
@blackdotso Il en tient compte. Mais dans votre code, vous divisiez déjà par zéro à la ligne quotient = num1 / num2
et c'est pourquoi cela vous donnait l'erreur
Comment votre code est actuellement configuré, il ne parvient même jamais à cette déclaration.
@Abhishek Compris! Merci!
C'est une exception