前言:
本章节讲述了Python代码的流程控制
流程指就是计算机运行代码的顺序
流程控制:对计算机执行代码的顺序进行控制
流程控制分类:一般分为三种,顺序结构、分支结构、循环结构
文章目录
如果对python不是很熟悉建议先阅读上一篇博客:https://blog.csdn.net/m0_46958731/article/details/109751902
顺序结构
从上至少按顺序运行(Python默认)
x = 123
print(x)
y = 456
print(y)
'''
代码从上之下按顺序运行指的就是顺序结构
'''
分支结构
一般分为四种分支结构:单项分支、双项分支、多项分支、巢状分支
要构建分支可以使用if
语句来创建
单项分支
'''
if 判断条件: # 如果条件成立 执行代码块 ,代码块注意缩进!!!!
代码块
'''
x = 10
if 10 > 5:
print('123')
if 5 > 10: # 条件会成立吗
print('456')
print(x)
单项分支 附加知识点:input(人机交互)%s格式化输出
'''
执行这条语句的时候 程序会暂停在原地等待用户的输入
然后输入的值会交给inp_user这个变量,输入的是字符串类型
'''
inp_user = input('请输入你的用户名:')
if inp_user == 'root':
print('欢迎%s回家' % inp_user)
'''
%s 代表格式化输出(可以引入任意类型)
引入变量到字符串里面可以先用%s占位 最后再引号外面 % 变量名 引入进来
%d 只能引入数字类型的变量值
'''
双分支结构
inp_user = input('Please Username>>>> ')
inp_password = input('Please Password>>>> ')
if inp_user == 'root' and inp_password == '123':
print('Login Successful')
else:
print('User or Password error')
'''
首先按顺序从上之下运行,待用户输入完信息后执行到if语句
开始判断 是否条件成立,如果成立的话 执行里面的代码块
如果条件不成立 执行else语句
else:当所有条件不成立的时候执行
'''
多项分支结构
score = input('请输入你的成绩:')
# 由于input输入出来的是字符串,如果要进行数字判断那么需要类型转换
int(score)
'''
转换成数字类型
只有检测出来输入的成绩带有数字的字符才会成功转换,否则会报错
或者可以这样写:socre = int(input('请输入你的成绩:'))
'''
if score >= 90: # 判断1
print('优秀')
elif score >= 70: # 判断2
print('良好')
elif score >= 60: # 判断3
print('及格')
else: # 如果所有判断语句都不成立时,执行else语句
print('不及格')
'''
多个条件判断
代码由上至下执行,首先判断if语句是否成立,不成立再往下判断
同层次条件判断只会执行一个,如果一个成立,其它的都不会再进行判断
'''
if 判断语句,必须要有的就是if 不能以elif 或者 else 为起始判断
巢状分支
单项分支、双向分支、多项分支、互相嵌套(多层结构)
student_number = input('请输入你的学号:')
student_password = input('请输入你的密码:')
if student_number == '10086' and student_password == '123':
count = input('1、查询分数 2、退出')
if count == '1':
score = input('请输入你的分数')
if score >= 90:
print('优秀')
elif score >= 70:
print('良好')
elif score >= 60:
print('及格')
else:
print('不及格')
elif count == '2':
print("已退出...")
else:
print('账号或者密码错误')
'''
巢装结构也是,分支嵌套
学到循环以后可以重复输入,这里每次input只能输入一次
'''
循环结构
while 循环语句
循环就是重复做某件事情
while 判断条件: # 如果判断条件成立就重复执行代码块,直到条件不成立为止
代码块
while循环的使用方法
实例:
count = 1
while count < 20: # 判断 count是否小于20
print(count) # 如果条件一直成立,那么这个循环永远不会结束
count += 1 # 每次count自增 循环20次以后 判断就会不成立
'''
while 执行的流程:
首先判断条件是否成立,成立的话执行下面的代码块
执行完代码块以后,再来看条件是否成立 以此类推
'''
执行用户登录的操作,定义了一个永远成立的条件(死循环)
while True:
inp_username = input('Username>>>>> ')
inp_password = input('Password>>>>> ')
if inp_username == 'root' and inp_password == '123':
print('Login Successful')
break # 判断登录成功以后 立刻中断循环
else:
print('Username or Password error')
'''
循环结束分为两种:
第一种:正常判断条件不成立结束
如 count < 20
当前count值为19 执行+1操作以后
如果其下面还有代码也会按顺序执行完毕才会进行下一次判断 不成立 结束循环
第二种:break 强制中断循环,break以下的代码不执行
'''
break
强制结束当前包住它的循环(不包括外面嵌套的循环)
continue
用于立即结束本次循环,开始下一次循环,continue以下的代码不会执行
count = 1
while count < 20:
if count == 3: # 只要count等于3 那么直接结束本次循环
continue
count += 1 # 每次循环自增1
print(count)
'''
这里有一个很严重的问题,那就是:
前两次count都会正常增加 打印
到了count等于3的时候,问题来了
直接结束本次循环,开始下一次,判断 count是否小于20 成立
那么继续运行代码块,到了if判断 count等于3成立 接着结束本次循环,
下面代码不会执行
以此类推,那么这样的话,条件永远成立,判断永远不会结束(死循环)
'''
count = 1
while count < 20:
if count == 3: # 只要count等于3 那么直接结束本次循环
count += 1
continue
count += 1 # 每次循环自增1
print(count)
'''
可以在if里面+1 避免下次还会continue这个关键字
或者 将count += 1 移动到上面,因为代码是按顺序执行的,那么最终效果就是
count等于3时候,if判断成立,跳过 只有下面的print不会执行,下一次循环从count开始
count等与4 判断不会成立
'''
count = 1
while count < 20:
count += 1 # 每次循环自增1
if count == 3: # 只要count等于3 那么直接结束本次循环
continue
print(count)
while 对应列表
lis = [123,456,789]
# 取列表只能通过索引来取值,那么通过while的话就要通过动态索引来一次性取值
count = 0 # 计数
# 因为要取的是上序列表的值,如果要获取它的元素个数,才能进行索引
while count < len(lis):
print(lis[count]) # count对应到列表索引
count++ # count在原来的基础上加 +1
循环里面也可以嵌套循环,可以结合上序if判断 写入循环
While练习 判断用户登录验证
count = 3 # 记录错误次数
while True:
inp_username = input('请输入用户名:')
inp_password = input('请输入密码:')
if inp_username == 'root' and inp_password == '123':
print('登录成功')
break # 登录成功后退出
else:
count -= 1 # 每次输入错误在原来基础上减1
if count == 0:
print('没有机会再进行登录了!')
break # 3次机会用完后退出
print('账号或者密码错误,你还有%s次机会' % count)
for 循环语句
for 循环的使用方法
for 循环也可以叫 遍历
Python for可以遍历任何序列的项目,如一个列表、字符串、字典、元组
for 循环一般格式:
for i in value: # i 取遍历值的变量名 value 遍历的内容
print(i)
range()函数:当前你需要遍历数字 或者次数的时候可以使用此方法
# 第一种使用方法
for i in range(1,5): # range(起始,结束) 顾头不顾尾
print(i,end=' ') # 取消换行,改成打印后空格
1 2 3 4
# 第二种使用方法
for i in range(5): # 不写起始 默认从0开始
print(i,end=' ')
0 1 2 3 4
# 第三种使用方法
for i in range(1,10,2): # 步长,每循环一次在之前的基础上+2
print(i,end=' ')
1 3 5 7 9
for i in range(10,-1,-1): # 从10到负1 每次在原来基础上-1
print(i,end=' ')
10 9 8 7 6 5 4 3 2 1 0 # 这里起始为10 结尾为-1 顾头不顾尾 只能到0
for 遍历列表实例:根据列表里面的元素取值
l = ['Jack','Tom','Jams']
# 把l列表整个取过来,每次从里面拿一个元素赋给i这个变量,按顺序取元素
for i in l:
if i == 'Tom': # 如果取到的值对应上这个判断那么执行continue跳过这次循环
continue
print(l)
'Jack'
'Jams'
lis = [['jack',18],['tom',20],['jams',26]]
# 嵌套了3个列表如果取出呢 可以有两种方式
'第一种:'
for i in lis: # i拿到嵌套的列表
for j in i: # 取到i拿到的列表元素值
print(j,end=' ') # end默认为换行,这里将里面的内容替换成了空格
print() # 打印完一个i拿到的列表 换行
jack 18
tom 20
jams 26
# 第二种:结合上篇的解压赋值,也可以拿到for 实现
for name,age in lis: # 这样拿虽方便,但是要在确认列表元素个数的前提下
print(name,age) # 按顺序取值,第一个元素交给name 第二个交给age
jack 18
tom 20
jams 26
for 遍历字典实例:遍历只能取出key
# 取多个字典值最好使用for,因为它更方便使用
dic = {"jack":18,'tom':25,'jams':36}
for k in dic:
print(k)
'jack' # 可以取到key,那么只需要拿key对应dic就可以拿到对应的value
'tom'
'jams'
dic = {"jack":18,'tom':25,'jams':36}
for k in dic:
print(k,dic[k])
'jack' 18
'tom' 25
'jams' 36
# 还有一种可以直接拿到字典值到操作,不需要先取key
# items()方法可以拿到字典的 key 和 value值,定义两个变量取出来即可
for k,v in dic.items():
print(k,v)
'jack' 18
'tom' 25
'jams' 36
for 遍历字符串:
test = 'abcdef'
for i in test: # 因为字符串是一个整体,每次取出一个字符
print(i,end=' ')
a b c d e f
for循环练习:统计相同字符出现的次数
sr = 'hello tom tom say hello good good'
words = sr.split(' ') # 将字符通过空格进行分隔后成了一个列表
# 此时 word内容
['hello', 'tom', 'tom', 'say', 'hello', 'good', 'good']
dic = {} # 定义空字典,用于统计字符次数
for i in words: # 遍历这个列表,因为字符已经分隔存与这个列表
if i not in dic: # 判断字符 是否存在字典内,如果已存在则不执行这个判断
dic[i] = 1
# 将字符作为key,执行这个代码块的都是第一次出现的字符,给它赋值1
else:
dic[i] += 1
# 执行这个代码块,说明字符已经存在字典内了,那么只需要给value加1即可
print(dic)
{'hello': 2, 'tom': 2, 'say': 1, 'good': 2}
for循环练习:打印9x9乘法表
for i in range(1,10):
for j in range(1,i + 1): # 根据 i 的值变化 第一次1*1 第二次2*1 2*2
print('%s x %s = %s' % (i,j,i * j),end='')
print() # 每打印一行乘法表就换行 # 格式化输出 end为空不换行
for循环练习:打印*号塔
count = 1
n = 10
for i in range(1,10): # 打印 10层
for j in range(n): # 打印空格
print(' ',end='')
for l in range(count): # 打印 *号
print('*',end='')
count += 2 # 每次多两个*号
n -= 1 # 每次少一个空格
print() # 换行
好记性不如烂笔头,快动手操作一下吧!
下一篇博客 文件处理:https://blog.csdn.net/m0_46958731/article/details/110007598
技术小白记录学习过程,有错误或不解的地方请指出,如果这篇文章对你有所帮助请
点赞收藏+关注
谢谢支持!