python流程控制

君自故乡来,应知故乡事 / 2023-05-18 / 原文

一、流程控制

控制事物的执行流程

1. 顺序结构
# 自上而下依次执行,我们前面写的代码都是顺序执行的
2. 分支结构
# 根据不同的条件执行不同的分支
3. 循环结构
# 言外之意就是重复执行

二、分支结构

1、单分支

if 条件:
    条件成立之后要执行的代码块

2、双分支

if 条件:
    条件成立之后执行的代码块
else:
    条件不成立执行的代码块

3、多分支

if 条件1:
    条件1成立之后执行的代码块
elif 条件2:
    条件1不成立,条件2成立执行的代码块
elif 条件3:
    条件1、条件2不成立,条件3成立之后执行的代码块
...
else:
    以上所有条件都不成立的话,执行的代码块 

4、if 嵌套

age = 18
height = 160
weight = 100
is_beautiful = True
is_success = False
if age < 26 and height >= 160 and weight <= 100 and is_beautiful:
    print('小姐姐,能否给个微信?')
    if is_success:
        print('吃饭,看电影...')
        if True:
            if False:
                ...
    else:
        print('滚蛋吧,下一个更好')
else:
    print('认错人了')

三、循环结构

1、while 循环

while 条件:
    条件成立之后执行的循环体

2、while + break (跳出本层循环)

count = 0
while count < 3:
    # 1. 先让用户输入用户名和密码
    username = input('username>>>:')
    password = input('password>>>:')  # password: str---->123

    password = int(password)  # 只能转数字类型的
    # 2. 比较用户名和密码
    # 在python中,==比较值大小和类型
    # if username == 'kevin' and password == '123':
    if username == 'kevin' and password == 123:
        print('登录成功')
        break  # 调出while循环,它是跳出本层循环
    else:
        print('登录失败')

3、while + continue

#循环打印出0-9之间的数字,但是不打印6
count = 0
while count < 10:
    if count == 6:
        count+=1
        continue  # 是调出本次循环
    print(count)
    count += 1

4、while + else

count = 0
while count < 10:
    if count == 3:
        break
    print(count)
    count += 1
else:
    print('嘿嘿嘿')
    
# 当while循环内没有被人为中断(break)的时候,会执行else语句

5、标志位

在复杂的程序中,很多不同的事件都会导致程序停止运行;在这种情况下,该怎么办呢?

例如,在游戏中,多种事件都可能导致游戏结束,如玩家一艘飞船都没有了或要保护的城市都被摧毁了。导致程序结束的事件有很多时,如果在一条 while 语句中检查所有这些条件,将既复杂又困难。在要求很多条件都满足才继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量被称为标志 ,充当了程序的交通信号灯。你可让程序在标志为 True 时继续运行,并在任何事件导致标志的值为 False 时让程序停止运行。这样,在 while 语句中就只需检查一个条件 —— 标志的当前值是否为 True ,并将所有测试(是否发生了应将标志设置为 False 的事件)都放在其他地方,从而让程序变得更为整洁。

下面来在前一节的程序 parrot.py 中添加一个标志。我们把这个标志命名为 active (可给它指定任何名称),它将用于判断程序是否应继续运行:

active = True
while active:
    mes = input('请输入 q 退出程序:')
    if mes == 'q':
        active = False
    else:
        print(mes)

标志位的使用

flag = True
while flag:
    # 1. 先让用户输入用户名和密码
    username = input('username>>>:')
    password = input('password>>>:')  # password: str---->123

    password = int(password)  # 只能转数字类型的
    # 2. 比较用户名和密码
    # 在python中,==比较值大小和类型
    # if username == 'kevin' and password == '123':
    if username == 'kevin' and password == 123:
        print('登录成功')
        while flag:
            cmd = input('请输入你的指令:')
            print('正在执行你的指令: %s' % cmd)

            '''如果输入的是q,就退出整个程序'''
            if cmd == 'q':
                flag = False
    else:
        print('登录失败')

2、for 循环

for循环能做的事情,while循环都能够做
for循环代码更加简介,另外,它不会出现死循环

# 请听题:
name_list = ['kevin', 'tank', 'jason', 'tony']
# 循环取出列表中每一个人名
for name in name_list:
    print(name)
    
"""
	语法格式:
		for 变量名 in 可迭代对象: # 可迭代对象:可循环的对象,字符串、列表、字典、元组等
			print()
		当你的变量名没有合适的名字可叫的时候,你可以采用i,j,k,v,item等代替
"""

# 字典报出来的是字段的K
# 循环打印字段的k和v
d =  {"username":'kevin', "age":18}
for i in d:
    print(i, d[i])

3、range关键字

for i in range(1, 10, 2):  # 如果有三个参数,意思是:从1到10的整数,步长为2
  print(i)

range在不同版本解释器中的区别

在python2中直接打印出结果

在python3中做了优化,把它变成了迭代器, 就是节省内存资源

>>> range(1,10)
range(1, 10)

4、for+break

for i in range(10):
    if i == 3:
        break
    print(i)

5、for+continue

for i in range(10):
    if i == 3:
        continue
    print(i)

此处注意与while中的continue的区别

6、for+else

for i in range(10):
    if i == 3:
        break
    print(i)
else:
    print('嘿嘿')

四、练习

1、while 循环嵌套的应用

# 1. 先定义一个真实的年龄
real_age = 20
count = 0
while True:
    # 我们在这里判断count 的值是否为3
    if count == 3:
        # 询问它是否还基础猜
        choice = input('你已经输错三次了,是否还继续玩(yes/no)?')
        # 判断
        if choice == 'yes':
            count = 0
        else:
            print('玩的开心')
            break
    # 2. 让用户输入猜的年龄
    guess_age = input('请输入你猜的年龄:') # str,不能直接进行做比较,要把字符串的类型转为整型 int
    guess_age = int(guess_age)
    # 3. 开始比较
    if guess_age > real_age:
        print('猜大了')
        count += 1
    elif guess_age < real_age:
        print('猜小了')
        count += 1
    else:
        print('猜对了,宝宝')
        break

2、for循环嵌套打印九九乘法表

for i in range(1, 10):
    for j in range(1, i + 1):
        print('{}*{}={}'.format(i, j, i * j), end=' ')  # end=' '打印每一组的间隔
    print()  # print输出中end='\n',默认是换行