我正在构建一个简单的算法来查找两个给定数字之间的公约数:
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
?
答案 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 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)