这是非常基本的东西,但它让我很紧张; 为什么这段代码不能正常工作?
for i in range(0, 101):
if i % 3 == 0 and i != 0:
print '{} Three'.format(i)
elif i % 5 == 0 and i % 3 == 0 and i != 0:
print '{} FiveThree'.format(i)
else:
print "{}".format(i)
是因为条件吗?因此,如果我想以这种形式编写代码,我必须首先编写复杂的条件然后再编写简单的条件吗?
答案 0 :(得分:4)
任何数字都是3和5的倍数会使第一个if
条件为真,并且永远不会针对第二个if
条件进行检查。
你应该翻转条件:
for i in range(0, 101):
if i % 5 == 0 and i % 3 == 0 and i != 0:
print('{} FiveThree'.format(i))
elif i % 3 == 0 and i != 0:
print('{} Three'.format(i))
else:
print("{}".format(i))
但这很浪费。它会检查i % 3 == 0 and i != 0
两次。
我将优化作为练习。
答案 1 :(得分:0)
你的第二个条件是第一个条件的子集,所以如果永远不会进入那个区块。改变条件的顺序,它会起作用
for i in range(0, 101):
if i % 5 == 0 and i % 3 == 0 and i != 0:
print '{} FiveThree'.format(i)
elif i % 3 == 0 and i != 0:
print '{} Three'.format(i)
else:
print "{}".format(i)
答案 2 :(得分:0)
if
,elif
,else
条款是互斥的。一种选择是将最强的条件放在首位,如DeepSpace建议的那样。另一种选择是有多种条件。
for i in range(0, 101):
if i % 3 == 0 and i != 0:
if i % 5 == 0:
print '{} FiveThree'.format(i)
else:
print '{} Three'.format(i)
else:
print "{}".format(i)