Python 入门手札:从 0 到会--第四天Python的基础--运算符&&表达式&&推导式
目录
一、运算符
运算符用于执行某种操作并返回一个结果,Python中的运算符可以分为:
1 .算术运算符
用于执行基本的数学运算
1.1 常见运算符
+:加法
-:减法
*:乘法
/:除法
%:取模(取余数)
**:幂运算
//:整除(取整数部分)
1.2 课后练习
-
课后练习1
超市的西瓜 13 元一个, 问 你拿100 元可以买几个西瓜,剩余 几元参考答案
print('可以买', 100 // 13 , '个西瓜,剩余', 100 % 13, '元') -
课后练习2
现在是 18:02:31 秒 请问现在距离 凌晨 0:0:0 过了多少秒? 写程序打印出来参考答案
second = 18 * 60 * 60 + 2 * 60 + 31 print('距离凌晨 0:0:0 过了', second, '秒') -
课后练习3
已知从凌晨 0:0:0 到现在已经过了 63320 秒, 请问现在是 几时几分几秒?用地板除法和求余数实现
参考答案
s = 63320 hour = s // 60 // 60 minute = s % 3600 // 60 second = s % 60 print('现在是:', hour, ':', minute, ':', second)
2.比较运算符
用于比较两个值并返回布尔值 True 或 False
==:等于
!=:不等于
<:小于
>:大于
<=:小于等于
>=:大于等于
3. 逻辑运算符
用于连接布尔值并返回布尔值
3.1 运算符
and:与(逻辑与) 既要又要
or:或(逻辑或) 只要
not:非(逻辑非)不要
3.2 运算规则
-
and 与运算:两者同时为真,结果才为真
-
语法
x and y # x, y代表表达式 -
示例
3 + 4 > 5 and 6 + 7 > 100 False -
真值表
x的值 y的值 x and y的值 True True True True False False False True False False False False 优先返回假值对象, 如果x 为假值,返回x, 否则返回y
-
-
or 或运算:只要有一个为真,结果就为真
-
语法
x or y # x, y代表表达式 -
真值表
x的值 y的值 x or y的值 True True True True False True False True True False False False 优先返回真值对象, 如果x 为真值,返回x, 否则返回y
-
-
not 非运算:将表达式的结果取 非 操作
not 运算符是一元运算符
-
语法
not 表达式 -
示例
not True # False not False # True not 3.14 # False not '' # True not 1 + 2 # False
-
3.3 课后练习
写一个程序,输入一个整数, 判断这个整数是奇数还是偶数
奇数: 1 3 5 7 9
偶数: 2 4 6 8 10
x % 2 == 1 结果为True,x 一定是奇数
x % 2 == 1 结果为False,x 一定是偶数
答案:

4. 赋值运算符
用于给变量赋值
=:赋值
+=:加法赋值
-=:减法赋值
*=:乘法赋值
/=:除法赋值
%=:取模赋值
**=:幂运算赋值
//=:整除赋值
:=: 海象运算符,允许在表达式内部进行变量赋值并返回该值while (n := len(input("请输入内容: "))) > 5: print(f"你输入了 {n} 个字符,太长了!")注意:
没有 a++、 a-- 这种自增自减运算符;
5. 位运算符
用于对整数按位进行操作
5.1 常见运算符
&:按位与
|:按位或
^:按位异或
~:按位取反
<<:左移位
>>:右移位
5.2 运算规则
-
按位与(&)
-
表达式:
a & b -
功能:对于每一位,如果a和b的相应位都是1,则结果位为1,否则为0。
# 示例:计算两个二进制数的按位与 a = 0b1011 # 二进制表示的11 b = 0b1101 # 二进制表示的13 result_and = a & b # 计算两者之间的按位与 print(bin(result_and)) # 输出:0b1001 (十进制为9)
-
-
按位或(|)
-
表达式:
a | b -
功能:对于每一位,只要a和b中至少有一位是1,则结果位为1,否则为0。
# 示例:计算两个二进制数的按位或 a = 0b1011 b = 0b1101 result_or = a | b # 计算两者之间的按位或 print(bin(result_or)) # 输出:0b1111 (十进制为15)
-
-
按位异或(^)
-
表达式:
a ^ b -
功能:对于每一位,如果a和b的相应位不同(一个为1,另一个为0),则结果位为1,否则为0。
# 示例:计算两个二进制数的按位异或 a = 0b1011 b = 0b1101 result_xor = a ^ b # 计算两者之间的按位异或 print(bin(result_xor)) # 输出:0b110 (十进制为6)
-
-
按位取反(~):
-
表达式:
~a -
功能:对操作数a的每一个二进制位进行取反,即将1变为0,0变为1。
# 示例:计算一个二进制数的按位取反 a = 0b1011 result_not = ~a # 计算a的按位取反 print(bin(result_not)) # 输出:-0b1100
-
-
左移运算符(<<):
# 示例:将一个二进制数向左移动两位 a = 0b1011 result_left_shift = a << 2 # 将a向左移动两位 print(bin(result_left_shift)) # 输出:0b101100 (十进制为44)-
表达式:
a << b -
功能:
-
- 将a的二进制表示向左移动b位
- 对于无符号整数,左边移出的部分会被丢弃,右边空出的位置补零(通常补0);
- 对于有符号整数,左移时取决于具体实现,可能是算术左移(符号位扩展)或者逻辑左移(补0)。
- 相当于除以a*2^b
-
右移运算符(>>):
-
表达式:
a >> b -
功能:
# 示例:将一个有符号二进制数向右移动一位 a = -0b1000 # 十进制为-8 result_right_shift = a >> 1 # 将a向右移动一位 print(bin(result_right_shift)) # 输出:-0b100 (十进制为-4) # 对于无符号数的例子 unsigned_a = 0b1000 unsigned_result_right_shift = unsigned_a >> 1 print(bin(unsigned_result_right_shift)) # 输出:0b100 (十进制为4)
-
- 将a的二进制表示向右移动b位
- 对于无符号整数,右边移出的部分会被丢弃,左边空出的位置补零(通常补0);
- 对于有符号整数,右移时取决于具体实现,可能是算术右移(符号位扩展)或者逻辑右移(补0)。
- 同理,相当于a%2^n
6. 身份运算符
用于比较对象的内存地址(即身份)
is:判断对象是否相同
is not:判断对象是否不同
基础类型:值和类型都相同时,存在一个内存空间里面
a = 1
b = 1
print(a == b) #True, 比较的是值
print(a is b) #True, 比较的是内存地址,同一个值放在一个内存里面
基础类型:类型不同时就需要存放在两个内存空间里
a=1
b=1.0
a == b #True,值是相等的
a is b #False,需要放在两个内存空间里面,分别表示int和float
引用类型:有序列表
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) #True, 比较的是值
print(a is b) #False,比较的是内存地址
更多1:有序的列表list
a = [1, 2, 3]
b = [1, 3, 2]
print(a == b) #False,比较的是值,列表是有序的,值不同
print(a is b) #False,比较的是地址
更多2:无序的集合Set
a = {1, 2, 3}
b = {1, 3, 2}
print(a == b) #True,比较的是值,Set是无序的,所以值相同
print(a is b) #False,比较的是地址
更多3:无序的字典Dict
a = {'name': '张三', 'age': 10}
b = {'age': 10, 'name': '张三'}
print(a == b) #True,比较的是值,字典是无序的,所以值相同
print(a is b) #False,比较的是地址
7. 成员运算符(关系运算符)
用于检查一个值是否是某个集合的成员
-
in:判断值是否存在于序列中 -
not in:判断值是否不存在于序列中eg: 5 in [2, 34, 5, 67]
8. 三目运算符
条件运算符、三元运算符
max = a if a>b else b #如果 a>b 成立,就把 a 作为整个表达式的值,并赋给变量 max; #如果 a> b 不成立,就把 b 作为整个表达式的值,并赋给变量 max。
一个有意思的例子:
b = 3 + 1, "3 > 2",print('AAA') if 1 > 2 else print("BBB"),2 + 2
print (b)
打印结果如下:
BBB
(4, '3 > 2', None, 4)
解释一下为什么?
#1. b 是一个元组(tuple)
Python 中,逗号分隔的值会自动组成元组,所以 b 实际上是一个包含 4 个元素的元组:
b = (4, "3 > 2", print("BBB"), 4)
因为 3 + 1 = 4,2 + 2 = 4,而 "3 > 2" 是一个字符串。
#2. 条件表达式 print('AAA') if 1 > 2 else print("BBB")
1 > 2 是 False,所以执行 else 分支,即 print("BBB")。
print("BBB") 会先执行,并在屏幕上输出 BBB。
print() 函数的返回值是 None,所以这个条件表达式最终的值是 None。
#3. 最终 b 的值
b 的 4 个元素分别是:
3 + 1 → 4
"3 > 2" → 字符串 "3 > 2"
print('AAA') if 1 > 2 else print("BBB") → 先打印 BBB,然后返回 None
2 + 2 → 4
所以 b = (4, "3 > 2", None, 4)
#4. print(b) 的输出
最终 print(b) 会打印元组:
python
(4, '3 > 2', None, 4)
9. 优先级

