灵魂三问:
什么是?为什么要有?怎么用?
一 分支结构
1.1 什么是分支结构
就是根据条件的真和假来执行不同的子代码
1.2 为什么要有分支结构
当我们需要根据条件做不同的事情时,例如:今天下雨,我带伞,今天不下雨,我不带伞
1.3 怎么用分支结构
1.3.1 if语法
if 条件1: # 如果条件1的结果为True,就依次执行:代码1、代码2,......
代码1
代码2
......
elif 条件2: # 如果条件2的结果为True,就依次执行:代码3、代码4,......
代码3
代码4
......
else: # 其它情况,就依次执行:代码7、代码8,......
代码7
代码8
......
# 注意:
# 1、python用相同缩进(4个空格表示一个缩进)来标识一组代码块,同一组代码会自上而下依次运行
# 2、条件可以是任意表达式,但执行结果必须为布尔类型
# 2.1在if判断中所有的数据类型也都会自动转换成布尔类型
# 2.2、None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False
# 2.3、其余均为True
接下来用一个嵌套来演示if的进阶用法,当我们需要一个条件作为前提时,就需要多个if来嵌套表示不同场景
#我们需要对90分以上的男生和女生做不同奖励,对80分以下的男生女生做不同惩罚
result = int(input("请输入你的成绩"))
sex = input("请输入你的性别")
if result>90:
if sex == "boy":
print("棒棒糖")
else:
print("冰激凌")
else:
if sex == "boy":
print("eat shit")
else:
print("get scolding")
扩展内容:深浅拷贝
当我们需要对两个内容相同的列表进行修改操作而不影响另一个列表时
浅拷贝:是把原列表的第一层的内存地址不加区分直接copy一份给新列表。
这种情况下,我们修改原列表内的不可变类型,新列表不会变
修改原列表的可变类型,新列表会跟着改变
a = [
'aa','bb',[1111]
]
b=a.copy()
print(id(a))
print(id(b))
>>>1729418126024
>>>1729419377288
a[2][0]=123
print(a)
print(b)
>>>['aa', 'bb', [123]]
>>>['aa', 'bb', [123]]
深拷贝:不可变类型的copy方式和浅拷贝一样
可变类型,会在内存中新开辟一个内存空间
a = [
'aa','bb',[111]
]
import copy
b = copy.deepcopy(a)
print(id(a))
print(id(b))
>>>2172376474312
>>>2172379870920
a[2][0]=222
print(a)
print(b)
>>>['aa', 'bb', [222]]
>>>['aa', 'bb', [111]]
结论,如果只进行只读操作,用浅拷贝,如果要进行写操作,用深拷贝
二 循环结构
2.1while循环
基本操作:输出1-4
i= 1
while i<5:#i<5是while执行子代码的条件,在执行完一次循环后回到开头重新进行判断
print(i)
i+=1
进阶操作:判断用户登录操作
username = "hz"
password = "123"
tag = True
while tag:
name = input("请输入你的用户名:")
word = input("请输入你的密码:")
if name==username and word == password:
print("登录成功")
tag = False
else:
print("账号或密码错误")
print("————end————")
两种终止循环的方式
#第一种,直接把循环条件改为假,在执行完本层循环后结束循环
while tag=True
tag=False
print("1")
#第二种,break,在break后面的代码不执行,直接跳出循环
while True
break
print("1")
跳过本次循环的方式
i = 0
while i<5:
i += 1
if i == 2:
continue #跳出本次循环,执行下一次循环
print(i)
while与else的连用
i = 0
while i<5:
i += 1
if i == 2:
continue
print(i)
else:
print("hz is dsg")
#执行else代码的条件:while循环结束后且没有被break打断的情况