1
votes

Problème avec un programme de calculatrice simple où une erreur semble toujours se produire lors de la saisie du nombre zéro

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!


1 commentaires

C'est une exception


4 Réponses :


2
votes

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)


2 commentaires

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



0
votes

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)


2 commentaires

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.



1
votes
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")

0 commentaires

0
votes

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.


6 commentaires

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!