11.11大促主会场
新人页面
精选商品
首月0月租体验,领12个月京东PLUS
自营热卖

07.合意就执行,不行就拉倒-if/else条件控制(一)

只倾心不倾城 1年前   阅读数 115 0

青少年、零基础、初学者Python编程从入门到精通,“老马带小马 一块学Python”编程系列。

先来认识一下本节将涉及到的几个Python关键字:

  • if:英文意思是“如果、假若”,它将是本节学习的重点。
  • else:英文意思是“其他的、另外的”,一般与if配合使用。
  • elif:相当于“else + if”的组合,表达“另外,如果”的意思,与if配合使用。
  • and:英文意思是“和、与”,在Python中作为逻辑操作符,表示“并且”的意思。
  • or:英文意思是“或者”,在Python中作为逻辑操作符,表示“或者”的意思。
  • True:英文意思是“真实的,确实的”,在Python中属于一种数据类型(“布尔类型”),且表示“真”。
  • False:英文意思是“不真实的,不确实的”,在Python中属于一种数据类型(“布尔类型”),且表示“假”,与True相反。“布尔类型”与“整型”(代表着整数)、“浮点型”(代表着小数)一样,代表了一类数据,且“布尔类型”只有两个值:True和False。

先通过下面的例子了解一下“if”的使用:

chengji=88
if chengji >=60:
    print("及格!")
  • 第1行,赋值chengji变量为88;
  • 第2行,在“if”后、“:”(再次提醒必须是英文冒号)前,有一个条件判断表达式,比如在这里,条件判断表达的意思是:“chengji大于等于60”,要是满足了这个条件,电脑就会执行“:”下面缩进的程序块,即打印出“及格!”,要是不满足这个条件,就不会执行“:”下面缩进的程序块。
  • 第3行,紧跟在if语句的“:”后面,并缩进排版,为从属于第二行if的程序块,要是if行的条件判断不满足,则该行代码不会执行。

接着,介绍一下常见的比较运算符:

  • <:小于,要是运算符左侧的数小于右侧的数,则表达式条件判断正确,我们则可以说这个表达式为真或True,比如:“1<2”这个表达式则为True,或者说这个表达式的值为True。
  • <=:小于等于,要是左侧的数大于右侧的数,则表达式条件判断为假,我们则可以说这个表达式为假或False,或者说这个表达式的值为False。
  • >:大于
  • >=:大于等于
  • ==:等于,我们前面章节提到过,一个等于,即“=”,表示赋值操作,把右侧的值赋值给左侧的变量,而“==”,两个连写的等于则表示条件判断,判断左侧的数是否等于右侧的数,若相等则为True,否则为False。
  • !=:不等于

再通过下面的例子看看“if”与“else”的配合使用:

chengji=88
if chengji >=60:
    print("及格!")
else:
    print("不及格!")
  • 第1行至第3行与上面的例子是一样的,当if后面的条件判断为True时(即chengji满足大于等于60时),则执行if下面的程序块,即打印“及格!”,若不满足,则从属于if的程序块不会执行。
  • 第4行,需要注意的是“else”必须与“if”对齐,意味着两者是并列的,而且两者是二选一的关系,且“else”后面也有个“:”,意味着紧跟着的、缩进的代码属于“else”的程序块。
  • if与else二选一的关系,意味着要是if后的条件判断为True,则执行完从属于if的程序块后,后面的else以及从属于else的程序块都会直接跳过,不会被执行;而要是if后面的条件判断为False,从属于if的程序块不会被执行,而是直接跳到从属于else的程序块,打印出“不及格!”。建议大家可以按照上一节学到的程序调试方法,通过给chengji设置不同的值,实际单步调试、跟踪一下不同条件判断情况下程序的执行路径,能够更清晰本节我们讲到的条件控制语句。

接下来,再通过下面的例子看看“if-elif-else”的配合使用:

chengji=88
if chengji >= 90:
    print("优秀!")
