9: 其他,和,或,非

这节课会让你以更优雅的方式做一些复杂的案例检查,通过使用两个新的Python语言。

  • if «C»从句之后,如果C错误,会运行else从句。
  • 结合布尔条件,通过使用A and BA or Bnot A

else

编写程序时一个普遍的任务是你想要检验一些条件,根据条件正确与否,执行一个或另一个动作。之前,有一个练习要你做一些事情如果年龄age小于0,做另一些事情如果年龄age大于等于0;下面是一个参考答案

if age >= 0:  
  print('You are not necessarily a time traveller')
if age < 0:
  print('You are a time traveller')
现在让我们使用else重新编写一下。

示例
 
你可以在下面的框中输入程序的输入。

通常来说,你通过如下的语句来使用else

if «test»:
   «true-body»        # an indented block
else:
   «false-body»       # another indented block
Python会进行测试。如果测试通过,那么通过之后做一些事情,如果测试没通过,那么做另一些事情。

else的哲学

我们使用else没有新的功能,但是它确实让我们的代码更便于阅读,调试,维护。下面的两段代码做了同一件事:

版本A
if height < 256:
   print('Too short for this ride')
else:
   print('Welcome aboard!')
版本B
if height < 256:
   print('Too short for this ride')
if height >= 256:
   print('Welcome aboard!')

两个都做了同一件事,B甚至不需要else。然而,大部分编程人员会觉得A更好。比如,对于A来说,改变条件(比如使用128而不是256)仅需要一处改动而不是两处。同样,A可以立刻被人读懂,而在B中你需要检查两个条件通过与否。

编程练习: 绝对值
一个数的绝对值是根据以下定义的。对于一个大于等于0的数xx 的绝对值是x。反之,当x小于0,x的绝对值是-x,换句话说,和x一样但是没有负号。比如,5的绝对值是5-10的绝对值是10。通过使用ifelse,编写一个程序,需要一个整数作为输入,打印出它的绝对值。

Python内建方程abs(x)可以用来计算x的绝对值。上面的题目中不允许你使用,但是在以后的程序中你可以使用。

elif

Python还有另一个关键词elif,可以让一行中的不同条件查看起来更简单。最基本的使用elif的模式如下:

if «test1»:
   «body1»        # 如果test1正确则运行
elif «test2»:
   «body2»        #  如果test1错误,test2正确,则运行
正如你所想的一样,elif代表"else if",因为它等同于在else里面加一个if。但是,使用 elif 就会省下很多 代码,同时也会省下很多缩进,让你的程序更容易阅读,调试,编辑。此外,你可以使用无数次elif语句在同一行,甚至或在最后加上一个else语句:

if «test1»:
   «body1»      # 如果test1正确则运行
elif «test2»:
   «body2»      # 如果test1错误,test2正确,则运行
elif «test3»:
   «body3»      # 如果test1和test2为错误,test3为正确,则运行
else:           # 最后这两行是可选的
   «else-body»  # 如果所有tests都为错误,则运行
 

这是一个在循环中使用 elif 的例子。你能猜到结果是什么 吗?

编程练习: 第一、第二、第三
1st, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th, 9th叫做序数词。编写一个程序,需要读取一个1~9之间的整数x作为输入值,并根据x输出相应的序数词。
提示:你不需要设立9个不同的情况;4个就够。

布尔运算符:and, or, not

你可以通过使用"and","or"和"not"结合布尔运算符,逻辑和英文一致。

  • A and B是正确的,如果A正确,B也正确;是错误的如果任何一个是错的(比如,你会淋湿,如果下雨了and你忘带伞了)。
  • A or B是正确的,如果A正确或B正确;是错误的,如果两个都是错误的(比如,学校是关着的,如果是节假日or是周末)。
  • not A是正确的,如果A是错误的;是错误的,如果A是正确的(比如,你觉得饿,如果你not 吃午饭)

下面是一个程序,自动展示出所有可能性。就像是'乘法表'一样,这个表叫做(逻辑运算)真值表

示例
真值表

下面是一个使用and的例子,该程序将数字转换成了字母,还做了一些验错。

示例
一个and的示例:将数字转换成字母,1=A,2=B...。
你可以在下面的框中输入程序的输入。

编程练习: 26个字母
编写一个程序,做上面的例子相反的事情:需要读取一个字符作为输入,,输出相对应的数字(在1和26之间)。你的程序应该只接受大写字母。对于验错,打印出invalid如果输入不是一个大写字母。提示备用字符串比较法

选择题练习: 摩根律
下面哪一个等同于A or B
正确! 这里有一种方式得到答案。首先,not (A or B) 是正确的,当AB都是错的。同样,(not A) and (not B)是正确的,当not Anot B都是正确的。换句话说, AB都是错的。所以我们得到以下等式:
(not A) and (not B) = not (A or B)
not放在两侧,所以我们得到
not ((not A) and (not B)) = not (not (A or B))
,同时not(not X))恒等于X,所以
not ((not A) and (not B)) = not (not (A or B)) = A or B
。这种改写布尔表达式的方式是De Morgan's laws之一.

运算顺序

布尔运算符有"运算顺序",就像是数学运算也有顺序一样。顺序是

NAO: not (最先级), and, or (最后级)

所以说比如,

not x or y and z 意味着 (not x) or (y and z)

通过使用这些实例,我们将以一个简短的问题来结束这节课。

选择题练习: 运算顺序

A or not B and C
的值是什么,如果
(A, B, C) = (False, True, True)?提示
正确! 运算方式让这个等价于
A or ((not B) and C)
替换值,我们得到
False or ((not True) and True)
,然后简化得到
False or ((not True) and True)
= False or (False and True)
= False or False
= False
一旦你完成了这个,你就可以上下一节课了。