Python 逻辑控制与循环

逻辑判断一一True & False

逻辑判断是编程语言最有意思的地方,如果要实现一个复杂的功能或程序,逻辑判断必不可少。if-else 结构就是常见的逻辑控制的手段,当你写出这样的语句的时候,就意味着你告诉了计算机什么时候该怎么做,或者什么是不用做的。学完了前面几章内容之后,现在的你也许早已对逻辑控制摩拳擦掌、跃跃欲试,但是在这之前我们需要先了解逻辑判断的最基本准则一一布尔类型(Boolean Type)。
在开始前,想强调一点,如果你怀疑自己的逻辑能力,进而对本章的内容感到畏惧,请不要担心,我可以负责任地说,没有人是“没有逻辑的”,正如我们可以在极其复杂的现实世界中采取各种行动一样,你所需要的只不过是一些判断的知识和技巧而已。
布尔类型(Boolean)的数据只有两种,True 和 False (需要注意的是首字母大写)。人类以真伪来判断事实,而在计算机世界中真伪对应着的则是1和0。
接下来我们打开命令行/终端进入 Python 环境,或者直接在 PyCharm 中选择 Python Console ,这样会更方便展示结果。True & False 这一小节的内容我们都在命令行/终端环境里输入代码。

Python 逻辑控制与循环

注:此处使用命令行/终端只为更快展现结果,在IDE返回布尔值仍旧需要使用 print 函数来实现。

输入这些代码:

1>2
1<2<3
42 != '42'
'Name' == 'name'
'M' in 'Magic'
number = 12
number is 12

我们每输入一行代码就会立即得到结果,这几行代码的表达方式不同,但是返回结果却只有 True 和 False 这两种布尔类型,因此我们称但凡能够产生一个布尔值的表达式为布尔表达式(Boolean Expressions)

1 > 2              # False
1 < 2 <3           # True
42 != '42'         # True
'Name' == 'name'   # False
'M' in 'Magic'     # True
number = 12 
number is 12       # True

可以看到,上面这些能够产生布尔值的方法或者公式不尽相同,那么我们来一一讲解这些运算符号的意义和用法。

比较运算(Comparison)

对于比较运算符,顾名思义,如果比较式成立那么则返回 True,不成立则返回 False。

Python 逻辑控制与循环

除了一些在数学上显而易见的事实之外,比较运算还支持更为复杂的表达方式,例如:

  • 多条件的比较。先给变量赋值,并在多条件下比较大小:
middle = 51 < middle < 10
  • 变量的比较。将两个运算结果储存在不同的变量中,再进行比较:
two = 1 + 1three = 1 + 3two < three
  • 字符串的比较。其实就是对比左右两边的字符串是否完全一致,下面的代码就是不一致的,因为在 Python 中有着严格的大小写区分:
<code class="language-py">'Eddie Van Helen' == 'eddie van helen'
  • 两个函数产生的结果进行比较:比较运算符两边会先行调用函数后再进行比较,真结果等价于 10 > 19
<code class="language-py">abs(-10) > len('length of this word')

注:abs( )是一个会返回输入参数的绝对值的函数。

比较运算的一些小问题

不同类型的对象不能使用“<,>,<=,>=”进行比较,却可以使用’==’和’!=’,例如字符串和数字:

42 > 'the answer'      #无法比较  
42 == 'the answer'    #False
42 != 'the answer'    #True

需要注意的是,浮点和整数虽是不同类型,但是不影响到比较运算:

5.0 == 5              #True
3.0 > 1               #True

你可能会有一个疑问,“为什么 1 = 1 要写作 1 == 1 ?”,前面提及过 Python 中的符号在很多地方都和数学中十分相似,但又不完全一样。“=” 在 Python 中代表着赋值,并非我们熟知的“等于”。所以,“1 = 1”这种写法并不成立,并且它也不会给你返回一个布尔值。使用 “==” 这种表达方式,姑且可以理解成是表达两个对象的值是相等的,这是一种约定俗成的语法,记得就可以了。
比较了字符串、浮点、整数……还差一个类型没有进行比较:布尔类型,那么现在实验一下:

