流程控制
1.流程控制理论
流程控制的概念
本质就是事物的执行流程 事物的执行流程总共就三种
1.顺序结构
从上往下依次执行 我们之前所写的代码都是顺序结构
2.分支结构
根据条件的不同执行不同的代码
3.循环结构
根据条件的判断绝对是否一直做某件事
2.储备知识
1.python中使用代码的缩进来表示代码的从属关系
缩进的代码是否运行取决于上面没有缩进的父代码(结尾有冒号)
2.缩进量其实没有要求 只要缩进了即可
但是为了美观 一般推荐使用四个空格
3.并不是所有的代码都可以拥有子代码
if关键字 else关键字 elif关键字 ( elif else不能单独使用)
4.同属于一个父代码的多行子代码应该保证相同的缩进量
如果代码缩进了 那就必须往上找一个缩进量比它小的代码作为父代码
这个父代码如果可以拥有子代码 那么没有问题 不可以则直接报错
5.相同缩进量的代码彼此之间没有主次之分 都是按照顺序依次执行
3.流程控制之分支结构
“”"
1.在python中如果想要编写分支结构 那么需要使用关键字if
“”"
1.单if分支
if 条件:
条件成立执行执行的代码(子代码)
条件可以是布尔值 也可以是表达式
判断的条件可以是一个 也可以是由逻辑运算符连接的多个
实战演练
# 1.定义女人的年龄
age = 28
# 2.判断女人的年龄
if age < 30:
print('小姐姐你好呀!!!')
# 嵌套(暂且可以不考虑)
age = 28
# 2.判断女人的年龄
if age < 30:
print('小姐姐你好呀!!!')
if True:
print('跟我学习吧!!!')
2.if…else分支
if 条件:
条件成立之后执行的子代码
else:
条件不成立执行的子代码
判断的条件可以是一个 也可以是由逻辑运算符连接的多个
实战演练
name = input('name>>>:')
pwd = input('pwd>>>:')
# 2.判断用户名和密码是否正确(目前只能写死)
# if name == 'jason' and pwd == 123: # python中不同数据类型之间无法直接做比较
if name == 'jason' and pwd == '123': # python中不同数据类型之间无法直接做比较
print('登录成功')
else:
print('用户明或者密码错误')
3.if…elif…else分支
if 条件1:
条件1成立执行的子代码
elif 条件2:
条件1不成立 条件2成立执行的子代码
elif 条件3:
条件1和2都不成立 条件3成立执行的子代码
else:
上述所有的条件都不成立执行的子代码
if elif else三者连用 永远只会走一个分支
elif 和 else都不能单独使用 必须结合if
4.if的嵌套使用
在大街上看到一个漂亮的背影 上去要微信
如果要微信成功了 则邀请她去看电影(她可能拒绝 也可能接受)
如果接受了则继续吃饭 逛街 等待天黑!!!
# 1.先定义出各种条件
is_wechat = True
is_movie = True
is_agree = False
is_xxx = True
# 2.条件判断
if is_wechat:
print('要微信成功了')
if is_movie:
print('要去看电影了 找个后排座位 视野好')
if is_agree and True:
print('吃饭 逛街 天黑了!!!')
else:
print('你个臭流氓!!!')
else:
print('看电影多无聊!!!')
else:
print('你个癞蛤蟆!!!')
4.循环结构之while
while 条件:
条件成立之后循环执行的子代码
1.先判断while后面的条件是否成立 如果成立则执行子代码
2.子代码运行完毕之后 再次回到while后面的条件判断处 判断条件是否成立
3.如果成立则继续运行子代码 完毕后再次判断while后面的条件是否成立
4.依次往复 直到条件不成立才会结束
1.while
while True:
name = input('name>>>:')
pwd = input('pwd>>>:')
if name == 'jason' and pwd == '123':
print('登录成功')
else:
print('用户名或密码错误')
2.while+break
结束循环体的方式
1.自己写结束条件 利用while后面的条件判断(规定12:30下班)
2.在循环体代码中添加关键字强制结束(心情好 10:30就放假)
while True:
name = input('name>>>:')
pwd = input('pwd>>>:')
if name == 'jason' and pwd == '123':
print('登录成功')
# 强制结束
break # 直接结束break所在的循环体 (结束本层循环)
else:
print('用户名或密码错误')
验证一个break只能结束它所在那一层的循环体代码
如果while循环嵌套了很多层,要想退出每一层循环则需要在每一层循环都有一个break
## while True:
print('我是外层的循环')
while True:
print('我是内层的循环')
break
break
3.while+continue
结束本次循环,直接进入下一次循环
count = 1
while count < 11:
if count == 7:
# 让count自增1
count += 1
# 跳过本次循环 直接开始下一次循环
continue
print(count)
count += 1
结束本次循环 直接开始下一次循环(也只影响所在的那一层循环而已)
while True:
print(123)
while True:
print(321)
continue
continue
4.while+else
count = 1
while count < 11:
print(count)
if count == 7:
break
count += 1
else:
print('循环体按照提前定义好的条件正常结束 则会执行')
5.while循环嵌套+tag的使用
如果我们的目的很明确就是要在某一层直接退出所有层的循环,其实有一个窍门,就让所有while循环的条件都用同一个变量,该变量的初始值为True,一旦在某一层将该变量的值改成False,则所有层的循环都结束)
username = "jason"
password = "123"
count = 0
tag = True
while tag:
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
while tag:
cmd = input('>>: ')
if cmd == 'quit':
tag = False # tag变为False, 所有while循环的条件都变为False
break
print('run <%s>' % cmd)
break # 用于结束本层循环,即第一层循环
else:
print("输入的用户名或密码错误!")
count += 1
5.循环结构之for循环
1.功能
"""
for循环能够做到的事情while循环都可以做到
但是for循环的语法结构更加简单 尤其擅长循环取值
"""
2.语法结构
for 变量名 in 可迭代对象: # 字符串 列表 字典 元组
for循环的循环体代码
“”"
针对变量名的命名 如果带取值的数据有明确的指向 最好见名知意
for name in 学习姓名名单
for addr in 地址信息
如果没有明确的指向 可以使用常见的字母
i j k item v …
“”"
3.常见取值操作
循环打印出列表中每一个数据值
列表取值:索引
while循环打印
num = 0
while num < 4:
print(l1[num]) # 每次循环的时候索引应该自增1
num += 1
for循环
for i in l1:
print(i)
user_dict = {
'username': 'jason',
'pwd': 123,
'age': 18
}
"""for循环字典 默认只能取到字典的key"""
for i in user_dict:
print(i)
desc = 'hello baby! 你会感谢少时奋斗的自己'
"""for循环字符串 默认每次取单个字符"""
for i in desc:
print(i)
t = (11, 22, 33, 44)
"""for循环元组数据与列表一致 默认都是单个数据值"""
for i in t:
print(i)
s1 = {1,2,3,4,5}
for i in s1:
print(i)
4.for+break
# 1-10 7结束
for i in range(1,11):
if i == 7:
break
print(i)
"""
break也能够结束所在的那一层for循环
"""
5.for+continue
# 1-10 7跳过
for i in range(1, 11):
if i == 7:
continue
print(i)
"""
continue也能够结束所在的那一次for循环 直接开始下一次
"""
6.for+else
for i in range(10):
print(i)
if i == 5:
break
else:
print('嘿嘿嘿 猜猜我什么时候执行')
"""
else配合for一起使用 当for循环没有被强制结束的情况下 循环体结束之后运行else子代码
"""
6.range知识
1.range方法
range可以看成是一个能够帮助我们快速产生一个包含多个数据值的列表
for i in range(5): # 如果括号内只有一个数字 那么就是从0开始到数字减一结束(顾头不顾尾 左包含右不包含)
print(i)
for i in range(3, 10): # 括号内有两个数字 第一个是起始位置(包含) 第二个是终止位置(不含)
print(i)
for i in range(0, 100, 25): # 括号内有三个数字 最后一个是数据的间隔数(等差数列)
print(i)
"""
在python2中有两个
range()
直接产生一个列表 当数据量很大的时候可能会造成内存溢出(爆满)
xrange()
其实就是python3里面的range方法
在python3中只有一个
range()
类似于是一个工厂 什么时候要什么时候创建给你 节省内存
"""
range方法实操
网络爬虫:python代码模拟网络请求获取数据
很多网址的数据都不止一页 所以有时候需要通过代码模拟(方式1)
博客园多页规律
https://www.cnblogs.com/ 第一页
https://www.cnblogs.com/#p2 第二页
https://www.cnblogs.com/#p3 第三页
https://www.cnblogs.com/#p4 第四页
...
大胆猜则第一页还可以这么写
https://www.cnblogs.com/#p1
# 编写代码自动产生博客园前一百的网址
"""
https://www.cnblogs.com/#p2 第二页
https://www.cnblogs.com/#p3 第三页
https://www.cnblogs.com/#p4 第四页
...
大胆猜则第一页还可以这么写
https://www.cnblogs.com/#p1
"""
# 提前定义好一个模板
base_url = 'https://www.cnblogs.com/#p%s'
for i in range(1, 101):
print(base_url % i)
练习
1.判断年龄
1.女人的年龄>=18并且<22岁并且身高>170并且体重<100并且是漂亮的,那么:表白,否则:拜拜
1.列出条件
age = 23
height = 172
weight = 99
2.根据用户输入内容打印其权限
2.根据用户输入内容打印其权限
‘’’
jason --> 超级管理员
tom --> 普通管理员
jack,rain --> 业务主管
其他 --> 普通用户
‘’’
#1.获取用户信息
username = input(‘请输入用户名>>>:’).strip()
#2.判断用户名权限
if username == ‘jason’:
print(‘超级管理员’)
elif username == ‘tom’:
print(‘普通管理员’)
elif username == ‘jack’ and username == ‘rain’:
print(‘业务主管’)
else:
print(‘普通用户’)
3.编写用户登录程序
3.编写用户登录程序
要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
eg:black_user_list = ['jason','kevin','tony']
如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
eg: oscar 123
while True:
username = input('请输入用户名>>>:').strip()
black_user_list = ['jason','kevin','tony']
#2.判断是否属于黑名单
if username not in black_user_list:
password = input('请输入密码>>>:').strip()
if username == 'oscar' and password == '123':
print('登录成功')
else:
print('用户名或者密码错误')
else:
print('登录失败')
4.编写一个用户登录程序
4.编写一个用户登录程序
用户如果登录失败 则只能尝试三次
用户如果登录成功 则直接结束程序
real_password = '123'
count = 1
#2.循环
while count < 4:
#3.获取用户信息
username = input('请输入用户名>>>:').strip()
password = input('请输入密码>>>').strip()
#4. 判断用户信息是否正确
if username == real_name and password == real_password:
print('登录成功')
break
else:
print('登录失败')
#5.提供限制次数(找到while循环的最终限制)
count += 1
5.编写一个用户登录程序
5.编写一个用户登录程序
用户如果登录失败 可以无限制尝试
用户如果登录成功 则进入内层循环 获取用户输入的指令 并打印该指令
eg: 用户输入cmd指令 则程序打印'正在执行您的指令:cmd'
给用户提供一个退出命令 用户一旦输入则退出这个程序
eg: 用户输入q指令 则程序先打印该指令再结束
#1.正确信息
real_name = 'dui'
real_password = '123'
tag = True
#2.循环结构
while True:
#3获取用户信息
username = input('请输入用户名>>>:').strip()
password = input('请输入密码>>>:').strip()
#4判断输入用户信息是否正确
if username == real_name and password == real_password:
print('登录成功')
while tag:
cmd = input('请输入命令>>>:')
data = '正在执行您的指令:%s'
print(data%(cmd))
choice = input('请输入指令>>>:').strip()
if choice == 'q':
print('欢迎下次登录')
break
else:
print('指令输入错误')
break
else:
print('账户名或者密码错误')
6.编写猜年龄的游戏
6.编写猜年龄的游戏
用户有三次猜测的机会 如果用完则提示用户是否继续尝试
用户输入y则继续给三次机会 如果用户输入q则直接结束程序
#1.正确的年纪
real_age = '18'
count = 1
tag = count
info = """
------------ info ---------------
继续尝试:y
放弃竞猜:q
------------ end -----------------
"""
#2.循环结构
while count < 4:
age = input('请输入年纪>>>:').strip()
if age == real_age:
print('恭喜你答对了')
break
else:
print('请再次输入')
count += 1
if count == 4:
print(info)
choice = input('请输入指令>>>:').strip()
if choice == 'y':
while tag < 4:
age = input('请输入年龄>>>:').strip()
if age == real_age:
print('输入正确')
break
else:
print('请再次输入年龄')
tag += 1
elif choice == 'q':
print('欢迎再次参加')
break
7.计算1-100所有的数之和
7.计算1-100所有的数之和
count = 0
for i in range(1, 101):
count += i
print(count)
8.判断列表中数字2出现的次数
8.判断列表中数字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]
count = 0
for i in l1:
if i == 2:
count += 1
print(count)
9.编写代码自动生成所有页网址
9.编写代码自动生成所有页网址
https://movie.douban.com/top250
data = 'https://movie.douban.com/top250?start%s'
for i in range(0,250,25):
print(data%i)
10.编写代码打印出下列图形(ps:for循环嵌套)
10.编写代码打印出下列图形(ps:for循环嵌套)
*****
*****
*****
*****
for i in range(4):
for j in range(5):
print("*",end='')
print()