1. ホーム
  2. python

[解決済み】ZeroDivisionErrorの取得:ゼロによる整数の除算またはモジュロ

2022-02-18 10:33:25

質問

Pythonで簡単なパスカルの三角形のコードを書きましたが、エラーが発生します。

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

解決するには?

あなたの {コード {コード 関数はどのような入力に対しても 0 を返しますが、これは範囲をどのように定義したかによります。

内蔵のレンジは、特に定義されない限り、0から始まります。

factorial()

がやっている。

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

は最初の反復で、それ以降のすべての反復で使用されます。

re = re * 0

は常に0になります

以下のように、範囲を 1 から始めます。

re = 0 * c

をご覧いただくと、より分かりやすいと思います。

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

または、独自の関数を作成する代わりに、Pythonに付属している関数を使用します。

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

あなたのコードをよく読むと、あなたはこれを回避するために >>> from math import factorial >>> factorial(3) 6 の外側で c = 1