Python少儿编程小课堂(三)
入门篇(3)比较运算和逻辑运算
运算符(2)
上一节课讲了算术运算符和赋值运算符,本节继续讲其它运算符:
比较运算符
==、!=、>、<、>= 、<=
大于<、小于> 最好理解,和数学里的不等号相同。
>=和<= 分别对应数学中的大于等于≥和小于等于≤。
==和 != 分别对应数学中的等于=和 不等于 ≠。
a == b 用双等号表示两个操作数是否相等,是为区别赋值运算的单个等号。
连续比较运算
和连续赋值一样,Python同样允许比较做连续运算,这让比较更像是一个数学表达式。如:
0 < a < 5, 0 <= b < 3, 8 <=c <= 9, 0 < a + b < c, ... 都是合法的比较运算。
比较运算的结果
是一个布尔型的值,要么是True,要么就是 False。
若: a = b = 2; c = 1; d = 0
则: a == b、a>c、a+b>c+d、b==c*2、b>=c+d ,值为True
a > b、b<c+d、a+c<=b、a+b+c<=3、a//b != c, 值为False
逻辑运算符
and、or、not分别称为: 逻辑与、逻辑或、逻辑非,简称:与、或、非。
逻辑运算中, 1 == True, 0 == False
逻辑运算与表达式
与运算、或运算
注:就是因为这些规律,在逻辑代数中与运算被称为逻辑乘、或运算被称为逻辑加。是不是很形像? 0乘任何数都为0;1加任何数都为1。
非运算
not1 = 0
not0 = 1
not True = False
not False = True
运算优先级
not>and>or
连续比较的等价算式:
0 < a < 5, 等价于 a>0 and a<5
0 <= b < 3,等价于 b>=0 and b<3
8 <=c <= 9,等价于 c>=8 and c<=9
not 1 < a < 5, 等价于 a <= 1 or a>=5
条件表达式condition
由比较运算或逻辑运算,或者它们的混合运算组成的表达式。
例1: 三条线段长度分别为a,b,c,能够组成三角形的必要条件:
a + b > c and b + c > a and c + a > b ,即任意两边之和大于第三边。
例2: 以下两个条件表达式,在当n为整数时完全等价:
n == 1 or n == 2 or n == 3 or n == 4
1 <= n <= 4
例3: 一个三位整数n,个位十位百位上至少有一个1的条件表达式为:
n // 100 == 1 or n // 10 % 10 == 1 or n % 100 == 1
扩展阅读:
逻辑运算定律
把条件表达式condition看作一个变量A,它的值只有1或0,我们称A为“逻辑变量”。
零一律
A and 0 = 0 A or 0 = A
A and 1 = A A or 1 = 1
重叠律
A and A = A A or A = A
互补律
A and not A = 0 A or not A = 1
还原律
not not A = A
交换律
A and B = B and A A or B = B or A
结合律
A and (B and C) = (A and B) and C
A or (B or C) = (A or B) or C
分配律
A and (B or C) = A and B or A and C
A or B and C = (A or B) and (A or C)
前面一个式子很容易想到,后一个式子要转2个弯:
A or B and C = A and (1 or B or C) or B and C
= A and A or A and B or A and C or B and C
= (A or B) and (A or C)
反演律
not (A and B) = not A or not B
not (A or B) = not A and not B
反演律又称“摩根定律”、“德·摩根定律”。
吸收律
A or A and B = AA and (A or B) = A
吸补律
A or not A and B = A or B
有没有注意到交换律、结合律、分配律(1)与代数中的运算律十分相像。
混合运算
与非运算
not ( A and B)
或非运算
not ( A or B)
与或非运算
not ( A and B or C and D)
异或运算
A and not B or not A and B , AB不相等结果为1。
1 and not 0 or not 1 and 0 = 1
0 and not 1 or not 0 and 1 = 1
1 and not 1 or not 1 and 1 = 0
0 and not 0 or not 0 and 0 = 0
同或运算
A and B or not A and not B, AB相等结果为1。
1 and 0 or not 1 and not 0 = 0
0 and 1 or not 0 and not 1 = 0
1 and 1 or not 1 and not 1 = 1
0 and 0 or not 0 and not 0 = 1
两个逻辑变量A和B的异或运算和同或运算是互补关系。
可以理解为“异或非”即同或;“同或非”即异或。
Python没有定义异或和同或运算,在逻辑代数中分别表达为:A⊕B 、A⊙B。
【复习思考题】
1. 一个整数n,判断它是奇数或者偶数的条件表达式分别是什么?
2. 一个三位整数n,写出它在个位十位百位上至少有两个1的条件表达式。
3. 已知 max(a, b)表示a,b之大者,怎么表示三角形三边的必要条件?
4.*证明吸收律、吸补律的正确性。
5.*写出A⊕B⊕C 的Python表达式。