06-运算符_Python基础
# 1.算数运算符:+ / // % ** print(10 + 3.1) print(10 + 3) print(10 / 3) # 结果带小数 print(10 // 3) # 只保留整数部分 print(10 % 3) # 取模、取余数 print(10 ** 3) # 取模、取余数 # 2.比较运算符:> >= < <= == != print(10 > 3) print(10 == 10) print(10 >= 10) print(10 >= 3) # name = input("your name: ") # print(name == "ly") # 3.赋值运算符 # 3.1 变量赋值 # 3.2增量复制 age = 18 age += 1 # age=age+1 print(age) age *= 3 age /= 3 age %= 3 age **= 3 # 3.3.链式赋值 x = 10 y = x z = y z = y = x = 10 print(x, y, z) print(id(x), id(y), id(z)) # 3.4.交叉赋值 m = 10 n = 20 print(m, n) # 交换值 # temp = m # m = n # n = temp # print(m,n) m, n = n, m print(m, n) # 3.5解压赋值 salaries = [111, 222, 333, 444, 555] # # 把五个月的工资取出来分别赋值给不同的变量名 # mon0 = salaries[0] # mon1 = salaries[1] # mon2 = salaries[2] # mon3 = salaries[3] # mon4 = salaries[4] # # 解压赋值 # mon0, mon1, mon2, mon3, mon4 = salaries # print(mon0) # print(mon1) # print(mon2) # print(mon3) # print(mon4) # mon0,mon1,mon2,mon3=salaries # 对应的变量名少一个不行 # mon0,mon1,mon2,mon3,mon4,mon5=salaries # 对应的变量名多一个也不行 # 引入*,可以帮助我们取两头的值,无法取中间的值 # 取前三个值 x, y, z, *_ = salaries[111, 222, 333, 444, 555] # *会将没有对应关系的值存成列表然后赋值给紧跟其后的那个变量名,此处为_ print(x, y, z) print(_) # 取后三个值 # *_,x,y,z=salaries=[111,222,333,444,555] # print(x,y,z) # x,*_,y,z=salaries=[111,222,333,444,555] # print(x,y,z) # salaries=[111,222,333,444,555] # _,*middle,_=salaries # print(middle) # 解压字典默认解压出来的是字典的key x, y, z = dic = {"a": 1, "b": 2, "c": 3} print(x, y, z)
# 逻辑运算符
# 1. not、and、or的基本使用
# 1.1 not:就是把紧跟其后的那个条件结果取反
# ps:not与紧跟其后的那个条件是一个不可分割的整体
print(not 16 > 13) # False
print(not True) # False
print(not False) # True
print(not 10) # False
print(not 0) # True
print(not None) # True
print(not "") # True
# 1.2 and:逻辑与,用于连接两个条件,两个条件同时成立时才返回True,但凡有一个条件为False则返回False
print(True and 10 > 3) # True
# ps:可以用and连接多个条件,会按照从左到右的顺序一次判断,一旦某一个条件为False,则无需再往右判断,可以立即判定最终结果为False,只有在所有条件的结果都为True的情况下,最终结果才为True。
print(2 > 1 and 1 != 1 and True and 3 > 2) # False
# 1.3 or:逻辑或,用于连接两个条件,两个条件但凡有一个条件成立时就返回True,只有在两个条件同时为Fasle时才返回False
print(3 > 2 or 0) # True
# ps:可以用or连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为True,则无需再往右判断,可以立即判定最终结果为True,只有在所有条件的结果都为Fasle的情况下,最终结果才为False
print(2 > 1 or 1 != 1 or True or 3 > 2) # True
# 2.优先级not>and>or,同一优先级默认从左往右计算。
# 原理:
# (1) not的优先级最高,就是把紧跟其后的那个条件结果取反,所以not紧跟其后的条件都不可分割
# (2) 如果语句中全部是用and连接,或者全部用or连接,那么按照从左到右的顺序一次计算即可
# (3) 如果语句中既有and也有or,那么先用括号把and的左右两个条件给括起来,然后在进行运算
print(3>4 and 4>3 or 1==3 and "x" == "x" or 3 >3) # False
print((3>4 and 4>3) or (1==3 and "x" == "x") or 3 >3) # False
# 1.成员运算符 in、(not in)
# 1.1 in:某一个对象包含于另外一个对象则返回True
print("egon" in "hello egon") # 判断一个字符串是否存在于一个大字符串中
print("e" in "hello egon") # 判断一个字符串是否存在于一个大字符串中
print(111 in [111, 222, 33]) # 判断元素是否存在于列表
print(111 in {"k1": 111, "k2": 222}) # False
print("k1" in {"k1": 111, "k2": 222}) # True
# 1.2 not in:某一个对象没有包含于另外一个对象则返回True
print("egon" not in "hello egon") # False
# 2.身份运算符 is、(is not)
# 2.1 is:比较的是id,两个对象的id相同则返回True
x = 10
y = x
print(id(x), id(y))
print(x is y) # x与y的id相同(1709662720 1709662720)
# 2.2 is not:在两个对象的id不同时is not会返回True
m = "xx"
n = "yyy"
print(id(m), id(n)) # m与n的id不同(2470609030032 2470609029976)
print(m is not n) # True
# 2.3 补充 == 与 is
# ==双等号比较的是value是否相等,而is比较的是id是否相等
# 2.3.1 id相同,内存地址必定相同,意味着type和value必定相同
# 2.3.2 value相同,type肯定相同,但id可能不同
x = "Info Tony:18"
y = "Info Tony:18"
print(id(x), id(y)) # x与y的id不同,但是二者的值相同 (2850804534832, 2850803860400)
print(x == y) # 等号比较的是value
print(type(x), type(y)) # 值相同type肯定相同
print(x is y) # is比较的是id,x与y的值相等但id可以不同