我是python的新手。我正在尝试编写一个计算一系列值的程序,但是3和4的倍数分别为它们添加3和4,当数字为两者的倍数时,它会向该数字添加该数字。所以例如1,2,3,4,5,6,7,8,9,10,11,12 应该在最终程序中读作:1,2,6,8,5,9,7,12,10,11,24
但是我的代码卡在某处。
for i in range (1,20):
if i%3==0 and i%4==0:
i=i+12
if i%3==0:
i=i+3
if i%4==0:
i=i+4
print i
答案 0 :(得分:3)
此行有拼写错误
if i%3==0 and 1%4==0: # your second condition is 1 % 4 == 0, which is always false
我认为你的意思是
if i%3==0 and i%4==0:
答案 1 :(得分:2)
如果使用其他变量,则更好(更准确,更清晰)。
for i in range (1,20):
n = i
if i%3==0 and i%4==0:
n=i+12
if i%3==0:
n=i+3
if i%4==0:
n=i+4
print n
现在你会注意到这个固定了9个案例,但不是12个案例!我们现在需要添加elif
的使用。此外,如果一个数字是3和4的倍数,那么它也是它们最低公倍数的倍数,在这种情况下为12.所以你可以重新编写你的第一步,只检查12的倍数。这给了我们:
for i in range (1,20):
n = i
if i%12==0
n=i+12 # or possibly i + i
elif i%3==0:
n=i+3
elif i%4==0:
n=i+4
print n
这样做的原因是因为没有elif
我被多次添加。例如,使用9,您将获得9%3 ==0
,True。现在我设置为12.下一个声明? 12%4 ==0
是的。所以又增加了4个。
或者,如果你想做一些疯狂的python:
for i in range(1, 20):
print i + next((n for n in (12, 4, 3) if i % n == 0), 0)
(向Jon Clements喊出这个双线答案)
答案 2 :(得分:1)
您允许每次迭代的多个案例(如果条件)。 我想你可能想做独家案件。
可能是这样的:
for i in range(1, 20):
print i, "=>",
if i % 3 == 0 and i % 4 == 0:
i += i
elif i % 3 == 0:
i += 3
elif i % 4 == 0:
i += 4
print i