首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python自学02 - Python语言中的运算符

Python自学02 - Python语言中的运算符

原创
作者头像
星哥玩云
发布2025-05-13 22:36:44
发布2025-05-13 22:36:44
2750
举报
文章被收录于专栏:python自学成菜python自学成菜

Python自学02 - Python语言中的运算符

大家好,我是星哥,今天还是来自学Python。

在Python的编程世界里,运算符就像是一把把神奇的钥匙,为我们打开解决各种问题的大门。Python支持丰富多样的运算符,接下来,我们将按照运算符优先级从高到低的顺序,逐一揭开它们的神秘面纱。有了变量和运算符,我们就如同拥有了神奇的魔法棒,可以构造出各种各样的表达式,轻松应对实际编程中的挑战。

在计算机科学的领域中,表达式是计算机程序里的句法实体,它由一个或多个常量、变量、函数以及运算符巧妙组合而成。编程语言就像一位聪明的翻译官,能够对表达式进行解释和计算,最终得到另一个有价值的值。即使一开始对这句话不太理解也没关系,重要的是要明白,无论使用哪种编程语言,构造表达式都是编程过程中至关重要的一环。

运算符

描述

[]、[:]

索引、切片

**

~、+、-

按位取反、正号、负号

*、/、%、//

乘、除、模、整除

+、-

加、减

>>、<<

右移、左移

&

按位与

^、|

按位异或、按位或

<=、<、>、>=

小于等于、小于、大于、大于等于

==、!=

等于、不等于

is、is not

身份运算符

in、not in

成员运算符

not、or、and

逻辑运算符

=、+=、-=、*=、/=、%=、//=、**=、&=、|=、^=、>>=、<<=

赋值运算符

说明:所谓优先级,就如同一场比赛的规则,在一个运算表达式中,如果出现多个运算符,它规定了应该先执行哪个运算,后执行哪个运算。在编写代码时,如果对表达式中运算符的优先级不太确定,可以巧妙地使用圆括号(小括号)来明确运算的执行顺序,就像给运算加上了一个清晰的导航标。

算术运算符的奇妙世界

Python中的算术运算符犹如一个丰富多彩的工具箱,除了我们最为熟悉的加、减、乘、除运算外,还有整除运算符、求模(求余数)运算符和求幂运算符等特殊工具。下面的示例将带领我们一起领略算术运算符的强大功能。

