Python 获取ZeroDivisionError:整数除法或零模

Python 获取ZeroDivisionError:整数除法或零模,python,integer-division,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 r

我用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"
错误:

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
回溯(最近一次呼叫最后一次):
文件“/home/tanmaya/workspace/abc/a.py”,第19行,在
z=(a/(b*d));
ZeroDivisionError:整数除法或模零除法

ZeroDivisionError表示您试图将数字
n
与0进行除法或模运算。
在您的例子中,
z=(a/(b*d))
导致
z=(a/0)

此外,正如@theB指出的,您的
阶乘
函数是不正确的

试着修一下

而且,您实际上不需要
在您的代码中。通常情况下,我们会使用
您的
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

仔细阅读代码后,您似乎试图通过在
for
循环之外设置
c=1
来规避此问题。这将不起作用,因为您在循环外部声明的变量正在循环内部重新分配。

整数除法或零模法
b*d
导致零请为您的问题选择一个更好的标题。可能还想指出阶乘函数没有产生任何接近正确结果的结果。@b代码太乱了,我没有费心运行它。谢谢你的提醒。这看起来很奇怪,因为
x!!=0
@tanutan很可能我不熟悉帕斯卡三角形,所以你必须打开一个新问题,并将新问题发布到那里。