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、
for i in range(1, 10, 2): # 如果有三个参数,意思是:从1到10的整数,步长为2 print(i)
range在不同版本解释器中的区别
在python2中直接打印出结果
在python3中做了优化,把它变成了迭代器, 就是节省内存资源
>>> range(1,10) range(1, 10)
4、
for i in range(10): if i == 3: break print(i)
5、
for i in range(10): if i == 3: continue print(i)
此处注意与while中的continue的区别
# 验证账号密码是否存在 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控制列。