1.可变不可变类型(可哈希不可哈希)
1.可变不可变类型
可变类型:
值改变,id不变,证明改的是原值,证明原值是可以被改变的
不可改变类型:
值改变,id变,证明产生了新的值,压根没有改变原值,证明原值不可被改变
2.验证
2.1 int是不可改变类型
x = 10
print(id(x)) # 1667066912
x = 11
print(id(x)) # 1667066944
2.2 float是不可改变类型
y = 3.1
print(id(y)) # 30282112
y = 4.2
print(id(y)) # 30282136
2.3 str是不可改变类型
z = 'aaa'
print(id(z)) # 31175600
z = 'bbb'
print(id(z)) # 31209208
小结:int、float、str都被设计成了不可分割的整体,不能被改变
2.4 list是可变类型
l = ['111', 222, '555']
print(id(l)) # 32026312
l[0] = '666'
print(l) # ['666', 222, '555']
print(id(l)) # 32026312
2.5 dict是可变类型
dic = {'a': 55555, 'b': 6666}
print(id(dic)) # 31157848
dic["a"] = 888
print(dic) # {'a': 888, 'b': 6666}
print(id(dic)) # 31157848
2.6 bool类型 不可变 True和False
补充:dict字典类型中的key值,必须是不可变类型
2.运算符(下)
2.1逻辑运算符
条件:
什么是条件?什么可以当做条件?为何要用条件?
显示布尔值 条件可以是比较运算符和布尔值
age=18
print(age>16)#条件判断后得到一个布尔值
is_beautiful=True
print(is_beautiful)
隐式布尔值 所有值都可以当做条件去用
其中0,None,空(空字符串、空列表、空字典)代表布尔值为False,其余都为True
1.not and or 的基本语法
not:就是把紧跟其后的那个条件结果取反
not与紧跟其后的条件是一个不可分割的整体
print(not 16 > 12) # False
print(not True) # False
print(not False) # True
print(not 10) # False
print(not 0) # True
print(not '') # True
and 逻辑与 ,用于连接左右两个条件,两个条件全True,最终结果才为True
条件1 and 条件2
print(True and 1 > 0) # True
print(True and 2 > 3) # False
or 逻辑或,用于连接左右两个条件,但凡有一个条件为True,最终结果为True
两个结果都为False时,最终结果才为False
print(3 > 2 or 0) # True
print(0 or 3 < 2) # False
2.not and or的优先级not>and>or
但是在编程中,为了一目了然,尽量配合括号使用,将各个逻辑运算分组,最后用and连接
2.2成员运算符 in 和 not in
print('e'in 'hello')#True
print(111 in [111 ,222])#True
#判断key是否在字典里
print(111 in {'a':111,'b':222})#False
print('a' in {'a':111,'b':222})#True
2.3身份运算符 is
判断两个变量id是否相等
3.流程控制之if判断
语法1:
# if 条件:
# 代码1
# 代码2
# 代码3
age=18
is_beautiful=True
star="水瓶座"
if 20>age>=18 and is_beautiful and star=='水瓶座':
print('可以')
语法2:
# if 条件:
# 代码1
# else:
# 代码2
age=60
is_beautiful=True
star="水瓶座"
if 20>age>=18 and is_beautiful and star=='水瓶座':
print('可以')
else:
print('再见,然后深藏功与名。')
语法3:
# if 条件1:
# 代码1
#elif 条件2:
# 代码2
# else:
# 代码3
score=88
if score>=90:
print('优秀')
elif score<90 and score>=80:
print('良好')
elif score<80 and score>=60:
print('及格')
else:
print('不及格')
#改进,因为只能执行一段,如果上面的条件符合就不会执行下面的条件判断了
#所以可以改进为:
score=88
if score>=90:
print('优秀')
elif score>=80:
print('良好')
elif score>=60:
print('及格')
else:
print('不及格')