文章目录

  • 运算符(操作符)
  • 算数运算符
  • 赋值运算符
  • 比较运算符(关系运算符)
  • 逻辑运算符
  • 条件运算符(三元运算符)
  • 运算符的优先级


运算符(操作符)

运算符可以对一个值或多个值进行运算或各种操作,例如:

+ - × ÷ 都属于运算符

算数运算符

  • + 加法运算符(如果是两个字符串之间进行加法运算,则会进行字符串的拼接操作)
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

  1. 对条件表达式进行计算
  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)