天天看点

Python中条件判断 if, elif, else的使用

每种语言都有条件判断语句 if/else。学习python大半年,自以为对于if/else语句很熟练,不料今天还是掉坑里了。好不容易搞明白后,赶紧记下来,并分享给大家!

1. 用法说明

  • 一个if语句 + 一个else 语句:      

       当if 判断为True时,执行if语句下的代码; 而当if判断为False时,执行else语句下面的代码。

  • n个if语句(n>=2)   +   最后一个else语句:   

      每一个if语句都会被判断,不管它之前的if判断的是True或者False。 判断为True的if语句,其对应的代码会被执行,而为False时则不执行,直接跳到下一个if判断。

      而else语句只有当第n个if(即else前一个if)为False时才执行。若第n个if为True, 则不执行else语句对应的内容。

  • 一个if语句    +   n 个 elif语句 (n >=1)    +   一个else语句:

     按照先后顺序进行判断,若当前条件(if 或者是 elif) 为False, 则跳到下一个条件进行判断,否则为True时,执行对应的代码,并且后面还未执行的条件判断都跳过,不再执行了。

     即只要遇到一个if或elif为True的, 程序执行完对应的代码后,该轮条件判断就结束了。

2. 实例演示

2.1 n个if语句(n>=2)   +   最后一个else语句

首先看一段简单的代码,判断两个数值谁大。这里我使用的是python 3.6

def bigger_1(a,b):
    if a > b:  
        print ("%s is bigger" % a)
    if a < b:
        print ("%s is bigger" % b)
    else:
        print("%s is equal to %s" % (a, b))
    return 'The end'
           

初看代码是没有问题的,如果a > b, 输入 a is bigger; 如果a < b, 输出 b is bigger; 否则就输出a is equal to b。

但是实际运行时就发现问题了。

In[24]: bigger_1(5,11)
11 is bigger
Out[24]: 'The end'
           
In[25]: bigger_1(10,6)
10 is bigger
10 is equal to 6
Out[25]: 'The end'
           
In[26]: bigger_1(2,2)
2 is equal to 2
Out[26]: 'The end'
           

bigger_1(10, 6)打印出了两条结果,说明它即通过了第一个if a>b的判断,也执行了else。

这是因为程序对每一条if语句都进行了判断。

bigger_1(10, 6): 第一个if a>b为True, 所以输出10 is bigger。但是程序还是会接着对第二个if进行判断,第二个if a <b为False, 所以程序就直接跳到else, 执行else对应的代码,输出了10 is equal to 6 这样的结果。

else可以理解为其前一个if的互补条件,若前一个if为True, else就会False, 反之else为True。 具体到上面的代码,else就等价于 if a >= b了。

bigger_1(5,11): 第一个if为false, 转到判断第二个if,第二个if a<b为True, 所以输出 11 is bigger。由于第二个if 为 True, 所以else就是False,不执行了。

bigger_(2, 2): 第一个if为false, 转到判断第二个if,由于第二个if 为 False,  所以else就是True,执行。

将上面代码稍微修改一下,把最后一个else 改为 if a == b, 这就把每条判断语句都变成了硬判断(即限定死了为True的条件)。发现结果就没有问题了。

def bigger_2(a,b):
    if a > b:
        print ("%s is bigger" % a)
    if a < b:
        print ("%s is bigger" % b)
    if a == b:
        print("%s is equal to %s" % (a, b))
    return 'The end'
           
In[29]: bigger_2(10,6)
10 is bigger
Out[29]: 'The end'

In[30]: bigger_2(5,11)
11 is bigger
Out[30]: 'The end'

In[31]: bigger_2(2,2)
2 is equal to 2
Out[31]: 'The end'
           

2.2 一个if语句    +   n 个 elif语句 (n >=1)    +   一个else语句

在进一步,保留else, 而将第二个if换成elif,elif是else if的简写格式。发现代码运行也没有问题了。

def bigger_3(a,b):
    if a > b:
        print ("%s is bigger" % a)
    elif a < b:
        print ("%s is bigger" % b)
    else:
        print("%s is equal to %s" % (a, b))
    return 'The end'
           
In[33]: bigger_3(10,6)
10 is bigger
Out[33]: 'The end'

In[34]: bigger_3(5,11)
11 is bigger
Out[34]: 'The end'

In[35]: bigger_3(2,2)
2 is equal to 2
Out[35]: 'The end'
           

bigger_3(10, 6): if a> b 判断为True后,后面的elif和else都直接跳过了。

bigger_3(5, 11): 第一个if为False, 转到判断elif, elif为True, 执行代码,且后面的else就跳过忽略了。

bigger_3(2, 2): if 和elif都为False, 所以执行else对应的输出语句。

完毕!!!