Python if if,elif

时间:2018-03-18 14:45:41

标签: python if-statement conditional-statements

这是非常基本的东西,但它让我很紧张; 为什么这段代码不能正常工作?

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)

是因为条件吗?因此,如果我想以这种形式编写代码,我必须首先编写复杂的条件然后再编写简单的条件吗?

3 个答案:

答案 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)

ifelifelse条款是互斥的。一种选择是将最强的条件放在首位,如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)