(欢迎感兴趣的读者点赞关注~)
在前面的章节中,我们已经讲过代码的顺序执行,但是很多时候顺序地工作并不符合我们的思想和需求。我们想对不一样的条件做不同的工作,就好比面对不同的人说不同的话、撒不同的慌,汤是用来喝的而菜是用来吃的等等。为了实现因条件而计算,这个时候,就要请出编程里最重要的部分之一——逻辑判断。
逻辑判断借助的是对不同条件的判定,来确定接下来应该执行哪些代码,其核心的借助力量就是布尔值和布尔逻辑。
布尔逻辑运算
在前面章节里,我们已经介绍过布尔(bool)数据类型以及一些计算逻辑,在这里,我们啰嗦一下,再介绍一下布尔逻辑运算,以便于更好地理解条件判断或者代码分支结构。
(1)布尔运算
首先,布尔值只有“真”(或“是”,Python中以“True”表示)、“假”(或“否”,Python中以“False”表示),其逻辑计算也只有“与”、“或”、“非”,Python中使用“and”、“or”、“not”三个关键词(注意关键词不能作为变量名)来表示及计算,计算也遵循基本的逻辑计算法则:
True and True = TrueTrue and False = FalseFalse and False = FalseTrue or True = TrueTrue or False = TrueFalse or False = Falsenot True = Falsenot False = True
同时,设A、B、C为布尔值,则其运算还满足基本的交换律、德摩根律等等:
A and B = B and AA or B = B or Anot (A and B) = (not A) or (not B)not (A or B) = (not A) and (not B)A and B and C = (A and B) and C = A and (B and C)A or B or C = (A or B) or C = A or (B or C)
(2)位运算或其他类型的布尔运算
了解过逻辑计算的读者可能会问,Python有没有提供类似异或、同或的计算逻辑,答案是布尔计算没有直接提供,但是可以自行将其转化为最简单的“与”、“或”、“非”逻辑来代替。
不过,对于数字,由于其存储在计算机中是以二进制的“0”、“1”表示,其本质上也可以看作“False”、“True”,因此,Python也提供了二进制位运算的计算符号,如下表。而至于位运算的具体计算和使用,就留给读者去拓展,我们此处不去深究。
符号 | 解释 | 规则 |
& | 与 | 两个位为1,计算结果才为1 |
| | 或 | 两个位为0,计算结果才为0 |
^ | 异或 | 两个位相同为0,相异为1 |
~ | 取反 | 0变1,1变0 |
<< | 左移 | 各二进制位全部左移若干位,高位丢弃,低位补0 |
>> | 右移 | 各二进位全部右移若干位,对于无符号数,高位补0;对于有符号数,各编译器处理方法不同,有的补符号位(算术右移),有的补0(逻辑右移) |
符号数是计算机组成原理中对数字在计算机中存储方法对介绍,简单来说主要是用来区分正数、负数。由于符号数的存在,二进制数的位操作输出结果可能就会与实际的期望有所差异,由于符号数的介绍需要很大篇幅且与此处关系较小,因此不做深入介绍。
a = 0b11010b = 0b10100print(bin(a & b)) # Output: 0b10000print(bin(a | b)) # Output: 0b11110print(bin(a ^ b)) # Output: 0b11110print(bin(~a)) # Output: -0b11011print(bin(a >> 2)) # Output: 0b110print(bin(a << 2)) # Output: 0b1101000# bin 函数用于讲数字转换为二进制表示
往期回顾~
Python学习笔记——从入门到报废(六、常用内置函数与顺序执行)
Python学习笔记——从入门到报废(五、变量和数据类型(下))