获得ZeroDivisionError:整数除法或模数为零

时间:2015-09-03 15:22:07

标签: python integer-division

我在python中编写了一个简单的pascal三角形代码但是我收到了错误

def factorial(n):
    c=1
    re=1
    for c in range(n):
        re = re * c;
    return(re)

print "Enter how many rows of pascal triangle u want to show \n"
n=input();
i=1
c=1
for i in range(n):
    for c in range(n-i-1):
        print ""
        for c in range(i):
            a = factorial(i);
            b = factorial(c);
            d = factorial(i-c);
            z = (a/(b*d));
            print "%d" % z
            print "\n"

ERROR:

Traceback (most recent call last):
  File "/home/tanmaya/workspace/abc/a.py", line 19, in <module>
    z = (a/(b*d));
ZeroDivisionError: integer division or modulo by zero

2 个答案:

答案 0 :(得分:3)

ZeroDivisionError 表示您尝试将数字n除以或模数为0。 在您的情况下,z = (a/(b*d))产生了z = (a/0)

此外,正如@theB指出的那样,您的factorial功能不正确。

尝试修复它们。

此外,您的代码中并不需要;。通常情况下,当我们想要使代码成为一个代码时,我们会放置;

答案 1 :(得分:3)

由于你如何定义范围,你的factorial()函数会为任何输入返回0.

内置范围从0开始,除非另有定义:

for c in range(n):
    re = re * c  # no semicolons in Python

正在做:

re = re * 0

在第一次迭代中,以便所有后续迭代:

re = 0 * c

总是0

以1开始你的范围

for c in range(1, n):
    re *= c  # The *= operator is short hand for a = a * b

你可以更明确地看到这一点:

>>> print(list(range(5)))
[0, 1, 2, 3, 4]
>>> print(list(range(1,5)))
[1, 2, 3, 4]
>>> 

或者代替滚动自己的函数使用Python附带的函数:

>>> from math import factorial
>>> factorial(3)
6

仔细阅读您的代码后,您似乎试图通过在c = 1循环之外设置for来避免这种情况。这不会起作用,因为在循环外声明的变量正在其中重新分配。