Python基础之流程控制

流程控制

【1】流程控制语句介绍

  • 程序是由语句构成,而流程控制语句 是用来控制程序中每条语句执行顺序的语句。

【2】顺序结构

  • 顺序结构是指按照代码书写的顺序,一条语句接着一条语句执行,没有跳过、重复或其他特殊的结构。

    image-20231128205014269

【3】分支结构

(1)单分支结构(if)

if+条件1 :
    换行 执行内容 # 条件1如果为真
结束

# 条件1如果为假则跳过if语句,执行后续的代码

(2)双分支结构(ifelse)

if+条件1 :
    执行内容1 # 条件1如果为真,则执行内容1(条件正确的情况下执行的内容)
else:
    执行内容2 # 条件1如果为假,则执行内容2(条件错误的情况下执行的内容)
    
# 示例
age = 16
if age > 18 :
    print('你已经成年啦!')
else:
    print('你还没有成年,请享受青春~')
# 输出 你还没有成年,请享受青春~
# 因为age并没有大于18,所以条件为假,所以打印这段话

(3)多分支结构(if-elif-else)

if+条件1 :
    执行内容1 # 条件1如果为真,则执行内容1(条件正确的情况下执行的内容)
elif+条件2 :
    执行内容3 # 条件1为假,而条件2为真,则执行条件2下的执行内容3
else:
    执行内容2 # 除条件1,条件2所描述的其他索引情况均执行内容2(条件错误的情况下执行的内容)


# 示例
age = 18
if age > 18:
    print('你已经成年了!')
elif age == 18:
    print('你刚刚迈入了成年人的世界!')
else:
    print('你还没有成年,请享受青春~')
    
# 输出 你刚刚迈入了成年人的世界!
# age=18 ,并不满足条件1(大于18),但是满足条件2(等于18),故输出执行内容3

(4)多层嵌套结构

  • 多层嵌套结构是将多个分支结构嵌套在一起形成的复杂结构。
  • 每一层的分支结构都可以根据不同的条件进行选择性的执行。
  • 多层嵌套结构的使用需要注意代码的可读性和维护性。

实例练习 1

# 定义一个字典 {'key':'value'} ---> 多用户登录功能
# 两个输入框 --- > 用户名和密码
# ---> 用户名和密码是否正确
# 正确 :登陆成功
# 失败 : 再输一次
# 再失败 : 登录失败

个人答案(萌新一枚,供大伙批评指教)

# 定义用户登录密码
user_login = {'user': '001', 'lea4ning': '123', 'zwq': '456'}
# 用户输入用户名和密码
input_username = input('请输入用户名:>>>')
input_userPwd = input('请输入密  码:>>>')
# 程序进行运算
# 程序1 检查是否在库中,如果不在,提示重新赋值
if input_username not in user_login:  # 如果输入的用户名不在用户库中,输出‘用户不存在’
    print("用户不存在,请重新输入:>>>>")
    input_username = input('请输入用户名:>>>')    # 重新输入用户名,程序重新为用户名赋值
# 程序2 赋值正确则校验密码,若密码错误重新赋值
if input_username in user_login:    # 用户名重新赋值若正确,进入校验阶段
    if input_userPwd != user_login[input_username]:    # 校验输入的密码,错误的情况重新输入
        print("密码输入错误,请重新输入:>>>")
        input_userPwd = input('请输入密  码:>>>')    # 重新赋值密码
else:
    print("用户名不存在,请检查后重试~")
# 程序3 重新赋值内容正确,则输出登录成功
if input_userPwd == user_login.get(input_username):    # 校验重新输入的密码,正确的情况,输出登录成功
    print("密码输入正确")
    print(f"登录成功~欢迎{input_username}光临~")
else:
    print("登录失败!请检查后重启~")    # 密码经过第二遍赋值依旧错误,将输出登录失败

实例练习 2

# 使用字典模拟多用户登录功能 --- 多用户登录查看内容功能
# 字典格式 : {'key':'value'}
# 定义一个字典 : 用户登录和密码{'username':"password"}
# 定义一个字典 : 字典中放 对应用户的全部信息 比如这个用户的 年龄/爱好/性别/身高
# 两个输入框 --- > 可以输入用户名和密码
# 比对用户名和密码是否正确
# 用户校验正确 :登陆成功 并打印当前用户除 密码以外的其他信息
# 用户校验失败 :再输一次
# 再失败 : 登录失败,退出程序

