ошибка целочисленного деления Python - по модулю на ноль - НО делитель! = 0

Я новичок в простой математике с использованием python, поэтому извините, если это глупый вопрос.

У меня есть 8 переменных, для которых заданы целые числа, и эти целые числа используются при выполнении простых вычислений.

a = 0
b = 17
c = 152
d = 1
e = 133
f = 19
g = 20
h = 0

answer = ( ( ( a / f ) + b + c ) - ( g + ( h / f ) ) ) / ( d / f )

print answer

Когда я запускаю этот код, я получаю ошибку ZeroDivisionError: целочисленное деление или по модулю на ноль.

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

( ( ( 0 / 19 ) + 17 + 152 ) - ( 20 + ( 0 / 19 ) ) ) / ( 1 / 19 )

Нигде в этом выражении нет делителя нуля.

Пожалуйста, дайте мне знать, как мне нужно изменить выражение, чтобы получить ответ 2831. Обратите внимание, что я могу изменить тип переменных на число с плавающей запятой или другое. Спасибо за помощь!


person ccdpowell    schedule 29.01.2013    source источник


Ответы (3)


Вероятно, вы используете Python 2.x, где x / y — это integer division.

Итак, в приведенном ниже коде: -

( 20 + ( 0 / 19 ) ) ) / ( 1 / 19 )

1 / 19 — это integer division, в результате чего получается 0. Таким образом, выражение по существу такое же, как: -

( 20 + ( 0 / 19 ) ) ) / 0

Теперь вы видите, откуда берется ошибка.


Вы можете добавить следующий импорт в свой код python, чтобы обеспечить разделение с плавающей запятой: -

from __future__ import division

Или вы можете преобразовать одно из целых чисел в число с плавающей запятой, используя либо float(), либо просто добавив .0 к начальному значению.

person Rohit Jain    schedule 29.01.2013

from __future__ import division

и чем сделать ваш расчет

это заставит деление возвращать поплавки

person YardenST    schedule 29.01.2013

Это должно работать. Вот мой код:

a = 0
b = 17
c = 152
d = 1
e = 133
f = 19
g = 20
h = 0

answer = ( ( ( a / f ) + b + c ) - ( g + ( h / f ) ) ) / ( d / f )

print(answer)

Почти точно так же.

person user11156442    schedule 05.03.2019