流程控制

流程控制

在现实生活中,我们做的每件事也是有一定流程去执行

流程控制基础

顺序结构流程

按照从上到下语句依次执行

print('开始')
name = input('输入姓名')
print(name)
print('结束')

image

分支结构流程

分条件执行

单分支

# if 判断条件:
	# 制表符 代码片段

age = input('请输入年龄')
age = int(age)  # int() 强制转换数据类型但是只能转换字符型数字
if age<28:
    print('小姐姐')

image

双分支

# if 判断条件:
#	代码块
# else:
#	代码块
age = input('请输入年龄')
age = int(age)  # int() 强制转换数据类型但是只能转换字符型数字
if age<28:
    print('小姐姐')
else:
    print('老北鼻')
    

image

多分支

# 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('不及格')

image

循环结构流程

while循环

#  while 判断语句:  # 如果成立者向下执行
#		代码
#  会一直输出看妹子

while 1:
    print('看妹子,看妹子')

image
image

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立即结束本次循环

image

image

while else 循环

name = input('请输入姓名')
while name == '张三':
    print(name)
else:
    print('你是谁啊')

image

image

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='')
posted @ 2022-09-28 16:36  clever-cat  阅读(69)  评论(0编辑  收藏  举报