Python 的基本运算
运算就是用值来做各种变化的游戏,例如 1 + 1 得到 2,其中 + 是加法的运算符。
!class: warning Python 的所有运算符都是英文字符,输入法自动输入中文符号是新手常见的错误,请注意区分。
关于运算符,请参考 Python 官方文档 - 运算符
赋值运算符
Python 使用 = 作为赋值运算符,用于修改变量的值,而非数学中的“等于”。
此外还还可以使用 count += 1 作为 count = count + 1 的简写,其中 + 可以替换为任意算术运算符。
python
count:int = 0 # 创建变量 count,值为 0
print(count)
count = 4 # 将 count 的值修改为 4
print(count)
count += 3 # 将 count 的值修改为 count + 3
print(count)动态类型
Python 中变量创建后可以给他赋值其它类型的的值:
python
age_of_yukari:int = 17 # 类型为 int
age_of_yukari = "17" # 类型为 str但是建议 不要修改变量的类型。
海象运算符
海象运算符(:=)是一种特殊的赋值运算符,它不能直接用于给变量赋值,只能在表达式内赋值。例如:
python
x:int = 0
y:int = 0
sum_squares:int = x**2 + y**2
# 传统做法
x = 5
y = 10
sum_squares = x**2 + y**2
# 使用海象运算符
sum_squares = (x := 5)**2 + (y := 10)**2并且,赋值运算符(=)没有返回值,无法作为 if、while 等控制块的条件,而海象运算符(:=)可以。
!class: warning 使用海象运算符(
:=)需要 Python 版本 $\geq$ 3.8
算术运算符
| 运算符 | 名称 | 示例 | 结果 | 说明 |
|---|---|---|---|---|
+ | 加法运算符 | 3 + 5 | 7 | |
- | 减法运算符 | 5 - 3 | 2 | |
* | 乘法运算符 | 5 * 3 | 15 | |
/ | 除法运算符 | 5 / 2 | 2.5 | 无论能否整除,结果类型都是浮点型 |
// | 整除运算符 | 5 // 2 | 2 | 结果向下取整,如果被除数和除数都是整型,则结果为整型,否则结果为浮点型 |
% | 取余运算符 | 5 % 2 | 1 | 5 除以 2,得 2 余 1 |
** | 乘方运算符 | 5 ** 2 | 25 | 5 的 2 次方 |
比较运算符
用于比较两个值的关系,结果为布尔类型。
| 运算符 | 名称 | 示例 | 结果 |
|---|---|---|---|
== | 等于运算符 | 3 == 5 | False |
!= | 不等于运算符 | 3 != 5 | True |
> | 大于运算符 | 5 > 3 | True |
< | 小于运算符 | 5 < 2 | False |
>= | 大于或等于运算符 | 5 >= 5 | True |
<= | 小于或等于运算符 | 5 <= 2 | False |
逻辑运算符
用于组合多个布尔值。
| 运算符 | 名称 | 示例 | 结果 | 说明 |
|---|---|---|---|---|
| and | 逻辑与运算符 | True and False | False | 全部为 True 时结果为 True,否则结果为 False |
| or | 逻辑或运算符 | True or False | True | 全部为 False 时结果为 False,否则结果为 True |
| not | 逻辑非运算符 | not False | True | 将一个布尔值反转 |
位运算符
位运算用于对整数进行二进制操作。
| 运算符 | 名称 | 示例 | 结果 | 说明 |
|---|---|---|---|---|
& | 位与运算符 | 0b1100 & 0b0110 | 0b0100 | 按二进制位进行计算,两个数在某一位上都是 1,则结果在该位为 1,否则结果在该位为 0 |
| | 位或运算符 | 0b1100 | 0b0110 | 0b1110 | 按二进制位进行计算,两个数在某一位上都是 0,则结果在该位为 0,否则结果在该位为 1 |
^ | 异或运算符 | 0b1100 ^ 0b0110 | 0b1010 | 二进制中不同的位结果为 1,相同的位结果位 0 |
<< | 左移运算符 | 0b0011 << 2 | 0b1100 | 二进制位向左移动,右侧补 0 |
>> | 右移运算符 | 0b1100 >> 1 | 0b0110 | 二进制位向右移动,左侧补 0 |
~ | 取反运算符 | ~0b1100 | 0b0011 | 二进制位取反,即 1 变为 0,0 变为 1 |
优先级
运算符存在优先级,和数学一样先乘除,后加减。例如 $3 + 5 * 2$ 结果为 $13$。
括号为最高优先级,可以使用括号改变计算顺序。例如 $(3 + 5) * 2$ 结果为 $16$。
下表为优先级列表,优先级由高到低:
!class:info 没有必要全部记住,大部分符合直觉,拿不准时请使用括号。 部分运算符目前还没有学习,请暂时放下,将在后面的章节中学习。
参考:Python 官方文档
| 运算符 | 说明 | 优先级 |
|---|---|---|
(exp), [exp], {exp} | 括号表达式 | 最高 |
arr[i], arr[i:j], func(args), obj.attr | 索引,切片,调用,访问 | |
await exp | await 表达式 | |
** | 乘方 | |
+num, -num, ~num | 正号、负号、取反 | |
*, @, /, //, % | 乘除运算 | |
+, - | 加减运算 | |
<<, >> | 移位运算 | |
& | 位与 | |
^ | 异或 | |
| | 位或 | |
in, not in, is, is not, <, <=, >, >=, !=, == | 判断比较 | |
not exp | 逻辑非 | |
and | 逻辑与 | |
or | 逻辑或 | |
if – else | 条件表达式 | |
lambda | lambda 表达式 | |
:= | 赋值 | 最低 |
练习
请实现计算圆形的周长和面积。
圆的周长公式为 $C = 2 \pi r$
圆的面积公式为 $S = \pi r^2$
python
PI:float = 3.1415926 # 圆周率
radius:float = 15 # 半径
perimeter:float = 0 # 修改此处代码,计算周长
area:float = 0 # 修改此处代码,计算面积
print("半径为", radius, "的圆,周长为", perimeter, "面积为", area)