更多的时候,我们借助()来明确优先级问题。
二、表达式
表达式(expression)是由一个或多个操作数和运算符组成的。简单来说,表达式可以是任何会产生一个值的代码片段。
2.1 算术表达式
涉及数学运算的表达式。例如:
a = 5
b = 3
result = a + b # 加法
result = a / b # 除法
result = a // b # 地板除
result = a % b # 取余
result = a ** b # 幂运算
2.2 比较表达式
用于比较两个值,通常返回布尔值 True 或 False。
a = 5
b = 3
result = a > b # 大于
result = a <= b # 小于等于
2.3 逻辑表达式
用于连接布尔值,返回布尔值 True 或 False。
a = True
b = False
result = a and b # 逻辑与
result = a or b # 逻辑或
result = not a # 逻辑非
2.4 赋值表达式
将一个值赋给一个变量,通常用 = 运算符。
a = 5 # 赋值表达式
b = a + 3 # 计算并赋值
Python 3.8+ 引入了 海象运算符(:=),这是一种新的赋值表达式,允许在表达式中直接给变量赋值:
if (n := len(data)) > 10: # 给n赋值并使用
print(f"列表长度大于10,长度为{n}")
2.5 成员表达式
用于检查一个值是否在序列、集合或字典中。
a = [1, 2, 3]
result = 2 in a # 检查2是否在列表a中
result = 4 not in a # 检查4是否不在列表a中
2.6 身份表达式
用于比较两个对象的身份(即是否是同一个对象),返回布尔值。
a = [1, 2]
b = a
result = a is b # 判断a和b是否是同一个对象
result = a is not b # 判断a和b是否不是同一个对象
2.7 三元表达式
简化的 if-else 表达式,根据条件选择两个值之一。
a = 5
b = 3
result = a if a > b else b # 如果a > b,result为a,否则为b
2.8 函数调用表达式
调用函数并返回结果。
def add(x, y):
return x + y
result = add(5, 3) # 函数调用表达式
2.9 推导式(重点)
用更简洁的方式创建列表、字典和集合。是 Python 特有的一种表达式形式。
2.9.1 列表推导式
a = [1, 2, 3, 4]
result = [x * 2 for x in a] # 创建一个新列表,元素是原列表每个元素的两倍
2.9.2 字典推导式
a = ['a', 'b', 'c']
result = {x: ord(x) for x in a} # 创建一个字典,将字母映射到对应的ASCII值
2.9.3 集合推导式
a = [1, 2, 3, 4]
result = {x * 2 for x in a} # 创建一个集合,元素是原列表每个元素的两倍
2.9.4 课后练习
生成1—10之间的数字,将其平方存入list01中。 将list01中所有偶数存入list02中。 将list01中所有大于5的奇数增加1后存入list03中。 要求都用列表推导式
答案:

# 生成1-10的数字,平方存入list01
list01 = [x ** 2 for x in range(1, 11)]
# 从list01中筛选偶数存入list02
list02 = [x for x in list01 if x % 2 == 0]
# 从list01中筛选大于5的奇数,并加1后存入list03
list03 = [x + 1 for x in list01 if x % 2 == 1 and x > 5]
# 打印结果
print("list01:", list01)
print("list02:", list02)
print("list03:", list03)
#输出结果
list01: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
list02: [4, 16, 36, 64, 100]
list03: [10, 50, 82]
2.10 Lambda表达式
匿名函数的简化表达式,用于创建小型、一次性的函数。
f = lambda x, y: x + y # 创建一个匿名函数
result = f(2, 3) # 调用匿名函数
2.11 生成器表达式
类似于列表推导式,但是返回的是一个生成器对象,而不是一个完整的列表。
a = [1, 2, 3, 4]
result = (x * 2 for x in a) # 创建一个生成器,元素是原列表每个元素的两倍
2.12 调用运算符()
在 Python 中,圆括号也可以用来创建表达式,通常用于控制运算顺序或者在函数调用时传递参数。
result = (5 + 3) * 2 # 使用括号改变运算顺序
2.13 表达式的求值顺序
Python 中的表达式按照运算符优先级规则求值。运算符优先级的规则决定了不同类型的运算在计算时的顺序。
小编有感,写在最后:今日份的知识都是后面学习中特别基础的内容,几乎每次都会用到,多练练手自然就熟悉了,大家可以再找一些练习题巩固~
更多推荐
所有评论(0)