个人答案(萌新一枚,供大伙批评指教)

# 定义字典
user_login = {'user': '001', 'lea4ning': '123', 'zwq': '456'}
user_info = {'user': {'age': 18, 'sex': 'man', 'hobby': 'run', 'height': 170},
             'lea4ning': {'age': 20, 'sex': 'man', 'hobby': 'badminton', 'height': 175},
             'zwq': {'age': 22, 'sex': 'superman', 'hobby': 'code', 'height': 180}
             }
# 设置输入
input_username = input('请输入用户名:>>>')
input_userPwd = input('请输入密  码:>>>')
# 程序输出
if input_username not in user_login:  # 如果输入的用户名不在用户库中,输出‘用户不存在’
    print("用户不存在,请重新输入:>>>>")
    input_username = input('请输入用户名:>>>')
if input_username in user_login:
    if input_userPwd != user_login[input_username]:
        print("密码输入错误,请重新输入:>>>")
        input_userPwd = input('请输入密  码:>>>')
if input_userPwd == user_login[input_username]:
    print("密码输入正确")
    print(f"""欢迎{input_username}登录,以下为您的信息
        用户姓名:{input_username}
        用户年龄:{user_info[input_username]['age']}岁
        用户性别:{user_info[input_username]['sex']}
        用户爱好:{user_info[input_username]['hobby']}
        用户爱身高:{user_info[input_username]['height']}cm
        """)
else:
    print("登录失败,请检查后重试~")

【4】循环结构

  • 循环结构是一种程序控制结构,用于反复执行一组语句,直到满足某个条件为止。

(1)while循环

语法

while condition:
    # 循环体
  • while 是循环的关键字。

  • condition 是循环的条件,当条件为真时,循环体会一直执行。

  • 循环体是需要重复执行的代码块。

    while True:
        print('nice')
    # 此处while循环为死循环,因为True条件一直为真,故print('nice')一直运行
    while 当条件为真时:
        持续执行代码块,除非条件出现变化,或者使用break函数
    

(2)for循环

语法

for variable in sequence:
    # 循环体
  • for 是循环的关键字。
  • variable 是循环变量,它会在每次循环中取 sequence 中的一个值。
  • sequence 是一个序列,可以是列表、元组、字符串等。
for i in [1, 2, 3, 4]:    # list
    print(i)
# 1 2 3 4  会按顺序提取列表[1,2,3,4]中的值
for i in (1, 2, 3, 4):    # tuple
    print(i)
# 1 2 3 4  会按顺序提取元组(1,2,3,4)中的值
for i in 'learn':    # str
    print(i)
# l e a r n 会按顺序提取字符串'learn'中的值

# 因为列表、元组、字符串都是可以通过下标索引提取内容

(3)退出循环

break:退出

1、语法
while condition:
    # 循环体
    if some_condition:
        break  # 退出循环
2、实例参考
username = "user"
password = "123"
count = 0
while count < 3:  # 第一层循环
    inp_name = input("请输入用户名:")
    inp_pwd = input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        # 此处break内容解释,当用户名密码输入正确后,
        # 首先输出‘登录成功’,然后就可以通过break解除第一层循环
        print("登陆成功")
        while True:  # 第二层循环
            # 此处额外套入一层循环,且在第一层循环结束的break前,
            # 故需要先结束第二层循环才可以进行第一层循环的结束
            cmd = input('>>: ')
            if cmd == 'quit':
                break  # 用于结束本层循环,即第二层循环
            print(f'run <{cmd}>')
        break  # 用于结束本层循环,即第一层循环
    else:
        print("输入的用户名或密码错误!")
        count += 1

'''
如果没有进行循环的结束,将会在第二层循环结束后,继续进行第一层循环,重新输入用户名
'''

continue

1、语法
while condition:
    # 循环体
    if some_condition:
        continue  # 跳过当前循环,继续下一次循环
2、实例参考
count = 0

