第三章 运算符
学习要点
- Python的4种运算符:算术运算符、赋值运算符、比较运算符、逻辑运算符。
- 运算符的优先级。
对标内容
- 掌握并熟练编写带有数值类型变量的程序,具备解决数学运算基本问题的能力。
- 理解比较表达式、算术运算符、逻辑运算的基本概念,掌握Python编程基础的逻辑表达式。
- 学会使用算术运算符(+、-、*、/ )、赋值运算符(=)、比较运算符(==、 <、>、<=、>=、!=) 逻辑运算符(and、or、not),知道运算符的优先顺序。
情景导入
计算机编程最早是为了解决数学问题而发明的。宽泛地说,我国古代的算盘也是一种计算器,只不过这种计算器不是用电的,所以不能称为电子计算机。计算机编程始终是和数学紧密结合的,特别是人工智能时代的编程,大部分是对数据的处理和挖掘,这些都离不开数学。所以,学好数学对学习编程有着非常重要的帮助;反过来,学习编程也有利于学习数学。
算术运算符
知识点详解
Python中的算术运算符一部分和我们数学中的算术运算符一致,但是也有一部分很不相同,具体如表3-1所示。
表3-1 算术运算符
名称 | 数学中的运算符 | Python中的运算符 | 在Python中的作用 |
---|---|---|---|
加 | + | + | 把两个对象相加 |
减 | - | - | 把两个对象相减 |
乘 | × | * | 把两个数相乘或是返回一个被重复若干次的字符串 |
除 | ÷ | / | 两个对象相除,商是小数(哪怕能整除,也保留一位小数) |
取整除 | // | 取两个数相除的商(整数) | |
取模 | % | 取两个数相除的余数 | |
幂 | ** | 取x的n次方的结果 |
Python中的加和乘可以用于字符串类型运算,但是其他运算符不能用于字符串类型。
在Python中有两个运算符在小学数学中是没有的,一个是取整除,一个是取模,这两个运算其实都是数学除法运算在Python中的补充。
算术运算符的运算规则和顺序是和数学中的四则混合运算的规则和顺序一致的。
易错点
- 取整除(// )是向下取整,不是四舍五入,也可以理解为去掉余数。 比如:24//5的结果4,并不是5。
- 取模(%)是取两个数相除的余数,如果能整除,则取模结果为0。
模拟考题
考题1 单选题 a=2, b=3,那么c=a**b运算的结果是?()
A. 6 B. 8 C. 9 D. 23 答案:B
解析:在Python中代表的是籍运算,相当于数学中的23,也就是3个2 相乘,所以结果是8,选B。
考题2 单选题
执行(2*3)/(9-3*2),输出的结果是什么?()
A. 1 B. 2.0 C. 2 D. 1.0
答案:B
解析:根据数学运算的规则,题目中的算式可以写成6 ÷ 3。虽然6÷3确实等于2,但是在Python中,如果能除尽,系统会自动保留一位小数,所以正确的应该是2.0而不是2,所以B正确。
考题3 单选题
print(46//8)的结果是?()
A. 5 B. 6 C. 5.0 D. 5.75
答案:A
解析://在Python中是取整除运算符,其作用是取两个数相除的商(整数),舍弃余数。本题中,46除以8的商是5,所以选择A。这里特别要提醒大家,取整除运算的结果是没有小数点的,所以C也是错误的。
考题4 单选题
要抽出一个三位数(如479)的个位上的数字,输入以下哪段代码可以获得 其中的个位数上的9?()
A. print(479%10//10) B. print(479//10//10) C. print(479%10%10) D. print(479//10%10)
答案:C
解析:要取三位数的个位上的数字,其实最简单的方法就是求这个数除以10的余数,但是题目中并没有479%10的选项。我们经过观察就可以看出,A 和C比较符合,那么我们来看A选项,它可以转化为9//10(9整除10),结 @ 果为0; C选项可以转化为9%10(9取模10),结果为9,所以选择C。当然, 我们也可以计算一下其他两个选项,B的结果为4; D的结果为7。其实通过这 道题,我们也可以学会怎么拆分一个三位数。
考题5 单选题
执行(2*3)/(9-3*2)输出的结果是什么?( )
A. 1 B. 2.0 C. 2 D. 1.0
答案:B
考题6 单选题
在Python中,a=2,b="3.5",如果想进行2+3.5的加法运算,我们应该如何编写代码?
A. a+b B. str(a)+b C. a+ int(b) D. a+eval(b)
答案:D
考题7 单选题
print(1024//10**2)的结果是?( )
A. 100 B. 24 C. 10 D. 10.24
答案:C
考题8 单选题
下列代码的执行结果是?( )
a=2
b=3
a=5
print (a**b-b/2*10)
A. 110.0 B. 110 C. 49.0 D. 49
答案:A
*考题9 判断题
在Python中输入80/4//3,计算结果为6.0。
答案:正确
*考题10 判断题
语句: b=3 c=a+b print(c) 的显示结果是3。
答案:错误
解析:变量a未定义
赋值运算符
知识点详解
在数学运算中,赋值运算只有一种,就是等于(=);但是在Python中, 却有很多种赋值运算,如表3-2所示。
表3-2赋值运算符
运算符 | 描述 | 举例 | 作用 |
---|---|---|---|
= | 最常见的数学赋值运算 | a = 5 | 把5赋值给a |
+= | 加法赋值运算符 | a += b | 相当于a = a+b |
-= | 减法赋值运算符 | a -= b | 相当于a = a-b |
*= | 乘法赋值运算符 | a *= b | 相当于a = a*b |
/= | 除法赋值运算符 | a /= b | 相当于a = a/b |
%= | 取模赋值运算符 | a %= b | 相当于a = a%b |
**= | 幂赋值运算符 | a **=b | a = a**b |
//= | 取整除赋值运算符 | a //= b | 相当于a = a//b |
除了等号(=)运算符,剩余的运算符都是相应算术运算符的简写。
易错点
除了用等号赋值之外,其余的赋值方式在数学中是没有的,所以除了等号外都是易错点。
模拟考题
考题1 单选题
已知变量a=2, b=3,执行语句a%=a+b后,变量a的值为()。
A. 0 B. 2 C. 3 D. 12
答案:B
解析:该题主要的考核点就是取模赋值,根据取模赋值的公式,a%=b相当 于a = a%b,可以将考题中的语句a% = a+b中的a+b作为一个整体参与取模赋值,所以原算式可以等价于a = a%(a+b),根据题目给的变量值,可以代入数值a = 2%(2+3),结果为2,所以答案为B。
考题2 单选题
已知变量a=5, b=6,执行语句a*=a+b后,变量a的值为( )。
A. 11 B. 30 C. 31 D. 55
答案:D
解析:根据*=运算符的运算规则,a*=a+b可以转换为a = a*(a+b),将a、 b的值代入算式,可得到a = 5*(5+6),结果为55,所以正确答案是D。
考题3 单选题
已知a = 5,a *= 2,那么print(a)的结果为?()
A. 5 B. 2 C. 10 D. 20
答案:C
解析:x =2 执行过程其实是x = x 2所以最终的到结果为10,故选择C选项。
考题4 判断题
a=10,b=20,a==b;运行结果是a=20。
答案:错误
考题5 判断题
语句m+=n的意义是m=m+n。
答案:正确
比较运算符
知识点详解
比较运算符又称为关系运算符,其最大的特点就是返回值只有两种:True 或者False。
比较运算用于对常量、变量或表达式的结果进行大小比较,如果这种比较是成立的,则返回True(真),反之则返回False(假)。
Python中常用的比较运算符如表3-3所示。
表3-3比较运算符
比较运算符 | 名称 | 说明 |
---|---|---|
> | 大于 | 如果 > 前面的值大于后面的值,则返回True,否则返回False |
< | 小于 | 如果 < 前面的值小于后面的值,则返回True,否则返回False |
== | 等于 | 如果==两边的值相等,则返回True,否则返回False |
>= | 大于等于 | 等价于数学中的≥,如果 >=前面值大于或者等于后面的值,则返回True,否则返回False |
<= | 小于等于 | 等价于数学中的≤,如果<=前面的值小于或者等于后面的值,则返回True,否则返回False |
!= | 不等于 | 等价于数学中的≠,如果!=两边的值不相等,则返回True,否则返回False |
is | 是 | 判断两个变量所引用的对象是否相同,如果相同则返回True,否则返回False |
is not | 不是 | 判断两个变量所引用的对象是否不相同,如果不相同则返回True,否则返回False |
易错点
==和=
在编程中,经常会出现将==误写成=的情况,因为我们习惯将口头上的"等于”写成=,但是我们口头上的“等于”可能有两种意思:一种是将一个值赋值给另外一个变量,这时候,使用 = ;而有时候我们所说的“等于”表示的是比较两个对象是否相等,这时候要使用==,如下所示。
>>>a = 5 #把5赋值给a,退回值是5
>>>a == 5 #看a是否和5相等,返回值只有True或者False
==和is的区别
初学Python,大家可能对is比较陌生,很多人会误将它和==的功能混为一谈,但其实is与==有本质上的区别,完全不是一码事儿;==用来比较两个变量的值是否相等,而is则用来比对两个变量引用的是否是同一个对象,如下所示。
>>>a = [5,2]
>>>b = [5,2]
>>>print (a==b)
True
>>>print(a is b)
False
通过上面的案例我们可以看出,a和b的值虽然是相等的,但是,a并不是b。
模拟考题
考题1 单选题
执行语句print(10==10.0),结果为()。
A. 10 B. 10.0 C. True D. False
答案:C
解析:本题的考核点主要在于=和==的区别,=是赋值运算符,而==是比较运算符,10和10.0是相等的,所以返回值是True。
考题2 单选题
下列代码的运行结果是()。
a=0
b=False
print(a==b)
A. 0 B. False C. True D. error
答案:C
解析:本题有两个考点,一个是对比较运算符==的理解和应用,还有一 个就是对False和0的关系的考核。在Python中,0和空都是False,所以, False是和0相等的,本题的答案是C。
考题3 单选题
下列表达式的值为True的是?( )
A. 'a'>'b' B. 2>3 C. 'A'>'a' D. '3'>'2'
答案:D
考题4 单选题
Python中的==代表的是?( )
A. 把左边的值赋值给右边; B. 把右边的值赋值给左边;
C. 比较左右两边是否相等; D. 左右两边值进行交换;
答案:C
考题5 单选题
关于比较运算符说法正确的是?( ) ①!=表示为不等于,如果两个操作数不相等,则为False ②<=表示为小于等于,如果左边的数小于或等于右边的数,则为True ③若a=2,b=5则a!=b为True
A. ①② B. ②③ C. ①③ D. ①②③
答案:B
考题6 单选题
下面的程序:
a='7'
print(a==7)
输出的结果是?( )
A. True B. 7 C. “7” D. False
答案:D
考题7 单选题
执行语句flag="3456">"36",变量flag的值?
A. "3456" B. "36" C. True D. False
答案:D
逻辑运算符
知识点讲解
Python中的逻辑运算符只有3个:and、or和not,如表3-4所示。
表3-4逻辑运算符
逻辑运算符 | 名称 | 描述 |
---|---|---|
and | 与 | 逻辑与运算,等价于数学中的“且” |
or | 或 | 逻辑或运算,等价于数学中的“或” |
not | 非 | 逻辑非运算,等价于数学中的“非” |
Python中的逻辑操作符and和or,也叫惰性求值,就是从左至右解析。由于它们是惰性的,只要确定了值,就不往后解析代码。
逻辑or运算,是True惰性求值:只要第一个值是True或非0,整条指令为True或非0,后面就不再做运算;反之,如果第一个是False,后面不管是 True还是False,都是返回后面的值。
逻辑and运算,是False惰性求值:只要第一个值是False,结果就是 False,后面的就不需要运算了,无论后面是True还是False;反之,如果第一个值是True,直接返回后面的值。
逻辑not运算,是将之前的值进行翻转,之前的值是True,运算后变成 False;之前的值是False,运算后变为True。
总结:
- and找False
- or找True
易错点
and运算是False惰性求值,所以只要前面的值是False,则不需要看后面的值。
or运算是True惰性求值,所以只要前面的值是True或者非0,则不需要看后面的值。
在Python中,True不仅仅是1,只要是非0及非空的对象都被认为是True,所以and、or的返回值不一定只有True和False,如下所示。
>>>print(123 or 22 )
123
>>>print(20 and "abc")
abc
模拟考题
考题1 单选题
假设a=20, b=3,那么a or b的结果是()。
A. 20 B. False C. True D. 3
答案:A
解析:根据Python的or运算的规则,如果or前面的值为True,则整个 运算的值为前面的值,否则为后面的值;20是非0的,所以为True,返回值自然是20。这里最容易搞错的是以为返回值是True, Python的逻辑运算or和 and返回的值,只有前或者后运算中的结果确实是True时才返回True。
考题2 单选题
已知x=5, y=6,则表达式not(x!=y)的值为( )。
A. True B. False C. 5 D. 6
答案:B
解析:根据题目信息,我们可以将not(x!=y)修改为not(5!=6),5确实不 等于6,所以5!=6返回的值为True,但是由于前面加了not进行翻转,所以 not(5!=6)的结果为False,应选择B。
考题3 单选题
假设a=2,b=1,c = a and b - 1,那么c的值是()
A. 3 B. 1 C. 2 D. 0
答案:D
解析:先算a and b - 1 相当于 a and 0,结果为0,然后c=0,把0赋值给c,结果选D
考题4 单选题
下列代码运行的结果是?( )
a=0
b=False
print(a==b)
A. 0 B. False C. True D. error
答案:C
解析:0可以看出False,非零的数字可以看出True
考题5 单选题
运行以下代码,print(2021<=2020 or 2022>2018) 输出的结果是?( )
A. Flase B. True C. 2021<=2020 or 2022>2018 D. 2022>2018
答案:B
解析:2021<=2020为False,2022>2018为True,或运算,只要有一个为True,结果就为True,所以选择B。
考题6 单选题
下列运算中,运算结果为True的是?( )
A. 2>3 and 3>2 B. 4!=0 and 3+2>=5 C. 3**2<8 20="" or="" 3+2<5="" d.="" not="">=208>
答案:B
考题7 判断题
程序a=12 and b=12是错误的写法。
答案:正确
考题8 判断题
print(int(8>7) or int(8<6))的输出结果为1。
答案:正确
解析:int(8>7) ---》int(True)--->1,int(8<6))---》int(False)----》0,1 or 0 结果为1.
运算符的优先级
知识点详解
所谓优先级,就是当多个运算符同时出现在一个表达式中时,先执行哪个运算符。
我们已经学过的Python运算符的优先级如表3-5所示。
表3-5 Python运算符的优先级
运算符说明 | python运算符 | 优先级 | 优先级顺序 |
---|---|---|---|
小括号 | () | 8 | 高 |
乘方(幂运算) | ** | 7 | |
乘除 | *、/、//、% | 6 | |
加减 | +、- | 5 | |
比较运算符 | ==、!=、>、 >=、<、<= | 4 | |
逻辑非 | not | 3 | |
逻辑与 | and | 2 | |
逻辑或 | or | 1 | 低 |
总结:
() > 算术运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符
易错点
运算符除了要考虑优先级之外,还需要考虑运算符的结合性,所谓结合性,就是当一个表达式中出现多个优先级相同的运算符时,先执行哪个运算符:先执行左边的叫左结合性,先执行右边的叫右结合性。比如1000/ 25 16,由于乘除是同一级别运算符,那是先算哪一个呢?根据四则混合运算的原则,我们学习过的运算符多数属于左结合性(即先算左边的),只有幂(* )、逻辑非(not) 是右结合性。
Python逻辑运算返回为True时,值不一定是True或者1,而可以是表达式的值,这一点与其他编程语言有很大的区别,我们一定要注意。
模拟考题
考题1 单选题
在下面的运算符中,按照运算优先级,哪一个是最高级?()
A. * B. C. + D. //
答案:A
解析:本题主要考核运算符的优先级,题目中比较幂(* )、乘(\ )、加(+ )、整除(// )这4个运算符的优先级,显然,优先级最高的是幕运算,其次是乘和整除,最低的是加,因而答案是A。
考题2 单选题
假设 a=2, b=1, c = a and b - 1,那么 c 的值是()。
A. 3 B. 1 C. 2 D. 0
答案:D
解析:首先,由于本题涉及多个运算符的运算,所以先要看这些运算符的优先级,题目中涉及=、and、- 这3种运算符,由于=是赋值运算符,并非是比较运算符==,所以只剩下and和 - 两种运算符,根据规则, - 运算符的优先级要高于and,所以先算原算式可以改为c = 2 and (1-1),即c = 2 and 0; 根据and的运算规则,我们可以得出c = 0,所以选择D。
考题3 单选题
print(23 > 42 or 121>12 and 7 % 3 == 4 %3)的结果是()。
A. False B. True C. 3 D. 4
答案:B
解析:这是一个典型的运算符优先级的考题,由于整个计算里涉及的运算符比较多,我们根据优先级进行分步计算。根据规则,题目中的*(乘)和%(取模) 属于该式中的最高级运算符优先进行计算,这样我们可以将原式改为6 > 8 or 121 > 12 and 1 == 1;接下来,比较运算符是最高级的,需要先进行计算,则原式可以改为(6 > 8) or (121 > 12) and (1 == 1),经过计算,算式又进一步演变为 False or True and True;接下来,or和and运算,and的优先级高,先进行计算,原式可以改为False or (True and True),即False or True;根据or的运算规则,前面的为False,则结果是or后面的值,所以答案是True,选择B。
综合练习
考题1 编程题
要求:
(1) 程序开始运行后,输入一个三位数整数;
(2) 程序会根据输入的整数输出百位、十位和个位上的数。 例如,输入123,
输出为:“百:1,十:2,个:3”。
参考程序:
x=int(input('输入一个三位数整数:'))
a=x//100
c=x%10
b=(x-a*100)//10
print("百:",a,"十:",b,"个:",c)
考题2 编程题
计算题:时间转换
输入一个总秒数,计算是几小时几分钟几秒,并一行输出。
要求:
a)输入一行,一个整数,表示总秒数;
b)输出一行,三个整数,表示小时、分钟、秒,每两个数之间用一个空格隔开。
输入样例:
7201
输出样例:
2 0 1
参考程序:
n = int(input('请输入一个总秒数:'))
m = n % 60
f = n // 60 % 60
s = n // 3600
print(s, f, m)
总结
算术运算符
+、-、、/ // % *
>>> 8/2
4.0
>>> 7//2
3
>>> 7%2
1
>>> 2**3
8
注意:
- 有除法的运算结果一般都是小数,有小数参与的运算结果一般都是小数
- () > * > / // % > + -
赋值运算符
=
+= :a+=b -------》 a=a+b
-= :a-=b -------》 a=a-b
= :a\=b -------》 a=a*b
/= :a/=b -------》 a=a/b
%= :a%=b -------》 a=a%b
//= :a//=b -------》 a=a//b
*= :a\*=b -------》 a=a**b
比较运算符
==、!= 、>、>=、<、<=
逻辑运算符
and:找False,找到就返回,找不到结果就是True
>>> 1 and 0 0 >>> 4 and 5 5
or:找Ture,找到就返回,找不到结果就是False
>>> 0 or 8 8 >>> 9 or 6 9
not:取反
注意:
- 优先级 not > and > or
优先级
() > 算术运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符