Python如何使用循环结构和分支结构


Posted in Python onApril 13, 2022

一 引子

流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为三种结构:顺序结构(之前我们写的代码都是顺序结构)、分支结构(用到if判断)、循环结构(用到while与for)

二 分支结构

2.1 什么是分支结构

分支结构就是根据条件判断的真假去执行不同分支对应的子代码

2.2 为什么要用分支结构

人类某些时候需要根据条件来决定做什么事情,比如:如果今天下雨,就带伞

所以程序中必须有相应的机制来控制计算机具备人的这种判断能力

2.3 如何使用分支结构

2.3.1 if语法

用if关键字来实现分支结构,完整语法如下

if 条件1:   # 如果条件1的结果为True,就依次执行:代码1、代码2,......
   代码1
    代码2
    ......
elif 条件2: # 如果条件2的结果为True,就依次执行:代码3、代码4,......
   代码3
    代码4
    ......
elif 条件3: # 如果条件3的结果为True,就依次执行:代码5、代码6,......
   代码5
    代码6
    ......
else:     # 其它情况,就依次执行:代码7、代码8,......
    代码7
    代码8
    ......
# 注意:
# 1、python用相同缩进(4个空格表示一个缩进)来标识一组代码块,同一组代码会自上而下依次运行
# 2、条件可以是任意表达式,但执行结果必须为布尔类型
     # 在if判断中所有的数据类型也都会自动转换成布尔类型
       # 2.1、None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False
       # 2.2、其余均为True

2.3.2 if应用案例

案例1:

如果:女人的年龄>30岁,那么:叫阿姨

age_of_girl=31
if age_of_girl > 30:
    print('阿姨好')

案例2:

如果:女人的年龄>30岁,那么:叫阿姨,否则:叫小姐

age_of_girl=18
if age_of_girl > 30:
    print('阿姨好')
else:
    print('小姐好')

案例3:

如果:女人的年龄>=18并且<22岁并且身高>170并且体重<100并且是漂亮的,那么:表白,否则:叫阿姨**

age_of_girl=18
height=171
weight=99
is_pretty=True
if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:
    print('表白...')
else:
    print('阿姨好')

案例4:

如果:成绩>=90,那么:优秀

如果成绩>=80且<90,那么:良好

如果成绩>=70且<80,那么:普通

其他情况:很差

score=input('>>: ')
score=int(score)

if score >= 90:
    print('优秀')
elif score >= 80:
    print('良好')
elif score >= 70:
    print('普通')
else:
    print('很差')

案例5:if嵌套

#在表白的基础上继续:
#如果表白成功,那么:在一起
#否则:打印。。。

age_of_girl=18
height=171
weight=99
is_pretty=True
success=False

if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:
    if success:
        print('表白成功,在一起')
    else:
        print('什么爱情不爱情的,爱nmlgb的爱情,爱nmlg啊...')
else:
    print('阿姨好')

练习1: 登陆功能

name=input('请输入用户名字:').strip()
password=input('请输入密码:').strip()
if name == 'tony' and password == '123':
	print('tony login success')
else:
	print('用户名或密码错误')

练习2:

#!/usr/bin/env python
#根据用户输入内容打印其权限

'''
egon --> 超级管理员
tom  --> 普通管理员
jack,rain --> 业务主管
其他 --> 普通用户
'''
name=input('请输入用户名字:')

if name == 'egon':
    print('超级管理员')
elif name == 'tom':
    print('普通管理员')
elif name == 'jack' or name == 'rain':
    print('业务主管')
else:
    print('普通用户')

三 循环结构

3.1 什么是循环结构

循环结构就是重复执行某段代码块

3.2 为什么要用循环结构

人类某些时候需要重复做某件事情

所以程序中必须有相应的机制来控制计算机具备人的这种循环做事的能力

3.3 如何使用循环结构

3.3.1 while循环语法

python中有while与for两种循环机制,其中while循环称之为条件循环,语法如下

while 条件:  
	代码1
    代码2
    代码3
    ......
# while的运行步骤:
# 步骤1:如果条件为真,那么依次执行:代码1、代码2、代码3、......
# 步骤2:执行完毕后再次判断条件,如果条件为True则再次执行:代码1、代码2、代码3、......,如果条件为False,则循环终止

插图:while循环

3.3.2 while循环应用案例

案例一:while循环的基本使用

用户认证程序

#用户认证程序的基本逻辑就是接收用户输入的用户名密码然后与程序中存放的用户名密码进行判断,判断成功则登陆成功,判断失败则输出账号或密码错误
username = "jason"
password = "123"

inp_name =  input("请输入用户名:")
inp_pwd =  input("请输入密码:")
if inp_name == username and inp_pwd == password:
    print("登陆成功")
