运算符用于执行某种操作并返回一个结果,Python中的运算符可以分为:
用于执行基本的数学运算
+
:加法
-
:减法
*
:乘法
/
:除法
%
:取模(取余数)
**
:幂运算
//
:整除(取整数部分)
# 超市的西瓜 13 元一个, 问 你拿100 元可以买几个西瓜,剩余 几元
print('可以买', 100 // 13 , '个西瓜,剩余', 100 % 13, '元')
# 现在是 18:02:31 秒 请问现在距离 凌晨 0:0:0 过了多少秒?
second = 18 * 60 * 60 + 2 * 60 + 31
print('距离凌晨 0:0:0 过了', second, '秒')
# 已知从凌晨 0:0:0 到现在已经过了 63320 秒, 请问现在是 几时几分几秒?
s = 63320
hour = s // 60 // 60
minute = s % 3600 // 60
second = s % 60
print('现在是:', hour, ':', minute, ':', second)
用于比较两个值并返回布尔值 True 或 False
= =
:等于
! =
:不等于
<
:小于
>
:大于
< =
:小于等于
> =
:大于等于
用于连接布尔值并返回布尔值
and
:与(逻辑与)
or
:或(逻辑或)
not
:非(逻辑非)
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代表表达式
3 + 4 > 5 or 6 + 7 > 100
# True
真值表(有真则真,无真则假)
x的值 | y的值 | x or y的值 |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | False |
not 非运算:将表达式的结果取 非 操作
not 运算符是一元运算符
# not 表达式
not True # False
not False # True
not 3.14 # False
not '' # True
not 1 + 2 # False
# 写一个程序,输入一个整数, 判断这个整数是奇数还是偶数
x % 2 == 1 # 结果为True,x 一定是奇数
x % 2 == 1 # 结果为False,x 一定是偶数
用于给变量赋值
=
:赋值
+=
:加法赋值
-=
:减法赋值
*=
:乘法赋值
/=
:除法赋值
%=
:取模赋值
**=
:幂运算赋值
//=
:整除赋值
注意:
没有 a++、 a-- 这种自增自减运算符;
用于对整数按位进行操作
&
:按位与
|
:按位或
^
:按位异或
~
:按位取反
<<
:左移位
>>
:右移位
按位与(&)
表达式: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 << b
功能:将a的二进制表示向左移动b位,左边移出的部分会被丢弃,右边空出的位置补零。相当于乘以$2^n$次方
# 示例:将一个二进制数向左移动两位
a = 0b1011
result_left_shift = a << 2 # 将a向左移动两位
print(bin(result_left_shift)) # 输出:0b101100 (十进制为44)
右移运算符(>>):
表达式:a >> b
功能:
将a的二进制表示向右移动b位
对于无符号整数,右边移出的部分会被丢弃,左边空出的位置补零(通常补0);
对于有符号整数,右移时取决于具体实现,可能是算术右移(符号位扩展)或者逻辑右移(补0)。
同理,相当于除以2^n
# 示例:将一个有符号二进制数向右移动一位
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)
用于比较对象的内存地址(即身份)
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,比较的是地址
用于检查一个值是否是某个集合的成员
in
:判断值是否存在于序列中
not in
:判断值是否不存在于序列中
5 in [2, 34, 5, 67]
# True
条件运算符、三元运算符
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)
括号 ()
算术运算符:**
> * / // %
> + -
比较运算符:== != > < >= <=
成员运算符:in not in
身份运算符:is is not
逻辑运算符:not
> and
> or
位运算符:~ & | ^ << >>
赋值运算符:= += -= *= /=
等
三目运算符:x if condition else y
我们借助()来明确优先级问题。
x = 10
y = 20
result = (x + 5) * y if x > 5 else x - y
"""
括号内的 x + 5 先计算,结果为 15。
然后计算 x > 5,结果为 True。
最后计算 15 * y,结果为 300。
"""