elif chengji >= 80:
    print("良好!")	
elif chengji >= 70:
    print("中等!")
elif chengji >= 60:
    print("及格!")
else:
    print("不及格!")

上述程序的执行流程是这样的:执行第1行->执行第2行->执行第4行->执行第5行,然后整个程序运行完毕、退出。

从以上代码中可以看得出来,对于条件控制语句,第一个条件判断总是使用“if”关键字,“if”之后、“else”之前要是还有其他条件判断,则一律采用“elif”关键字,这三个关键字组成了一个完整的“if-elif-else”控制块,而且所有这些关键字必须是严格对齐的;另外,从上面的执行流程中可以看得出来,程序执行时,只要有“else”存在,程序一定且只会执行一次从属于if、elif或者else的程序块。对于if或者elif行,只要其后的条件满足(即为True),则执行完毕其下的程序块后,立即跳出整个“if-elif-else”控制块,如果if以及elif语句中的条件均不满足,才会执行else下的程序块。

接下来,我们从另外一个角度再仔细分析一下上述代码,因为chengji的取值为88,所以它其实同时满足第1、第2和第3个elif中的条件判断,即该值大于等于80,也大于等于70,同时还大于等于60,但是,因为该值首先符合了第1个elif中的条件判断(即该值大于等于80),执行完该条件判断下的程序块(即打印完毕“良好!”)后,程序就跳出整个“if-elif-else”控制块了,所以后面的条件判断即使满足要求,也不会被执行。
在这里插入图片描述
如上图所示,对于存在包含关系的条件判断,比如“大于等于90”所涵盖的范围,从属于“大于等于80”所涵盖的范围,而“if-elif-else”条件判断的特点是:从上至下,按顺序执行条件判断,只执行第一个符合条件的程序块,因此,为了准确、精准的匹配,对于存在包含关系的条件判断,一定要按照涵盖的范围,由小范围到大范围进行排序。还是以上一段代码为例,要是“大于等于70”排在了“大于等于80”前面,则对于88分的成绩,首先满足了“大于等于70”的条件,则执行完毕打印“中等!”,就跳出了整个“if-elif-else”控制块,导致结果判断失误。

另外一种更保险的做法就是对各项条件判断进行精准描述,避免对排序的依赖,如下所示,if及elif所在的行(连同其下所属的代码块)任意调换顺序,都不会导致结果判断失误。

if chengji >= 90:
    print("优秀!")
elif chengji >= 80 and chengji < 90:
    print("良好!")	
elif chengji >= 70 and chengji < 80:
    print("中等!")
elif chengji >= 60 and chengji < 70:
    print("及格!")
else:
    print("不及格!")

在上面的条件判断中用到了“and”逻辑操作符,以“chengji >= 80 and chengji < 90”为例,表达的意思为“chengji大于等于80,而且同时满足小于90”,即,只有“and”左右两侧的条件都为真的情况下,“and”连接的整个表达式才为真;同理,要是由“or”连接的话,则“or”左右两侧的条件只要有一个为真,则“or”连接的整个表达式就为真。补充说明一下,对于存在“and”、“or”的表达式,之所以先进行他们两侧的条件判断,最后才进行“and”、“or”的运算,因为“逻辑操作符”的运算优先级低于“比较运算符”,就像“+-”运算符的优先级低于“×÷”一样,所以先进行“×÷”运算,后进行“+-”运算。

在本节的最后,我们总结一下“if-elif-else”条件控制的流程图,如下图所示。

Created with Raphaël 2.2.0 开始执行for循环 if条件判断 if代码块 for循环执行完毕 elif条件判断1 elif代码块1 elif条件判断2 elif代码块2 elif条件判断... elif代码块... else代码块 yes no yes no yes no yes no

青少年、零基础、初学者Python编程从入门到精通,请扫描关注“老马带小马 一块学Python”编程系列。
老马带小马 一块学Python
原文:07.合意就执行,不行就拉倒-if/else条件控制(一)


注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: