python流程控制

一、流程控制

控制事物的执行流程

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])

补充for循环原理

获取可迭代对象:首先,for循环会获取要遍历的可迭代对象。可迭代对象是指实现了__iter__方法的对象,或者是序列类型(如列表、元组、字符串)。

获取迭代器:通过调用可迭代对象的__iter__方法,for循环会获取一个迭代器(iterator)。迭代器是实现了__next__方法的对象,它负责迭代遍历可迭代对象的每个元素。

迭代遍历:for循环会重复调用迭代器的__next__方法,每次获取可迭代对象的下一个元素。这个过程会持续直到迭代器抛出StopIteration异常,表示没有更多的元素可迭代。

执行循环体:在每次迭代中,for循环会将迭代器返回的元素赋值给循环变量(如for item in iterable中的item),然后执行循环体中的代码块。循环体中的代码会针对每个元素进行重复执行。

循环控制:在每次循环迭代之后,for循环会自动处理循环控制,即判断是否继续迭代。如果迭代器已经抛出StopIteration异常,或者循环体内部使用了break语句,循环会终止,否则会继续迭代。

总结起来,for循环通过获取可迭代对象和迭代器,并重复调用迭代器的__next__方法来遍历可迭代对象的元素。循环体内的代码会针对每个元素进行执行,直到迭代完成或循环被终止。这种迭代遍历的机制使得for循环在处理可迭代对象时非常方便和简洁。

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 下面的if语句被匹配执行,break 人为中断,else

# 验证账号密码是否存在
        with  open('/Users/sanpangdan/Desktop/python_fullstack/zm.txt', 'r', encoding='utf-8') as f:
            for name  in  f:
                if username == name.split('|')[0]:
                    print('用户名已存在,请换一个名字注册')
                    break
            else:
                res = '%s|%s\n' % (username, passwd)  # 将账号密码做一个格式化赋值
                with open('/Users/sanpangdan/Desktop/python_fullstack/zm.txt', 'a', encoding='utf-8') as f1:
                    f1.write(res)  # 将账号密码存入文本文件
                    print('{}注册成功!'.format(username))

四、练习

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',默认是换行

关键:分行与列考虑,共9行9列,i控制行,j控制列。

 

 

posted @ 2023-05-18 14:47  凡人半睁眼  阅读(47)  评论(0编辑  收藏  举报