算术运算符
算术运算符对应我们小学到初中的数学运算,除了常见的加、减、乘、除,Python还额外提供了“整除”“求模”“求幂”三种实用运算符,具体用法看下面的示例:
"""算术运算符Version: 1.0Author: 南阳"""print(321 + 12) # 加法运算,输出333print(321 - 12) # 减法运算,输出309print(321 * 12) # 乘法运算,输出3852print(321 / 12) # 除法运算,输出26.75print(321 // 12) # 整除运算,输出26print(321 % 12) # 求模运算,输出9print(321 ** 12) # 求幂运算,输出1196906950228928915420617322241
① 除法(/)的结果永远是浮点型(哪怕能整除,比如4/2=2.0,而不是2);
② 整除(//)会直接舍弃小数部分,不是四舍五入(比如7//2=3,而不是4;-7//2=-4,因为会向更小的整数靠拢);
③ 求模(%)的结果符号和“除数”一致(比如7%3=1,-7%3=2,7%-3=-2),日常用正数计算时不用关注这点;
④ 求幂(**)支持小数和负数(比如2**0.5是求根号2,结果≈1.414;2**-2是求1/(2²),结果=0.25)。
另外,算术运算符的优先级和数学完全一致:求幂(**)> 乘、除、模、整除(*、/、%、//)> 加、减(+、-)。用括号可以改变运算顺序,示例如下:
"""算术运算的优先级Version: 1.0Author: 南阳"""print(2 + 3 * 5) # 17print((2 + 3) * 5) # 25print((2 + 3) * 5 ** 2) # 125print(((2 + 3) * 5) ** 2) # 625
赋值运算符
赋值运算符的核心作用是“将右边的值(或表达式结果)赋给左边的变量”,最基础的是“=”,我们上一节已经用过了(比如a=10、b=3.14)。除此之外,Python还支持“复合赋值运算符”——把“赋值”和“算术运算”结合起来,简化代码。
常见复合赋值运算符对应关系:
示例演示(重点看注释):
"""赋值运算符和复合赋值运算符Version: 1.0Author: 南阳"""a = 10b = 3a += b # 相当于:a = a + ba *= a + 2# 相当于:a = a * (a + 2)print(a) # 大家算一下这里会输出什么
① 赋值运算符的优先级很低,比算术运算符还低。比如“a *= a + 2”,会先算右边的“a + 2”(算术运算),再算乘法,最后赋值;
② 基础赋值运算符“=”不能用于print函数中。比如“print(a = 10)”会报错——因为赋值表达式本身“不产生值”,print函数需要输出“有具体值的内容”;
③ Python 3.8+ 新增了“海象运算符(:=)”,解决了上面的问题。它的作用是“赋值+返回值”——既把右边的值赋给变量,整个表达式的结果也是这个值,示例如下:
"""海象运算符Version: 1.0Author: 南阳"""# SyntaxError: invalid syntax# print((a = 10))# 海象运算符print((a := 10)) # 10print(a) # 10
提示:上面第 8 行代码如果不注释掉,运行代码会看到SyntaxError: invalid syntax错误信息,注意,这行代码中我们给a = 10加上了圆括号,如果不小心写成了print(a = 10),会看到TypeError: 'a' is an invalid keyword argument for print()错误信息,后面讲到函数的时候,大家就会明白这个错误提示是什么意思了。
比较运算符和逻辑运算符
比较运算符也称为关系运算符,包括==、!=、<、>、<=、>=,我相信大家一看就能懂。需要提醒的是比较相等用的是==,请注意这里是两个等号,因为=是赋值运算符,我们在上面刚刚讲到过。比较不相等用的是!=,跟数学课本中使用的并不相同,Python 2 中曾经使用过<>来表示不等于,在 Python 3 中使用<>会引发SyntaxError(语法错误)。比较运算符会产生布尔值,要么是True,要么是False。
逻辑运算符有三个,分别是and、or和not。and字面意思是“而且”,所以and运算符会连接两个布尔值或者产生布尔值的表达式,如果两边的布尔值都是True,那么运算的结果就是True;左右两边的布尔值有一个是False,最终的运算结果就是False。当然,如果and运算符左边的布尔值是False,不管右边的布尔值是什么,最终的结果都是False,这时运算符右边的布尔值会被跳过(专业的说法叫短路处理,如果and右边是一个表达式,那么这个表达式不会执行)。or字面意思是“或者”,所以or运算符也会连接两个布尔值或产生布尔值的表达式,如果两边的布尔值有任意一个是True,那么最终的结果就是True。当然,or运算符也是有短路功能的,当它左边的布尔值为True的情况下,右边的布尔值会被短路(如果or右边是一个表达式,那么这个表达式不会执行)。not运算符的后面可以跟一个布尔值,如果not后面的布尔值或表达式是True,那么运算的结果就是False;如果not后面的布尔值或表达式是False,那么运算的结果就是True。
"""比较运算符和逻辑运算符的使用Version: 1.0Author: 南阳"""flag0 = 1 == 1flag1 = 3 > 2flag2 = 2 < 1flag3 = flag1 and flag2flag4 = flag1 or flag2flag5 = not flag0print('flag0 =', flag0) # flag0 = Trueprint('flag1 =', flag1) # flag1 = Trueprint('flag2 =', flag2) # flag2 = Falseprint('flag3 =', flag3) # flag3 = Falseprint('flag4 =', flag4) # flag4 = Trueprint('flag5 =', flag5) # flag5 = Falseprint(flag1 andnot flag2) # Trueprint(1 > 2or2 == 3) # False
说明:比较运算符的优先级高于赋值运算符,所以上面的flag0 = 1 == 1先做1 == 1产生布尔值True,再将这个值赋值给变量flag0。print函数可以输出多个值,多个值之间可以用,进行分隔,输出的内容默认以空格分开。
运算符和表达式应用
例子1:华氏温度转摄氏温度
要求:输入华氏温度将其转换为摄氏温度,华氏温度到摄氏温度的转换公式为: 。
"""将华氏温度转换为摄氏温度Version: 1.0Author: 南阳"""f = float(input('请输入华氏温度: '))c = (f - 32) / 1.8print('%.1f华氏度 = %.1f摄氏度' % (f, c))
说明:上面代码中的input函数用于从键盘接收用户输入,由于输入的都是字符串,如果想处理成浮点小数来做后续的运算,可以用我们上一课讲解的类型转换的方法,用float函数将str类型处理成float类型。
上面的代码中,我们对print函数输出的内容进行了格式化处理,print输出的字符串中有两个%.1f占位符,这两个占位符会被%之后的(f, c)中的两个float类型的变量值给替换掉,浮点数小数点后保留1位有效数字。如果字符串中有%d占位符,那么我们会用int类型的值替换掉它,如果字符串中有%s占位符,那么它会被str类型的值替换掉。
除了上面格式化输出的方式外,Python 中还可以用下面的办法来格式化输出,我们给出一个带占位符的字符串,字符串前面的f表示这个字符串是需要格式化处理的,其中的{f:.1f}和{c:.1f}可以先看成是{f}和{c},表示输出时会用变量f和变量c的值替换掉这两个占位符,后面的:.1f表示这是一个浮点数,小数点后保留1位有效数字。
"""将华氏温度转换为摄氏温度Version: 1.1Author: 南阳"""f = float(input('请输入华氏温度: '))c = (f - 32) / 1.8print(f'{f:.1f}华氏度 = {c:.1f}摄氏度')
例子2:计算圆的周长和面积
要求:输入一个圆的半径(),计算出它的周长( )和面积( )。
"""输入半径计算圆的周长和面积Version: 1.0Author: 南阳"""radius = float(input('请输入圆的半径: '))perimeter = 2 * 3.1416 * radiusarea = 3.1416 * radius * radiusprint('周长: %.2f' % perimeter)print('面积: %.2f' % area)
Python 中有一个名为math 的内置模块,该模块中定义了名为pi的变量,它的值就是圆周率。如果要使用 Python 内置的这个pi,我们可以对上面的代码稍作修改。
"""输入半径计算圆的周长和面积Version: 1.1Author: 南阳"""import mathradius = float(input('请输入圆的半径: '))perimeter = 2 * math.pi * radiusarea = math.pi * radius ** 2print(f'周长: {perimeter:.2f}')print(f'面积: {area:.2f}')
说明:上面代码中的import math表示导入math模块,导入该模块以后,才能用math.pi得到圆周率的值。
这里其实还有一种格式化输出的方式,是 Python 3.8 中增加的新特性,大家直接看下面的代码就明白了。
"""输入半径计算圆的周长和面积Version: 1.2Author: 南阳"""import mathradius = float(input('请输入圆的半径: ')) # 输入: 5.5perimeter = 2 * math.pi * radiusarea = math.pi * radius ** 2print(f'{perimeter = :.2f}') # 输出:perimeter = 34.56print(f'{area = :.2f}') # 输出:area = 95.03
说明:假如变量a的值是9.87,那么字符串f'{a = }'的值是a = 9.87;而字符串f'{a = :.1f}'的值是a = 9.9。这种格式化输出的方式会同时输出变量名和变量值。
例子3:判断闰年
要求:输入一个 1582 年以后的年份,判断该年份是不是闰年。
"""输入年份,闰年输出True,平年输出FalseVersion: 1.0Author: 南阳"""year = int(input('请输入年份: '))is_leap = year % 4 == 0and year % 100 != 0or year % 400 == 0print(f'{is_leap = }')
说明:对于格里历(Gregorian calendar),即今天我们使用的公历,判断闰年的规则是:1. 公元年份非 4 的倍数是平年;2. 公元年份为 4 的倍数但非 100 的倍数是闰年;3. 公元年份为 400 的倍数是闰年。格里历是由教皇格里高利十三世在 1582 年 10 月引入的,作为对儒略历(Julian calendar)的修改和替代,我们在输入年份时要注意这一点。上面的代码通过%来判断year是不是4的倍数、100的倍数、400的倍数,然后用and和or运算符将三个条件组装在一起,前两个条件要同时满足,第三个条件跟前两个条件的组合只需满足其中之一。
核心知识点总结
1. 运算符是“操作变量/数据的工具”,不同运算符有不同功能和优先级;搞不清优先级就用括号,稳妥不出错;
2. 核心运算符分类及用途: - 算术运算符(+、-、*、/、//、%、**):做数值计算; - 赋值运算符(=、+=、-=等):给变量赋值,复合赋值可简化代码; - 比较运算符(==、!=、<、>等):比较值的关系,返回布尔值; - 逻辑运算符(not、and、or):组合判断条件,返回布尔值,支持短路处理;
3. 表达式是“变量+运算符”的组合,能计算出一个具体值;实际编程中,很多问题都需要通过构造表达式来解决;
4. 格式化输出常用两种方式:基础版用“%占位符”,简洁版用“f-string”(推荐);Python 3.8+ 还支持{变量名 = }的写法,方便调试。
运算符和表达式是Python编程的“基石”,后续学习条件判断(if-else)、循环(for/while)、函数等内容,都离不开它们。如果有不懂的地方,建议先反复练习上面的案例,再进入下一节学习~