运算符(操作符)
运算符可以对一个值或多个值进行运算或各种操作,例如:
+ - × ÷ 都属于运算符
算数运算符
- + 加法运算符(如果是两个字符串之间进行加法运算,则会进行字符串的拼接操作)
a = 10 + 5
print(a) # 15
b = "hello " + "world"
print(b) # "hello world"
c = "10" + "5"
print(c) # "105"
- - 减法运算符
a = 10 - 5
print(a) # 5
b = 5 - True
print(b) # 4
# c = "hello" - "hel" # 字符串不支持减法操作,所以会报错
- × 乘法运算
a = 2 * 5
print(a) # 10
b = True * False
print(b) # 0
c = "hello " * 5
print(c) # hello hello hello hello hello
- ÷ 除法运算
a = 10 / 2
print(a) # 5.0
b = 8 / 2
print(b, type(b)) # 4.0 <class 'float'>
- **幂运算,求一个值的几次幂
height = 9
print(height ** 3) # 729
- // 整除,只保留计算后的整数位,总会返回一个整型
a = 98
b = 4
print(a // b) # 24
- % 取模,求两个数相除的余数
a = 98
b = 4
print(a % b) # 2
赋值运算符
a = 5
a += 1
a -= 1
a *= 2
a /= 2
a //= 2
a **= 2
a %= 2
比较运算符(关系运算符)
关系运算符用来比较两个值之间的关系,总会返回一个布尔值
如果关系成立,返回True,否则返回False
result = 10 > 20 # False
result = 30 > 20 # True
result = 30 < 20 # False
result = 10 <= 10 # True
result = 30 >= 20 # True
# bool值True = 1
result = 2 < True # False
# int类型无法与str类型进行比较
# result = 2 > '1' # TypeError: '>' not supported between instances of 'int' and 'str'
当出现str 与 str 进行比较时会有不同的逻辑
- 当字符串比较时,实际上比的是字符串的 Unicode 编码
- Unicode 为每种语言中的每个字符设定了统一并且唯一的二进制编码
- 比较两个字符串的Unicode编码时,是逐位比较的
- 利用该特性可以对字符串中的字母进行排序比较,但对于中文来说意义不大
- 注意:如果不希望两个字符串用Unicode编码比较,那么可以将其转化成数字然后再比较
result = '1' > '2' # False
"""
Python 会将 21 中的第一位 2 与 193 中的 第一位 1 进行比较
当第一位比出大小时,后面所有的位数将被忽略
当第一位没有比出大小时,开始比较第二位,若还相等那么接着比,直到不相等。
"""
result = "21" > "193" # True
# a, b, c, d, e, f, j, h, i, g, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z 逐个增大
result = 'a' > 'b' # False
# == 判断两个变量或对象的值是否想等
result = 1 == 1 # True
result = 'hello' == 'hello' # True
# != 判断两个变量或对象值是不是不等于
result = 1 != 1 # False
result = 'hello' != 'hel' # True
print(result)
逻辑运算符
not 可以对符号右侧的值进行 非
运算
- 非运算,对布尔值 会进行取反操作。 True 变成 False False 变成 True。
- 对于非布尔值,会先将其转化成布尔值,然后进行取反。
and 可以对符号两侧的值进行 与
运算
- 只有符号两侧都是True的时候,才会返回True。 只要有一个False 那么就会返回False。与运算就是找False的
- Python中的与都是短路的与,如果第一个值为 False 那么第二个值则不考虑
True and xxx
当 xxx = True 时 True and True = True
当 xxx = False 时 True and False = False
xxx 会影响and运算结果
False and xxx
当 xxx = True 时 False and True = False
当 xxx = False 时 False and False = False
xxx 不会影响and 运算结果
or 可以对符号两侧的值进行 或
运算
- 只有符号两侧都是False的时候,才会返回False。 只要有一个True 那么就会返回True。或运算就是找True的
- Python中的或都是短路的或,如果第一个值为 True 那么第二个值则不考虑
False or xxx
当 xxx = True 时 False or True = True
当 xxx = False 时 False or False = False
xxx 会影响 or 运算结果
True or xxx
当 xxx = True 时 True or True = True
当 xxx = False 时 True or False = True
xxx 不会影响 or 运算结果
条件运算符(三元运算符)
语法:语句1 if 条件表达式 else 语句2
- 对条件表达式进行计算
- 判断结果执行对应语句
- True 执行语句1
- False 执行语句2
# 如果你要喝酒,那么你必须18岁以上
age = 18
print("你可以喝酒,祝你开心") if age >= 18 else print("你不可以喝酒,你年龄不够")
# 比较 a 和 b 的大小,如果a大输出a,如果b大输出b
a = 20
b = 30
c = 40
max_number = a if a > b else b
max_number = max_number if max_number > c else c
print(max_number)
运算符的优先级
和数学一样,运算符是有优先级的,先乘除后加减。
优先级依次降低 (**) → (* /) → (// %) → (+ -)
and 和 or 有优先级么?
答:and优先级高(测试如下)
# 如果 or 优先级高 那么先对or进行计算 则运算结果是 3
# 如果 and 优先级高 那么先对and进行计算 则运算结果是 1
a = 1 or 2 and 3
print(a)
result = 1 < 3 < 2 # 1 < 3 and 3 < 2
result = 10 < 20 > 15 # 10 < 20 and 20 > 15
print(result)