Python学习笔记(四)流程控制方法

流程控制有三种方法:分支、循环、跳出

流程的控制通过布尔值来实现,分支和循环都需要对一定的条件进行判断,根据判断结果(布尔值)决定下一步要做什么

布尔值通过比较运算符、逻辑运算符来进行判断是True还是False

不需要判断直接得到True------数字1,非空数据类型与结构,如非空list,非空string,非空set等

不需要判断直接得到False------数字0,空数据类型与结构

分支

分支是根据条件,让有些代码可以被执行或不被执行

分支关键字有:if、else、elif、pass

复制代码
#if
var = 123
if var == '111':  #条件不满足
    print('123123123')   #条件不满足,不会执行
print('over')    #if外的语句,输出over
#over

#else二选一:条件不满足则执行,条件满足则不执行,else和if都只能出现一次
var = 123
if var == '111':  #条件不满足
    print('123123123')   #条件不满足,不会执行
else:
    print('ws')  #条件不满足,可以满足else,输出ws
print('over')    #if外的语句,输出over
#ws
#over

#elif:多分支,但要注意条件必须递增
var = 68
if var >= 80:
    print('优秀')
elif var >= 70:
    print('良好')
elif var >= 60:
    print('及格')
else:
    print('不及格')
print('over')
#及格
#over

#分支嵌套
dict1 = {'ws':'1111','xhy':'2222'} #创建一个包含密码的字典
name = input('username:')
if name in dict1.keys(): #判断输入的username是否在字典的key中
    pwd = input('password:')  
    if pwd == dict1[name]: #判断输入的password是否是字典中username的key对应的value
        print('success')  #成功输出success
    else:
        print('error') #失败输出error
else:
    print('no such username')

#pass占位语句,保证语法结果的完整性,不然会报错,最后再对pass部分进行修改
dict1 = {'ws':'1111','xhy':'2222'} 
name = input('username:')
if name in dict1.keys(): 
    pwd = input('password:')  
    if pwd == dict1[name]: 
        pass #满足条件则 跳过这部分,什么都不执行
    else:
        print('error')
else:
    print('no such username')

#三目运算符------------简化分支结构的写法 -只能提供二选一
var = int(input('soure:'))
print('good' if var >= 60 else 'bad') #"真" if 条件判断 else "假"
#good
等同于:
if var >= 60:
    print('good')
else:
    print('bad')

循环

让某些代码重复执行

关键字包括for、while

复制代码
# while循环
list1 = [] #给列表添加元素
i = 1
while i <= 10: #判断条件
    list1.append(i)
    i += 1
print(list1)
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#for循环,一般而言是对序列、字符串等对象进行遍历操作时使用for
#for循环不需要指定退出条件
list1=[1,2,3,4,5]
for i in list1:     #按顺序访问序列
    print(f'{i}')   #输出这个i,次数为序列的元素数
    i += 1
#for对字符串进行操作
str='wsxhy'
for i in str:
    print(f'{i}') #依次输出

#for解包:
#如果遍历的序列每一项元素都包含若干个子元素
#在循环时可以设置固定数量变量来接受
var=[(1,2,3),(4,5,6),(7,8,9),(10,11,12)]
for v1,v2,v3 in var:
    print(f'{v1},{v2},{v3}')
#1,2,3
#4,5,6
#7,8,9
#10,11,12

#for封包
var=[(1,2,3),(4,5,6),(7,8,9),(10,11,12)]
for i in var:
	print(i) #直接得到元组
#(1, 2, 3)
#(4, 5, 6)
#(7, 8, 9)
#(10, 11, 12)

#读取字典
dict1={'ws':1,'xhy':'qwe','esq':'12w'}
for i in dict1.items():
    print(f'{i}')  #分组读出key和value
#('ws', 1)
#('xhy', 'qwe')
#('esq', '12w')

#循环嵌套循环,先执行里层循环,再执行外层循环
a = 0
while a <= 10:
    for i in range(3):
        print(i)       #先执行
    a += 1   #跑完了i的循环,才会跑这条命令

#列表推导式------通过循环快速生成列表
list1=[i for i in range(1,21)]
print(list1)
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
等同于
list1 = []
i = 1
while i <= 20:
    list1.append(i)
    i += 1
print(list1)
#步长为2
list1=[i*2 for i in range(1,21)]
#结合三目运算符,挑选偶数(i % 2 ==0)
list1=[i for i in range(1,21) if i % 2 == 0]

跳出

跳出循环的方法,有break与continue

复制代码
#break跳出循环
i =1
list1 = []
while i <= 20:
    if i == 5: 
        break  #遇到break则直接跳出循环
    list1.append(i)
    i += 1
print(list1)
#[1, 2, 3, 4]

#continue跳过当前循环,最好用在for中,用在while会容易出问题
list1 = []
for i in range(1,8): #在for中没有自增概念
    if i == 5:
        continue  #在i=5的时候不执行这次循环
    list1.append(i)
print(list1)
#[1, 2, 3, 4, 6, 7]

#for else------for跑完后执行else语句,如果break了则不执行
#即两个要么都执行,要么都不执行
for i in range(1,10):
		pass
else:
    pass
#找不到则提示error
user_list={'ws':'1','xhy':'2','qwe':3}
name =input('name:')
for i in user_list:
    if i == name:
        break
else:
    print('error')
#如果不使用这种方法,则需要单独定义一个变量来存储布尔值,来为后面判断依据
name = input('name:')
find=''
for i in user_list:
    if i == name:
        find = True
        break
    find = False
if find is False:
    print('error')

# while else------返回True时else不被执行,返回False则执行else
#即只执行一个
while True:
    pass
else:    #False则执行
    pass

#练习
users=[{'ws':'ws111'},{'xhy':'xhy111'},{'qwe':'qwe111'}]
#判断用户输入是否存在
#如果有,则输入密码,检测密码是否正确
#正确则登录成功

name=input('username:')
for v1 in users:  #对这个列表进行解包,解包为三个单独的字典
    if name in v1.keys(): #判断有无用户名
        password=input('password:')
        if password in v1.values(): #判断输入的密码是否为字典对应key的value
            print('login successful')
            break
        else:
            print('password incorrect')
            break
else:
    print('no such username')
相关推荐
聪明的笨猪猪1 天前
Java Redis “核心应用” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
WTCLLB1 天前
Acer软件下载
学习·软件保护卡
聪明的笨猪猪1 天前
Java Redis “底层结构” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
Chris.Yuan7701 天前
泛型学习——看透通配符?与PECS 法则
java·学习
爱编程的鱼1 天前
OpenCV Python 绑定:原理与实战
c语言·开发语言·c++·python
岑梓铭1 天前
考研408《计算机组成原理》复习笔记,第七章(1)——I/O接口
笔记·考研·408·计算机组成原理·计组
晓风残月淡1 天前
JVM字节码与类的加载(二):类加载器
jvm·python·php
摇滚侠1 天前
Spring Boot 3零基础教程,IOC容器中组件的注册,笔记08
spring boot·笔记·后端
西柚小萌新1 天前
【深入浅出PyTorch】--上采样+下采样
人工智能·pytorch·python