代码语言:javascript
复制
"""
算术运算符
​
Version: 1.0
Author: 骆昊
"""
print(321 + 12)     # 加法运算,输出333
print(321 - 12)     # 减法运算,输出309
print(321 * 12)     # 乘法运算,输出3852
print(321 / 12)     # 除法运算,输出26.75
print(321 // 12)    # 整除运算,输出26
print(321 % 12)     # 求模运算,输出9
print(321 ** 12)    # 求幂运算,输出1196906950228928915420617322241

在算术运算的规则中,就像我们在数学课本中学到的一样,需要先进行乘除运算,再进行加减运算,这意味着乘除法的运算优先级高于加减法。而求幂运算则更为特殊,它的优先级高于乘除法。如果我们想要改变算术运算的执行顺序,可以借助英文输入法状态下的圆括号(小括号),将需要优先执行的表达式放在圆括号中,就像给它穿上了一层特殊的保护衣。下面的示例将为我们展示具体的应用。

代码语言:javascript
复制
"""
算术运算的优先级
​
Version: 1.0
Author: 骆昊
"""
print(2 + 3 * 5)           # 17
print((2 + 3) * 5)         # 25
print((2 + 3) * 5 ** 2)    # 125
print(((2 + 3) * 5) ** 2)  # 625

赋值运算符的秘密

赋值运算符可以说是编程中最为常见的运算符之一,它就像一位勤劳的搬运工,将右边的值准确无误地赋给左边的变量。赋值运算符还可以与上面介绍的算术运算符相结合,形成复合赋值运算符。例如,a += b 就相当于 a = a + ba *= a + 2 则相当于 a = a * (a + 2)。下面的示例将为我们演示赋值运算符和复合赋值运算符的使用方法。

代码语言:javascript
复制
"""
赋值运算符和复合赋值运算符
​
Version: 1.0
Author: 骆昊
"""
a = 10
b = 3
a += b        # 相当于:a = a + b
a *= a + 2    # 相当于:a = a * (a + 2)
print(a)      # 大家算一下这里会输出什么

需要注意的是,赋值运算构成的表达式本身并不会产生任何值。也就是说,如果我们试图将一个赋值表达式放入 print 函数中输出其值,将会引发语法错误。为了解决这个问题,Python 3.8 引入了一个新的赋值运算符 :=,我们亲切地称它为海象运算符。大家不妨发挥一下想象力,猜猜它为什么会有这样一个有趣的名字。海象运算符同样是将运算符右侧的值赋值给左边的变量,但与普通赋值运算符不同的是,运算符右侧的值同时也是整个表达式的值。下面的代码将帮助我们更好地理解这一点。

代码语言:javascript
复制
"""
海象运算符
​
Version: 1.0
Author: 骆昊
"""
# SyntaxError: invalid syntax
# print((a = 10))
# 海象运算符
print((a := 10))  # 10
print(a)          # 10

提示:上面第 8 行代码如果不注释掉,运行代码时会看到 SyntaxError: invalid syntax 错误信息。需要注意的是,这行代码中我们给 a = 10 加上了圆括号,如果不小心写成了 print(a = 10),会看到 TypeError: 'a' is an invalid keyword argument for print() 错误信息。当我们后面学习函数时,就会明白这个错误提示的具体含义了。

比较运算符和逻辑运算符的智慧

比较运算符,也被称为关系运算符,包括 ==!=<><=>=。相信大家一看就能明白它们的含义。需要特别提醒的是,比较相等时我们使用的是 ==,这里是两个等号,因为 = 是赋值运算符,我们在前面刚刚详细介绍过。比较不相等时使用的是 !=,这与数学课本中使用的 $small{ eq}$ 有所不同。在 Python 2 中,曾经使用过 <> 来表示不等于,但在 Python 3 中,使用 <> 会引发 SyntaxError(语法错误)。比较运算符就像一位公正的裁判,会产生布尔值,结果要么是 True,要么是 False

逻辑运算符有三个,分别是 andornotand 的字面意思是“而且”,它就像一个严格的把关者,会连接两个布尔值或者产生布尔值的表达式。只有当两边的布尔值都是 True 时,运算的结果才是 True;只要左右两边的布尔值有一个是 False,最终的运算结果就是 False。当然,如果 and 运算符左边的布尔值是 False,不管右边的布尔值是什么,最终的结果都是 False,这时运算符右边的布尔值会被跳过(专业的说法叫短路处理,如果 and 右边是一个表达式,那么这个表达式不会执行)。or 的字面意思是“或者”,它就像一个灵活的选择器,也会连接两个布尔值或产生布尔值的表达式。只要两边的布尔值有任意一个是 True,那么最终的结果就是 True。同样,or 运算符也有短路功能,当它左边的布尔值为 True 时,右边的布尔值会被短路(如果 or 右边是一个表达式,那么这个表达式不会执行)。not 运算符就像一个反转大师,它的后面可以跟一个布尔值。如果 not 后面的布尔值或表达式是 True,那么运算的结果就是 False;如果 not 后面的布尔值或表达式是 False,那么运算的结果就是 True

代码语言:javascript
复制
"""
比较运算符和逻辑运算符的使用
​
Version: 1.0
Author: 骆昊
"""
flag0 = 1 == 1
flag1 = 3 > 2
flag2 = 2 < 1
flag3 = flag1 and flag2
flag4 = flag1 or flag2
flag5 = not flag0
print('flag0 =', flag0)     # flag0 = True
print('flag1 =', flag1)     # flag1 = True
print('flag2 =', flag2)     # flag2 = False
print('flag3 =', flag3)     # flag3 = False
print('flag4 =', flag4)     # flag4 = True
print('flag5 =', flag5)     # flag5 = False
print(flag1 and not flag2)  # True
print(1 > 2 or 2 == 3)      # False

说明:比较运算符的优先级高于赋值运算符,所以在上面的 flag0 = 1 == 1 中,会先进行 1 == 1 的比较,产生布尔值 True,然后再将这个值赋值给变量 flag0print 函数可以输出多个值,多个值之间可以用 , 进行分隔,输出的内容默认以空格分开。

运算符和表达式的实际应用

例子 1:华氏温度转摄氏温度

要求:输入华氏温度,将其转换为摄氏温度。华氏温度到摄氏温度的转换公式为: $small{C = (F - 32) / 1.8}$。

代码语言:javascript
复制
"""
将华氏温度转换为摄氏温度
​
Version: 1.0
Author: 骆昊
"""
f = float(input('请输入华氏温度: '))
c = (f - 32) / 1.8
print('%.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 位有效数字。

代码语言:javascript
复制
"""
将华氏温度转换为摄氏温度
​
Version: 1.1
Author: 骆昊
"""
f = float(input('请输入华氏温度: '))
c = (f - 32) / 1.8
print(f'{f:.1f}华氏度 = {c:.1f}摄氏度')

例子 2:计算圆的周长和面积

要求:输入一个圆的半径($small{r}$),计算出它的周长( $small{2 pi r}$ )和面积( $small{pi r^{2}}$ )。

代码语言:javascript
复制
"""
输入半径计算圆的周长和面积
​
Version: 1.0
Author: 骆昊
"""
radius = float(input('请输入圆的半径: '))
perimeter = 2 * 3.1416 * radius
area = 3.1416 * radius * radius
print('周长: %.2f' % perimeter)
print('面积: %.2f' % area)

Python 中有一个名为 math 的内置模块,该模块中定义了名为 pi 的变量,它的值就是圆周率。如果我们要使用 Python 内置的这个 pi,可以对上面的代码进行一些修改。

代码语言:javascript
复制
"""
输入半径计算圆的周长和面积
​
Version: 1.1
Author: 骆昊
"""
import math
​
radius = float(input('请输入圆的半径: '))
perimeter = 2 * math.pi * radius
area = math.pi * radius ** 2
print(f'周长: {perimeter:.2f}')
print(f'面积: {area:.2f}')

说明:上面代码中的 import math 表示导入 math 模块,导入该模块后,我们才能使用 math.pi 得到圆周率的值。

这里还有一种格式化输出的方式,是 Python 3.8 中新增的特性。大家直接看下面的代码就会明白。

代码语言:javascript
复制
"""
输入半径计算圆的周长和面积
​
Version: 1.2
Author: 骆昊
"""
import math
​
radius = float(input('请输入圆的半径: '))  # 输入: 5.5
perimeter = 2 * math.pi * radius
area = math.pi * radius ** 2
print(f'{perimeter = :.2f}')  # 输出:perimeter = 34.56
print(f'{area = :.2f}')       # 输出:area = 95.03

说明:假如变量 a 的值是 9.87,那么字符串 f'{a = }' 的值是 a = 9.87;而字符串 f'{a = :.1f}' 的值是 a = 9.9。这种格式化输出的方式会同时输出变量名和变量值。

例子 3:判断闰年

要求:输入一个 1582 年以后的年份,判断该年份是否为闰年。

代码语言:javascript
复制
"""
输入年份,闰年输出True,平年输出False
​
Version: 1.0
Author: 骆昊
"""
year = int(input('请输入年份: '))
is_leap = year % 4 == 0 and year % 100 != 0 or year % 400 == 0
print(f'{is_leap = }')

说明:对于格里历(Gregorian calendar),也就是我们今天使用的公历,判断闰年的规则是:1. 公元年份非 4 的倍数是平年;2. 公元年份为 4 的倍数但非 100 的倍数是闰年;3. 公元年份为 400 的倍数是闰年。格里历是由教皇格里高利十三世在 1582 年 10 月引入的,作为对儒略历(Julian calendar)的修改和替代。我们在输入年份时需要注意这一点。上面的代码通过 % 来判断 year 是否为 4 的倍数、100 的倍数、400 的倍数,然后用 andor 运算符将三个条件组合在一起,前两个条件需要同时满足,第三个条件与前两个条件的组合只需满足其中之一。

总结

通过上面的详细讲解和丰富的例子,相信大家已经深刻感受到了运算符和表达式的强大力量。在实际编程中,很多问题都需要通过构造表达式来解决。因此,变量、运算符和表达式对于任何一门编程语言来说,都是极为重要的基础。如果大家对本节课的内容有任何不理解的地方,一定不要急于进入下一课,先在评论区留言讨论,我会及时为大家解答疑问。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python自学02 - Python语言中的运算符
    • 算术运算符的奇妙世界
    • 赋值运算符的秘密
    • 比较运算符和逻辑运算符的智慧
    • 运算符和表达式的实际应用
      • 例子 1:华氏温度转摄氏温度
      • 例子 2:计算圆的周长和面积
      • 例子 3:判断闰年
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档