while count < 5:
    count += 1
    if count == 3:
        print(f'已跳过{count}')
        continue  # 当 count 等于 3 时,跳过当前循环,继续下一次循环
    print(count)
'''输出:
1
2
已跳过3
4
5
''' 

(4)标志位

  • 自定义一个变量作为标志位
flag = True  # 初始化标志位
while flag:
    # 循环体
    if some_condition:
        flag = False  # 修改标志位,退出循环   
flag = True    # 标志位
count = 0    # 计数器
while count < 5 and flag:    # and 关键字连接的条件与标志位
    count += 1    # count每完成一次循环+1
    if count == 3:
        print(f"{count}:逢三归一")
        flag = False
    print(count)
    
# 输出:1 2 3:逢九归一 3
'''正常情况<5的数,有[1,2,3,4],
此处打印至3时,flag的值被变更为False,
and关键字关联的条件中有一方为False,则条件变为False,循环中止'''

(5)循环分支

while 条件:
    循环体
else:
    循环正常执行完毕且没被break关键字中止,将执行else语句下的内容
    如果执行过程被break关键字中止,将不会执行else语句
count = 0  # 计数器
while count < 3:
    count += 1  # count每完成一次循环+1
    print(count)    # 当count=3时,与循环语句<3不符,故循环结束
else:
    print('循环结束')
# 1 2 3 循环结束

(6)range关键字

#基本语法
for i in range(start, stop, step):
    # 循环体
# start 为起始内容
# stop 为终止内容
# step 为步长
# start 起始内容 
# 默认为0,且需要与stop成对使用,单独不可用

# stop 终止的内容
# 可单独使用
for i in range(3):    # for i in range(0,3)
    print(i)          # 0 1 2

# step 步长
# start与stop以step为间隔数,默认值为1
for i in range(1, 6):
    print(i)    # 1 2 3 4 5
    
for i in range(1, 6, 1):
    print(i)   # 1 2 3 4 5

for i in range(1, 6, 2):
    print(i)   # 1 3 5
# 若step设为0,将会报错【ValueError: range() arg 3 must not be zero】
  • 补充
# range + len 遍历序列
# 原理便是通过len()函数可以提取出序列的长度,而长度可以对应stop的值

list1 = [1,2,3]
for i in range(len(list1)):    # for i in range(0,3):
    print(list1[i])            # i的值为0 1 2 对应至list1[0],list1[1],lis1[2]
# 通过range()创建序列
list2 = list(range(1,4))    # list强转(range的值为(1,2,3))
print(list2)
# [1,2,3]

实例练习 1 (while循环分支嵌套)

# 登录功能
# ---> 存储 字典存储用户的登录信息
# 输入框输入 用户名和密码
# 可以尝试 3 次 ----> 用户名或密码错误的话就要重新输入了!
# 第一次的时候告诉你还有两次
# 最后一次的时候告诉你还愿意继续尝试吗?
# 如果选择继续尝试的话 ---> 继续尝试

个人答案(萌新一枚,供大伙批评指教)

user_info = {'user': '001'}  # 存储信息
count = 3  # 计数器
tag = True  # 标志符
# 进入循环
while count > 0 and tag:    # 当剩余次数不为1时,执行循环
    count -= 1    # 作为次数的计数期,执行一次,次数减1
    input_name = input("请输入用户名:>>>>")
    input_pwd = input("请输入密 码:>>>>")
    if input_name in user_info and input_pwd == user_info.get(input_name):   # 校验用户名和密码,正确直接退出
        print(f"欢迎{input_name}登录~祝您有美好的一天~")
        break
    else:
        print("用户名或密码有误,请检查后重新输入!")
        print(f"还有{count}次机会,请仔细检查~")    # 输入错误直接结束后续判断,重新输入用户名和密码
        if count == 0:    # 当次数归零,询问是否重新尝试
            answer = input("次数已经用完,请选择是否重试:y/n")
            if answer == 'y':    # 如果选择继续,将count的值重新添加至3次机会
                count = 3
            else:
                print("下次再见~")

posted @ 2023-12-06 14:44  Lea4ning  阅读(16)  评论(0编辑  收藏  举报