True > False
True + False > False + False

这样的结果又怎么理解呢?还记得前面说过的吗,True 和 False 对于计算机就像是1和0一样,如果在命令行中敲入 True + True + False 查看结果不难发现,True = 1, False = 0 也就是说,上面这段代码实际上等价于:

1 > 0
1 + 0 > 0 + 0

至于为什么是这样的原因,我们不去深究,还是记得即可。
最后一个小的问题,如果在别的教材中看到类似 1<>3 这种表达式也不要大惊小怪,它其实与 1!=3 是等价的,仅仅知道就可以,并不是要让你知道“茴字的四种写法”。

成员运算符与身份运算符(Membership & Identify Operators)

成员运算符和身份运算符的关键词是 inis。把 in 放在两个对象中间的含义是,测试前者是否存在于 in 后面的集合中。说到集合,我们先在这里介绍一个简单易懂的集合类型一一列表(List)。
字符串、浮点、整数、布尔类型、变量甚至是另一个列表都可以储存在列表中,列表是非常实用的数据结构,在后面会花更多篇幅来讲解列表的用法,这里先简单了解一下。
创建一个列表,就像是创建变量一样,要给它起个名字:

album = []

此时的列表是空的,我们随便放点东西进去,这样就创建了一个非空的列表:

album = ['Black Star','David Bowie',25,True]

这个列表中所有的元素是我们一开始放好的,那当列表创建完成后,想再次往里面添加内容怎么办?使用列表的 append 方法可以向列表中添加新的元素,并且使用这种方式添加的元素会自动地排列到列表的尾部:

album.append('new song')

接着就是列表的索引,如果在前面的章节你很好地掌握了字符串的索引,相信理解新的知识应该不难。下面代码的功能是打印列表中第一个和最后一个元素:

print(album[0],album[-1])

接下来我们使用 in 来测试字符串 ‘Black Star’ 是否在列表 album 中。如果存在则会显示 True,不存在就会显示 False 了:

'Black Star' in album

是不是很简单?正如前面看到的那样,in 后面是一个集合形态的对象,字符串满足这种集合的特性,所以可以使用 in 来进行测试。
接下来再来讲解 isis not,它们是表示身份鉴别(Identify Operator)的布尔运算符,innot in 则是表示归属关系的布尔运算符号(Membership Operator)。
在 Python 中任何一个对象都要满足身份(Identity)、类型(Type)、值
(Value)这三个点,缺一不可。is 操作符号就是来进行身份的对比的。试试输入这段代码:

the_Eddie = 'Eddie'
name = 'Eddie'  
the_Eddie == name
the_Eddie is name

你会发现在两个变量一致时,经过 is 对比后会返回 True。
其实在 Python 中任何对象都可判断其布尔值,除了 0、None 和所有空的序列与集合(列表,字典,集合)布尔值为 False 之外,其它的都为 True ,我们可以使用函数 bool() 进行判别:

bool(0)      #False
bool([])     #False
bool('')     #False
bool(False)  #False
bool(None)   #False

可能有人不明白,为什么一个对象会等于 None。还记得在函数那章的敏感词过滤器的例子吗?在定义函数的时候没有写 return 依然可以使用,但如果调用函数,企图把根本就不存在的“返回值”储存在一个变量中时,变量实际的赋值结果将是 None。
当你想设定一个变量,但又没想好它应该等于什么值时,你就可以这样:

a_thing = None

布尔运算符(Boolean Operators)

and、or 用于布尔值的之间的运算,具体规则如下:
Python 逻辑控制与循环

and 和 or 经常用于处理复合条件,类似于 1 < n < 3 ,也就是两个条件同时满足。

1 < 3 and 2 < 5  #True
1 < 3 and 2 > 5  #False
1 < 3 or 2 > 5   #True
1 > 3 or 2 > 5   #False

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程