Python Calculator (Правильное деление на ноль)

Я очень плохо знаком с программированием на Python, и большинство ответов, которые я искал, являются более сложными версиями скрипта, чем я ищу. Я сделал очень упрощенный калькулятор:

loop = 1  
choice = 0  
while loop == 1:  

print 'Python Calculator!\n'         
print 'Mathematical Operation:\n'         
print '1) Addition'         
print '2) Subtraction'         
print '3) Multiplication'         
print '4) Division'         
print '5) Quit Python Calculator'         
choice = input('Choose your operation: ')         
if choice == 1:                 
    add1 = input('Add:')                 
    add2 = input('to: ')                 
    print add1, '+', add2, '=', add1 + add2         
elif choice == 2:                 
    sub2 = input('Subtract: ')                 
    sub1 = input('from: ')                 
    print sub1, '-', sub2, '=', sub1-sub2         
elif choice == 3:                 
   mul1 = input('Multiply: ')                 
   mul2 = input('by: ')                 
   print mul1, '*', mul2, '=', mul1 * mul2         
elif choice == 4:                 
   div1 = input('Divide: ')                 
   div2 = input('by: ')                 
   print div1, '/', div2, '=', div1/div2         
elif choice == 5:                 
   print 'GOODBYE'                 
exit() 

Теперь мне интересно, как я могу разделить на ноль и вернуть вывод "Ошибка деления на 0", а не то, что он делает сейчас, то есть выйти из программы. Ошибка, которую я получаю при делении на 0:

Traceback (most recent call last):
File "./calculator.py", line 32, in <module>     
print div1, '/', div2, '=', div1/div2 ZeroDivisionError: 
integer division or modulo by zero 

4 ответа

Поместите свою операцию деления в try-except блок, как это:

try:
   # put division here div1/div2
   pass
except ZeroDivisionError:
   print "Divide by 0 Error"

Измените оператор печати в подразделении следующим образом:

print div1, '/', div2, '=', div1/(div2 or not div2)

это гарантирует, что ваш div2 ==0, а не div2 станет 1 и вернет вам числитель. not div2 всегда будет ложным, когда div2 отличен от 0, поэтому не нужно беспокоиться о любом другом случае.

Попробуй / кроме:)

try:
    print div1, '/', div2, '=', div1/div2
except ZeroDivisionError:
    print div1, '/', div2, ':', 'Division by zero!'

Используйте условие для div2, которое возвращает строку "Ошибка деления на 0", вместо обработки исключения - этот способ намного проще.

if div2 == 0:
    print "Divide by 0 Error"
else:
    print div1, '/', div2, '=', div1/div2 

Причина, по которой вы хотите избежать try / catch, заключается в том, что нет необходимости добавлять перехват исключений, поскольку ваша программа проста. Затраты не стоят, и ваша программа будет аварийно завершать работу каждый раз, когда пользователь вводит '0'

Другие вопросы по тегам