2.3.4 条件表达式和pass语句
在第3章即将讲到的控制语句(选择结构、循环结构)中会根据条件表达式的值来决定下一步的走向。前面已经提到过,在进行逻辑判断的时候,对于基本数据类型来说,基本上每个类型都存在一个值会被判定为False。被判定为False的值除了False以外,还有None、数值类型中的0值、空字符串、空元组、空列表、空字典、空集合等。条件表达式的值只要不是判定为False的值就认为判定为True,这样只要是Python合法的表达式都可以作为条件表达式,包含有函数调用的表达式也可以。
那么,如何将成绩score在90~100或50~60(均包含)之间表示为条件表达式呢?我们可以这样考虑:先将成绩score在90~100(均包含)之间表示出来,可以用90=score =100表示;再将成绩score在50~60(均包含)之间表示出来,可以用50=score =60表示;最后考虑这两者之间的关系,是或者的关系,用or来连接;这样,最后的条件表达式可以表示为90=score =100 or 50=score =60。如果某一个score为95,则该表达式变为90=95=100 or 50=95=60,利用2.3.3讲过的表达式的知识,我们知道这个表达式的值为True;如果某一个score为75,则该表达式变为90=75=100 or 50=75=60,同样利用2.3.3节讲过的表达式的知识,我们知道这个表达式的值为False。这样,根据不同的score值,结合if语句就能执行不同的分支。
如何用条件表达式表示“性别sex为男且专业subject是统计或数学”呢?首先我们将“性别sex为男”表示出来:sex=='男';然后将“专业subject是统计或数学”表示出来,这里又要进一步细分:专业subject是统计(subject=='统计')、专业subject是数学(subject=='数学'),这两者是“或”的关系,用or来连接,经过这样的分析,“专业subject是统计或是数学”表示为subject=='统计'or subject=='数学',再分析与“性别sex为男”之间的关系是“并且”的关系,用and来连接,这样最后的表达式表示为sex=='男'and subject=='统计'or subject=='数学',请读者思考一下,这样的表示对吗?显然是错误的,如果这样表示,根据运算次序,先计算sex=='男'and subject=='统计',然后再与subject=='数学'进行or运算,这就表示成“性别sex为男且专业subject是统计或者专业subject是数学(性别不限)”,与题意不相符合。那么,怎样表示才是正确的呢?我们可以用括号来改变运算次序,则最后的表达式可以这样表示:sex=='男'and(subject=='统计'or subject=='数学')。这只是其中的一种表示,我们还可以用in运算符,则最后的表达式还可以表示为sex=='男'and subject in['统计','数学']。这里还要强调的是,条件表达式中不允许使用赋值运算符“=”,如果要判断是否相等,要使用关系运算符“==”。
判断方程是否有实根时要用到判别式,当判别式b2-4ac≥0时方程有实根,那么b2-4ac≥0如何表示成合法的条件表达式?可以直接用b∗∗2-4ac>=0表示吗?答案是否定的,在Python表达式中∗不能省略。我们可以用b∗∗2-4∗a∗c>=0或者pow(b,2)-4∗a∗c>=0来表示。
另外还要提的是pass语句。pass是一个空语句,不做任何事情,一般只用作占位语句,为了保持程序结构的完整性。在程序设计的过程中,我们可以用pass替代某些代码,在后续过程中再做补充。
程序结构不完整,出错。
用到pass语句,程序结构完整。
pass语句也不影响程序的执行。