嗨,我是python的新手。我试图找到最小的正数,它可以被1到20的所有数字整除,但我一直得到20,这显然是错的;我不知道为什么会这样。
def even_divisible():
x=1
for i in range(1,21):
if x%i!=0:
x+=1
print x
even_divisible()
有谁知道为什么?
答案 0 :(得分:0)
您的代码存在重大的逻辑缺陷;当for
循环结束时(20个循环后),将打印x
的当前值,而不检查它是否可被适当的数字整除。每次增加for
时,都不会从1重新开始x
循环。
您需要运行外循环,直到找到合适的x
为止;一个while
循环,因为我们不知道它会运行多长时间。要最低限度地修复您的代码:
def even_divisible():
x=1
while True: # outer loop
for i in range(1,21): # inner loop
if x % i != 0:
x+=1
break # break for loop
else: # for loop ran to end without break
break # break while loop
print x
您可以使用any
或all
简化内循环。也有一些数学简化;鉴于我们知道x % 20 == 0
,我们只需要查看20的倍数,因为所有整数都是1的整数倍,我们可以从2开始:
def evenly_divisible(n):
x = n
while True: # outer loop over multiples of n
if all(x % i == 0 for i in range(2, n+1)): # inner loop over 2-n
return x
x += n