1. 概述

今天我们继续看条件判断语句,主要看逻辑运算符。首先看一下学习计划列表,粗体为已学,斜体为新增或修改内容。计算机编程的原理简要介绍

集成开发环境PyCharm

变量名、数字、字符串、列表

句式、注释

输入和输出

条件判断语句

循环语句

函数

模块和引入

各类数据结构

2. 逻辑运算符

Python的基本逻辑运算符有三个,

and: 左右的条件均为True时,结果才为True

or: 左右的条件有一个为True时,结果就为True

not: 把之后的条件True变False,False变True

我们分别来看每个逻辑运算符:

and:

顾名思义,就是“且”的意思,中学物理里面有涵盖各种逻辑门的知识,这里对应的就是与门。逻辑运算符在当同时需要判断的条件较多时很好用,比如我们要判断一个整数是不是小于10的偶数:

# Ask user to type an integer
a = int(input('Type an integer: '))
# Determine if a is an even number less than 10
if a < 10 and a % 2 == 0:
print("It is an even number less than 10")

如果我们输入数字大于等于10,and左边的条件不满足,就不会输出任何东西;如果我们输入数字是个奇数,and右边的条件不满足,也不会有输出。当且仅当and两边的条件全部满足时,也就是and两边都为True时,屏幕上才会输出第六行代码的那句话。

or:

“或”的意思,对应或门。比如我们判断一个数能不能被3或者被4整除:

# Ask user to type an integer
b = int(input('Type an integer: '))
# Determine if b can be divided by either 3 or 4
if b % 3 == 0 or b % 4 == 0:
print("It can be divided by 3 or 4")

如果我们输入3、6、9之类的3的倍数,满足or左边的条件,显示输出;如果我们输入4的倍数如4、8、12、16,满足or右边的条件,显示输出;如果输入1、5、7、11、13之类的既不能被3整除也不能被4整除的数,则什么也不能显示。

not:

“非”的意思,对应非门,反转后面的条件判断结果。比如我们需要判断用户输入的数不是0:

# Ask user to type an integer
c = int(input('Type an integer: '))
# Determine if c is not 0
if not c == 0:
print("It is not zero")

如果我们输入0,c==0给出True,not反转结果,if后面的最终判断结果为False,屏幕上就没有输出;如果输入非0整数,not c==0就为True,显示输出。

其实这里“if not c == 0”相当于“if c != 0“,鉴于Python要优雅简洁,显然上面这段用not的代码没有!=看着心旷神怡,在这里只是用来给大家举例说明not怎么用。

3. 真值表

通过真值表,可以最直观的来看and、or和not的运算定律:

andTRUEFALSE

TRUETRUEFALSE

FALSEFALSEFALSE

orTRUEFALSE

TRUETRUETRUE

FALSETRUEFALSE

notTRUEFALSE

FALSETRUE

求问知乎里怎么打表格。。。

这里每张表第一行是条件1的结果,第一列是条件2的结果,比如在and里,当条件1(and左边的条件)判断为True,条件2(and右边)判断为True时,and的结果就为第二行第二列的True。

4. 德·摩根定律

not (A and B) = (not A) or (not B)

not (A or B) = (not A) and (not B)

这是一个公式,在数字系统中运用很广泛(因为最基本),这里拎出来专门介绍是因为很多同学,包括打了很久代码的同学也经常会在这里犯逻辑性的错误。什么时候该用and、什么时候该用or、and和or还有not组合起来判断、一下子要涵盖的条件非常多的时候,我们必须要学会明察秋毫,手握最基本的定律、从最基本的例子推断,小心谨慎步步为营。

5. 运算符的组合应用

那么多运算符,不一定一次只用一个,我们可以一下子用很多。

if b % 3 == 0 or b % 4 != 0:

if a < 3 and a != -8:

if x in list1 and x not in list2 and x not in list3:

可以看到当条件堆积的时候,阅读就会有障碍,我们可以用括号让代码更清晰:

if (x in list1) and (x not in list2) and (x not in list3):

如果我们有not,括号就非常重要了:

not a and b

相当于 (not a) and b

而不是 not (a and b)

and和or的判断也很有趣,Python也跟我们一样,读码的时候从左至右,所以就有了如下规律,但是这个规律个人感觉在Python中应用得并不多,在C之类的语言中倒是有很讨巧的运用。

a and b

当左边条件a为False的时候,我们知道这整个句子不可能为True了,Python就会直接跳过b的判断,输出False;当a为True时,b才会被执行判断,最后输出结果。

a or b

同样,当a为True的时候,这个句子肯定为True了,直接跳过b的判断,看也不看直接输出True;当a为False的时候才去判断b的正误,最后输出结果。

明天继续介绍条件判断语句,主要介绍一些有用的函数和条件语句的嵌套(其实已经出现过了)。