ZeroDivisionError:整数除法或模数为零

时间:2018-02-17 01:09:37

标签: python python-3.x

我正在构建一个简单的算法来查找两个给定数字之间的公约数:

i = int(input("digite o 1o inteiro positivo: "))
j = int(input("digite o 2o inteiro positivo: "))

#i,j = 9,6 
aux, cont = 1, 0 

if i > j: # 9 < 6 
    for n in range (i+1): # n = (1,2,3,4,5,6,7,8,9) 
        while n <= i: # (1,2,3,4,5,6,7,8,9) 
            if i % n == 0 and j % n == 0: # 9 % (1,3,9) e 6 % (1,3,6) 
                print(n) # print(1,3)

为什么我的程序有ZeroDivisionError

4 个答案:

答案 0 :(得分:3)

将您的range()设为1,而不是0:

代码:

for n in range(1, i + 1):  # n = (1,2,3,4,5,6,7,8,9)

测试代码:

i, j = 9, 6
if i > j:  # 9 < 6
    for n in range(1, i + 1):  # n = (1,2,3,4,5,6,7,8,9)
        if i % n == 0 and j % n == 0:  # 9 % (1,3,9) e 6 % (1,3,6)
            print(n)  # print(1,3)

结果:

1
3

答案 1 :(得分:0)

我实际上只是想在你的问题中缩进代码,但我最终意外地修复了它。所以,这是一个有效的解决方案:

i = int(input("Give the first positive integer: "))
j = int(input("Give the second positive integer: "))

r = j
if i < j:
  r = i

for n in range (2, r + 1):
  if i % n == 0 and j % n == 0:
    print(n)

输出:

Give the first positive integer: 27
Give the second positive integer: 18
3
9

范围以2开头,因为1是一个单位,因此作为除数并不感兴趣(它无论如何都会划分所有内容)。不应检查0,因为它不会划分任何内容,因为它会导致Div-by-zero错误。

无论如何......刷新一些蟒蛇......

答案 2 :(得分:0)

您的循环以0开头,因此发生此ZeroDivisionError

  

异常ZeroDivisionError   当除法或模运算的第二个参数为零时引发。关联值是一个字符串,表示操作数的类型和操作。[source]

你必须从1

开始你的for循环

像这样:for n in range(1,i+1):

并且你不必做while loop这将是无限的。

您的代码将是:

i = int(input("digite o 1o inteiro positivo: "))
j = int(input("digite o 2o inteiro positivo: "))

# i,j = 9,6 
aux, cont = 1, 0 

if i > j: # 9 < 6
    for n in range (1,i+1): # n = (1,2,3,4,5,6,7,8,9)
        #while n <= i: # (1,2,3,4,5,6,7,8,9)
        if i % n == 0 and j % n == 0: # 9 % (1,3,9) e 6 % (1,3,6)
            print(n) # print(1,3)

或者您也可以在try-except块中编写代码,这样会产生相同的输出:

i = int(input("digite o 1o inteiro positivo: "))
j = int(input("digite o 2o inteiro positivo: "))

# i,j = 9,6 
aux, cont = 1, 0 

if i > j: # 9 < 6
    for n in range (i+1): # n = (1,2,3,4,5,6,7,8,9)
        try:
          if i % n == 0 and j % n == 0: # 9 % (1,3,9) e 6 % (1,3,6)
              print(n) # print(1,3)
        except ZeroDivisionError:
            n+= 1

输出

digite o 1o inteiro positivo: 9
digite o 2o inteiro positivo: 6

1
3

答案 3 :(得分:0)

函数range()最多可以包含3个参数:

范围(包括初始限制,不包括最终限制,步骤)

  • 如果仅使用一个参数用于range(y)中的x,则这种情况是 等于:对于y,范围为(0,x,1)#包括:[0,1,...,x-1]

  • 如果需要以1开头范围,则需要定义它:y 在范围(1,y)

  • 如果需要更改范围步长,还需要定义它:y 在范围(0,-50,-1)