流程控制
流程控制
在现实生活中,我们做的每件事也是有一定流程去执行
流程控制基础
顺序结构流程
按照从上到下语句依次执行
print('开始')
name = input('输入姓名')
print(name)
print('结束')
分支结构流程
分条件执行
单分支
# if 判断条件:
# 制表符 代码片段
age = input('请输入年龄')
age = int(age) # int() 强制转换数据类型但是只能转换字符型数字
if age<28:
print('小姐姐')
双分支
# if 判断条件:
# 代码块
# else:
# 代码块
age = input('请输入年龄')
age = int(age) # int() 强制转换数据类型但是只能转换字符型数字
if age<28:
print('小姐姐')
else:
print('老北鼻')
多分支
# if 判断条件:
# 代码
#elif 判断条件:
# 代码
#elif 判断条件:
# 代码
#elif 判断条件:
# 代码
#else:
# 代码
#结束
score = input()
score = int(score)
if score > 90:
print('优')
elif score > 80:
print('良')
elif score > 70:
print('中')
elif score > 60:
print('及格')
else:
print('不及格')
循环结构流程
while循环
# while 判断语句: # 如果成立者向下执行
# 代码
# 会一直输出看妹子
while 1:
print('看妹子,看妹子')
while循环嵌套if分支
#让一些代码反复的执行
# 先判断条件是否成立
# 条件成立则执行循环体代码
# 循环体代码执行完毕后再次回到条件判断处 判断条件是否成立
# 循环往复判断 直到条件不成立才会结束循环体代码的执行
# while 判断条件:
# 循环体
# if 判断条件:
# 代码
# elif 判断条件:
# 代码
# else:
# 代码
age = input('请输入年龄')
age = int(age)
while age > 16:
if age < 25:
print('正值青春年华')
if age == 21:
print('谈婚论价')
elif age < 35:
print('面临中年危机')
else:
print('老年养老')
age -= 100
break # 强行结束循环体
continue # 立即结束本次循环,开始下次循环 直接跳转到条件判断处
while 判断条件:
循环体
循环体遇到continue立即结束本次循环
while else 循环
name = input('请输入姓名')
while name == '张三':
print(name)
else:
print('你是谁啊')
while循环补充
1. 死循环
在代码的编写过程可能和出现死循环,导致消耗大量计算机资源,直到系统采取紧急措施,如强制重启,死机等
count = 1
while True:
count *= 5
这样运行后会占用大量计算机资源
2. 嵌套及全局标识符,
1.一个break只能结束他所在的那一次循环
2.有几个while循环的嵌套,想一次结束就应写几个,break
如果不想反复写break 可以使用全局标识符
帮助我们快速结束所有循环
flag = True
while flag:
print('123')
while flag:
print('456')
flag = False
print('abc')
for循环结构
for 循环能做到的 while循环都可左到
只不过for循环在一些场景使用更简单
主要场景为:循环获取存储的多个数据的数据内部数据值
for循环的特点
1,擅长遍历取值
2.不需要结束条件,自动结束(遍历全部)
能被for循环的有:
常见的有字符串,列表,元组,字典,集合,等等可迭代对象
临时变量名也要做到见名知意
代码形式
for 临时变量名 in 遍历对象:
循环体
字符串
name_str = 'abcd'
for st in name_str:
print(st) # a b c d 单个字符
列表
name_list = ['name1','name2','name3']
for name in name_list :
print(name) # name1 name2 name3
字典
比较特殊
name_dict = {
'name': 'zhang',
'job': 'sales',
'age': 18
}
for dt in name_dict:
print(dt) # name job age
for循环的是字典的键,只有键参与遍历
for循环体内遇到break会里面结束整个循环
for循环体遇到continue会立马结束本次循环,开始执行下一次循环
for 临时变量 in 待遍历数据:
for循环体
else:
子代码
for循环体代码没有break强制结束的情况下运行完毕后 运行
range函数
可以帮助我们创建一个内部含有多个数字的数据,不是一次生成节省内存空间
用法
range(100) # 当只传一个参数时默认首个为0,直到,99,顾头不顾尾
#range(0, 100) 这样的一个形式 当使用时再去取
range(1,100) # 传如两个参数时,默认第一个值为,传入的第一个,后面直到,99
range(1,100,2) # 第三个参数相当于等差数列里的差值,默认不写等差值为1,如1,3,5,7····,99
#python2
range(10)
# 直接生成所需要列表 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 如果range(10000000000000000),就占用大量内存空间
xrange(10)
# 不直接产生列表而是一个迭代器
# xrange(10)
#python3
range(10)
# 在python3中取消了直接生产列表,用xrange,换成了range
# 类似余一个工厂 不会占用太多内存空间
作业练习1
# 1.根据用户输入内容打印其权限
#
# jason --> 超级管理员
# tom --> 普通管理员
# jack,rain --> 业务主管
# 其他 --> 普通用户
while True:
user_name = input('请输入用户名,退出(Q/q)')
if user_name.upper() == 'Q':
break
if user_name == 'jason':
print('超级管理员')
elif user_name == 'tom':
print('普通管理员有')
elif user_name == 'jack' or user_name == 'rain':
print('业务主管')
else:
print('普通用户')
2.编写用户登录程序
要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
eg:black_user_list = ['jason','kevin','tony']
如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
eg: oscar 123
black_user_list = ['jason', 'kevin', 'tony']
while True:
name = input('请输入用户名,退出(Q/q)')
password = input('请输入用户密码')
if name.upper() == 'Q':
break
if name in black_user_list:
print('%s在黑名单,不允许登录' % name) # 判断是否在黑名单
continue
if name == '张三' and password == '我是坤吧': # 判断用户名密码
print('%s,登录成功' % name)
continue
print('%s,用户名或密码错误' % name)
3.编写用户登录程序
用户如果登录失败 则只能尝试三次
用户如果登录成功 则直接结束程序
count = 0
while count < 3:
user_name = input('用户名')
pass_word = input('密码')
if user_name == '坤坤' and pass_word == '鸡': # 判断用户名密码
print('登录成功')
count = 0
continue
count += 1
if count == 3:
break
print('登录失败,你还剩%s次' % (3-count))
4.猜年龄的游戏
假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄
基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序
拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序
count = 1
while True:
age = input('请输入你猜的年龄')
if not age.isdecimal():
print('输入不正确,请重新输入')
continue
age = int(age)
if age == 18:
print('猜对了')
break
if age > 18:
print('猜大了')
if age < 18:
print('猜小了')
if count >= 3:
print('3次机会用完了是否继续')
while True:
user_in = input('退出或继续n/y')
if user_in == 'y':
count = 1
break
elif user_in == 'n':
exit()
else:
print('输入不正确')
continue
count += 1
print('你还剩%s次机会' % (4-count))
作业练习2
1.计算1-100所有的数之和
count1 = 0
for num1 in range(101):
count1 += num1
print(count1)
2.判断列表中数字2出现的次数
l1 = [11,2,3,2,2,1,2,1,2,3,2,3,2,3,4,3,2,3,2,2,2,2,3,2]
count2 = 0
for num2 in l1:
if num2 == 2:
count2 += 1
print(count2)
#或者可以这样写
print(l1.count(2))
3.编写代码自动生成所有页网址(注意总共多少页)
https://movie.douban.com/top250
str_format = 'https://movie.douban.com/top250?start=%s&filter='
for num in range(10):
print(str_format % (num*25))
4.编写代码打印出下列图形(ps:for循环嵌套)
*****
*****
*****
*****
for num in range(4):
for nnn in range(5):
if nnn == 4:
print('*')
else:
print('*', end='')