else:
    print("输入的用户名或密码错误!")
#通常认证失败的情况下,会要求用户重新输入用户名和密码进行验证,如果我们想给用户三次试错机会,本质就是将上述代码重复运行三遍,你总不会想着把代码复制3次吧。。。。
username = "jason"
password = "123"

# 第一次验证
inp_name =  input("请输入用户名:")
inp_pwd =  input("请输入密码:")
if inp_name == username and inp_pwd == password:
    print("登陆成功")
else:
    print("输入的用户名或密码错误!")

# 第二次验证
inp_name =  input("请输入用户名:")
inp_pwd =  input("请输入密码:")
if inp_name == username and inp_pwd == password:
    print("登陆成功")
else:
    print("输入的用户名或密码错误!")
    
# 第三次验证
inp_name =  input("请输入用户名:")
inp_pwd =  input("请输入密码:")
if inp_name == username and inp_pwd == password:
    print("登陆成功")
else:
    print("输入的用户名或密码错误!")

#即使是小白的你,也觉得的太low了是不是,以后要修改功能还得修改3次,因此记住,写重复的代码是程序员最不耻的行为。
#那么如何做到不用写重复代码又能让程序重复一段代码多次呢? 循环语句就派上用场啦(使用while循环实现)

username = "jason"
password = "123"
# 记录错误验证的次数
count = 0
while count < 3:
    inp_name = input("请输入用户名:")
    inp_pwd = input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        print("登陆成功")
    else:
        print("输入的用户名或密码错误!")
        count += 1

案例二:while+break的使用

使用了while循环后,代码确实精简多了,但问题是用户输入正确的用户名密码以后无法结束循环,那如何结束掉一个循环呢?这就需要用到break了!

username = "jason"
password = "123"
# 记录错误验证的次数
count = 0
while count < 3:
    inp_name = input("请输入用户名:")
    inp_pwd = input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        print("登陆成功")
        break # 用于结束本层循环
    else:
        print("输入的用户名或密码错误!")
        count += 1

案例三:while循环嵌套+break

如果while循环嵌套了很多层,要想退出每一层循环则需要在每一层循环都有一个break

username = "jason"
password = "123"
count = 0
while count < 3:  # 第一层循环
    inp_name = input("请输入用户名:")
    inp_pwd = input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        print("登陆成功")
        while True:  # 第二层循环
            cmd = input('>>: ')
            if cmd == 'quit':
                break  # 用于结束本层循环,即第二层循环
            print('run <%s>' % cmd)
        break  # 用于结束本层循环,即第一层循环
    else:
        print("输入的用户名或密码错误!")
        count += 1

案例四:while循环嵌套+tag的使用

针对嵌套多层的while循环,如果我们的目的很明确就是要在某一层直接退出所有层的循环,其实有一个窍门,就让所有while循环的条件都用同一个变量,该变量的初始值为True,一旦在某一层将该变量的值改成False,则所有层的循环都结束

username = "jason"
password = "123"
count = 0

tag = True
while tag: 
    inp_name = input("请输入用户名:")
    inp_pwd = input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        print("登陆成功")
        while tag:  
            cmd = input('>>: ')
            if cmd == 'quit':
                tag = False  # tag变为False, 所有while循环的条件都变为False 
                break
            print('run <%s>' % cmd)
        break  # 用于结束本层循环,即第一层循环
    else:
        print("输入的用户名或密码错误!")
        count += 1

案例五:while+continue的使用

break代表结束本层循环,而continue则用于结束本次循环,直接进入下一次循环

# 打印1到10之间,除7以外的所有数字
number=11
while number>1:
    number -= 1
    if number==7:
        continue # 结束掉本次循环,即本次循环continue之后的代码都不会运行了,而是直接进入下一次循环
    print(number)

案例五:while+else的使用

在while循环的后面,我们可以跟else语句,当while 循环正常执行完并且中间没有被break 中止的话,就会执行else后面的语句,所以我们可以用else来验证,循环是否正常结束

count = 0
while count <= 5 :
    count += 1
    print("Loop",count)
else:
    print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循环正常执行完啦   #没有被break打断,所以执行了该行代码
-----out of while loop ------

如果执行过程中被break,就不会执行else的语句

count = 0
while count <= 5 :
    count += 1
    if count == 3:
        break
    print("Loop",count)
else:
    print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
-----out of while loop ------ #由于循环被break打断了,所以不执行else后的输出语句

练习1:

寻找1到100之间数字7最大的倍数(结果是98)

number=100
while number>0:
    if number%7==0:
        print(number)
        break
    number-=1

练习2:

age=18
count=0
while count<3:
    count+=1
    guess = int(input(">>:"))
    if guess > age :
        print("猜的太大了,往小里试试...")
    elif guess < age :
        print("猜的太小了,往大里试试...")
    else:
        print("恭喜你,猜对了...")

3.3.3 for循环语法

循环结构的第二种实现方式是for循环,for循环可以做的事情while循环都可以实现,之所以用for循环是因为在循环取值(即遍历值)时for循环比while循环的使用更为简洁,

for循环语法如下

for 变量名 in 可迭代对象: # 此时只需知道可迭代对象可以是字符串\列表\字典,我们之后会专门讲解可迭代对象
	代码一
	代码二
    ...
    
#例1
for item in ['a','b','c']:
    print(item)
# 运行结果
a
b
c

# 参照例1来介绍for循环的运行步骤
# 步骤1:从列表['a','b','c']中读出第一个值赋值给item(item=‘a'),然后执行循环体代码
# 步骤2:从列表['a','b','c']中读出第二个值赋值给item(item=‘b'),然后执行循环体代码
# 步骤3: 重复以上过程直到列表中的值读尽

3.3.4 for循环应用案例

案例一:打印数字0-5

# 简单版:for循环的实现方式
for count in range(6):  # range(6)会产生从0-5这6个数
    print(count)
    
# 复杂版:while循环的实现方式
count = 0
while count < 6:
    print(count)
    count += 1

案例二:遍历字典

# 简单版:for循环的实现方式
for k in {'name':'jason','age':18,'gender':'male'}:  # for 循环默认取的是字典的key赋值给变量名k
    print(k)
    
# 复杂版:while循环确实可以遍历字典,后续将会迭代器部分详细介绍

案例三:for循环嵌套

#请用for循环嵌套的方式打印如下图形:
*****
*****
*****

for i in range(3):
    for j in range(5):
        print("*",end='')
    print()  # print()表示换行

注意:break 与 continue也可以用于for循环,使用语法同while循环

练习一:

打印九九乘法表

for i in range(1,10):
	for j in range(1,i+1):
		print('%s*%s=%s' %(i,j,i*j),end=' ')
	print()

练习二:

打印金字塔

# 分析
'''
#max_level=5
     *     	  # current_level=1,空格数=4,*号数=1
    ***   	  # current_level=2,空格数=3,*号数=3
   *****      # current_level=3,空格数=2,*号数=5
  *******     # current_level=4,空格数=1,*号数=7
 *********    # current_level=5,空格数=0,*号数=9

# 数学表达式
空格数=max_level-current_level
*号数=2*current_level-1
'''
# 实现:
max_level=5
for current_level in range(1,max_level+1):
	for i in range(max_level-current_level):
		print(' ',end='') #在一行中连续打印多个空格
	for j in range(2*current_level-1):
		print('*',end='') #在一行中连续打印多个空格
	print()

到此这篇关于Python执行流程控制 详情的文章就介绍到这了!

Python 相关文章推荐
Python处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 Python
django实现分页的方法
May 26 Python
python3下实现搜狗AI API的代码示例
Apr 10 Python
Python使用Shelve保存对象方法总结
Jan 28 Python
python实现维吉尼亚加密法
Mar 20 Python
python urllib爬虫模块使用解析
Sep 05 Python
5行Python代码实现图像分割的步骤详解
May 25 Python
python中format函数如何使用
Jun 22 Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
详解python polyscope库的安装和例程
Nov 13 Python
Python脚本调试工具安装过程
Jan 11 Python
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
Apr 13 #Python
python运算符之与用户交互
Apr 13 #Python
python垃圾回收机制原理分析
Apr 13 #Python
Python内置的数据类型及使用方法
Apr 13 #Python
Python Matplotlib绘制两个Y轴图像
python前后端自定义分页器
Apr 13 #Python
利用 Python 的 Pandas和 NumPy 库来清理数据
You might like
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
解析php addslashes()与addclashes()函数的区别和比较
2013/06/24 PHP
php广告加载类用法实例
2014/09/23 PHP
PHP生成唯一订单号
2015/07/05 PHP
ExtJS Grid使用SimpleStore、多选框的方法
2009/11/20 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
JS实现淘宝幻灯片效果的实现方法
2013/03/22 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
JS回调函数深入理解
2019/10/16 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
[02:56]DOTA2英雄基础教程 巨魔战将
2013/12/10 DOTA
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
django之跨表查询及添加记录的示例代码
2018/10/16 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
Structs界面控制层技术
2013/10/11 面试题
干部选拔任用方案
2014/05/26 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
计算机实训报告总结
2014/11/05 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
离职证明格式样本
2015/06/12 职场文书
四群教育工作总结
2015/08/10 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python