一丶可变和不可变
1丶可变类型:值改变,id不变,证明改的是原值,证明原值是可以改变的
2丶不可变类型:值改变,id也改变了,证明是产生新的值,压根没有改变原值,证明原值是不可以改变的
3丶验证
# 3.1丶int是不可变类型 x = 10 print(id(x)) x = 11 #产生新的值 print(id(x)) # 3.2丶float是不可变类型 x = 10.1 print(id(x)) x = 11.1 #产生新的值 print(id(x)) # 3.3丶str是不可变类型 x = 'aaa' print(id(x)) x = 'bbb' #产生新的值 print(id(x)) # 小结:int,float,str被设计成了不可分割的整体,不能够被改变 # 3.4丶list是可变类型 l = ['aaa','bbb','ccc'] print(id(l)) l[0]='ddd' print(id(l)) # 3.5丶dict是可变类型 dict = {'k1':111,'k2':222} print(id(dict)) dict['k1'] = 333 print(id(dict)) # 3.6丶bool不可变
字典的补充:{}内用逗号隔开多key:value,其中key必须是不可变类型 value可以是任意类型
二丶运算符
2.1丶逻辑运算符: 逻辑运算符用于连接多个条件,进行关联判断,会返回布尔值True或False
优先级:not>and>or
2.1.1丶连续and的情况:按照从左到右的顺序依次判断,一旦某一个条件为False,则无需再往右判断,可以立即判定最终结果就为False
res = 3 > 2 and 1 != 1 and True and 3 > 2 #判断到第二个条件为False 停止运行 最终结果为False print(res)
2.1.2丶连续or的情况:按照从左到右的顺序依次判断,一旦某一个条件为True,则无需再往右判断,可以立即判定最终结果就为True
res = 3 > 2 or 1 != 1 or True or 3 > 2 #判断到第一个条件为True 停止运行 最终结果为True print(res)
2.1.3丶混合and,or,not
# and、or、not三者如果混用时,是存在优先级之分的,但在日常开发中我们无需记忆优先级,应该使用()来区分优先级、提升程序的可读性 res = (3>4 and 4>3) or ((1==3 and 'x' == 'x') or 3 >3) print(res)
3.1丶成员运算符:
in:判断某个对象是否包含了另一个字符串 包含则返回True
not in:判断某个对象是否包含了另一个字符串 没包含则返回True
3.2丶身份运算符
is:比较id,id相同返回True
is not:两个id不同返回 True
三丶条件
3.1丶什么是条件:条件是判断的标准
3.2丶什么可以当做条件:
第一大类:显示布尔值
# 当条件是比较运算符 age = 18 print(age>18) # 条件判断之后会得到一个布尔值类型 # 当条件是True.False is_beautiful = True print(is_beautiful)
第二大类:隐式布尔值,所有的值都可以当成条件去用
其中(0,null,空(空字符串,空列表,空字典))都是False 其他的值都是True
3.3丶为什么要有条件:为了让计算机能够和人类一样根据一个标准去判断对错
四丶分支结构
4.1丶什么是分支结构:分支结构就是根据条件判断的真假去执行不同分支对应的子代码
4.2丶为什么要有分支结构:人类某些时候需要根据条件来决定做什么事情,所以程序中必须有相应的机制来控制计算机具备人的这种判断能力
4.3丶如何使用分支结构
4.3.1丶if语法:if如英语一样是如果的意思
if 条件1: # 如果条件1的结果为True,就依次执行:代码1,...... 代码1 ...... elif 条件2: # 如果条件2的结果为True,就依次执行:代码2,...... 代码2 ...... else: # 其它情况,就依次执行:代码3,,...... 代码3 ...... # 注意: # 1、python用相同缩进(4个空格表示一个缩进)来标识一组代码块,同一组代码会自上而下依次运行 # 2、条件可以是任意表达式,但执行结果必须为布尔类型 # 在if判断中所有的数据类型也都会自动转换成布尔类型