当前位置: 首页 > news >正文

Python基础学习(四)程序控制结构

代码获取:https://github.com/qingxuly/hsp_python_course
完结版:Python基础学习完结版

程序控制结构

程序流程控制介绍

基本介绍
  1. 程序流程控制绝对程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。
  2. 顺序控制、分支控制、循环控制。

顺序控制

基本介绍
  1. 顺序控制:程序从上到下逐行地执行,中间没有任何判断和跳转。
# 顺序控制
print("程序开始执行")
print("1.小明去上学")
print("2.小明学习中")
print("3.小明放学了")
print("策划给你续执行结束")# Python中定义变量时采用合法的前向引用
num1 = 12
num2 = num1 + 2

分支控制 if-else

基本介绍
  1. 让程序有选择的执行,分支控制有三种:单分支、双分支、多分支。
单分支
  1. 基本语法:单分支是通过 if 语句来实现的,if 语句的基本语法如下:
if 条件表达式:代码块(可以有多条语句)
  1. if 基本语法说明:
  • 当条件表达式为 True 时,就会执行代码块;如果为 False,就不执行。
  • Python 缩进非常重要,是用于界定代码块的,相当于其他编程语言中的大括号{}。
  • 最短的缩进对较长的有包含关系,缩进前后没有要求,但是每个代码块应具有相同的缩进长度(TAB 或者相同个数的空格)。
  • 可以看成,和其它语言相比:其它语言的代码块是用{}表示的,Python 缩进就代替了{}。
# 单分支 if
if 4 < 1:print("ok1")print("ok2")
print("ok3")if 100 > 20:print("ok4")print("ok5")if 8 > 2:print("ok6")
  1. 练习
# 请编写一个程序,可以输入人的年龄,如果年龄大于等于18岁,则输出“你年龄大于等于18,要对自己的行为负责”
age = int(input("请输入你的年龄:"))
if age >= 18:print("你年龄大于等于18,要对自己的行为负责")
  1. 流程图

image-20240610114159798

双分支
  1. 基本语法
if 条件表达式:执行代码块1
else:执行代码块2
  1. 基本语法说明
  • if、else 是关键字,是规定好的。
  • 当条件表达式成立,即执行代码块 1,否则执行代码块 2,注意;不要少写了冒号:。
  1. 应用实例
# 请编写一个程序,可以输入人的年龄,如果年龄大于等于18岁,则输出“你年龄大于等于18,要对自己的行为负责”。否则,输出“你的年龄不大,这次放过你了”
age = int(input("请输入你的年龄:"))
if age >= 18:print("你年龄大于等于18,要对自己的行为负责")
else:print("你的年龄不大,这次放过你了")
  1. 流程图

image-20240610115003222

  1. 练习
# 对下列代码,若有输出,指出输出结果
x = 4
y = 1
if x > 2:if y > 2:print(x + y)print("hsp")
else:print("x is", x)
# 编写程序,定义2个整数变量并赋值,判断两数之和,如果大于等于50,打印“hello world”
num1 = 30
num2 = 20
if num1 + num2 >= 50:print("hello world")
# 编写程序,定义2个float型变量,若果第1个数大于10.0,且第2个数小于20.0,打印两数之和
num1 = 20.0
num2 = 15.0
if num1 > 10.0 and num2 < 20.0:print(f"{num1} + {num2} = {num1 + num2}")
# 定义两个变量int类型,判断二者之和,是否能被3又能被5整除,打印提示信息。
num1 = 10
num2 = 5
if (num1 + num2) % 3 == 0 and (num1 + num2) % 5 == 0:print(f"{num1 + num2} 可以被3又能被5整除")
else:print(f"{num1 + num2} 不可以被3又能被5整除")
# 判断一个年份是否是闰年,闰年的条件是符合下面二者之一:(1)年份能被4整除,但不能被100整除(2)能被400整除
year = 2024  
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:print(f"{year} 是闰年")
else:print(f"{year} 不是闰年")
多分支
  1. 基本语法
if 条件表达式1:执行代码块1
elif 条件表达式2:执行代码块2
...
else:执行代码块n+1
  1. 流程图

image-20240610133740836

  • 执行流程说明
    • 当条件表达式 1 成立时,即执行代码 1。如果表达式 1 不成立,才去判断表达式 2 是否成立。
    • 如果表达式 2 成立,就执行代码块 2。
    • 以此类推,如果所有的表达式都不成立则执行 else 的代码块。
    • 只能有一个执行入口。
  1. 案例演示
# 参加Python考试,根据得分获得对应奖励
score = int(input("请输入成绩[整数]:"))
if score >= 0 and score <= 100:if score == 100:print("BWM")elif score > 80 and score <= 99:print("iphone13")elif score >= 60 and score <= 80:print("ipad")else:print("none")
else:print(score, "不在0~100")
# 分析代码输出结果
b = True
if b == False:print("a")
elif b:print("b")
elif not b:print("c")
else:print("d")
  1. 练习
# 婚嫁
height = float(input("请输入身高(cm):"))
money = float(input("请输入财富(万):"))
handsome = (input("请输入颜值(帅,不帅):"))if height > 180 and money > 1000 and handsome == "帅":print("我一定要嫁给他")
elif height > 180 or money > 1000 or handsome == "帅":print("嫁吧,比上不足,比下有余")
else:print("不嫁")

嵌套分支

基本介绍
  1. 基本介绍
  • 嵌套分支:在一个分支结构中又嵌套了另一个分支结构。

  • 里面的分支的结构称为内层分支,外面的分支结构称为外层分支。

  • 规范:不要超过 3 层(可读性不好)

  1. 基本语法
if:if:# if-else...else:# if-else...
应用案例
# 参加歌手比赛,若果初赛成绩大于8.0进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组。输入成绩和性别,进行判断和输出信息。
score = float(input("请输入你的成绩:"))
if score > 8.0:gender = input("请输入你的性别(男|女):")if gender == "男":print("男子组决赛")else:print("女子组决赛")
else:print("淘汰")
# 出票系统:根据淡旺季的月份和年龄,打印票价
month = int(input("请输入当前的月份:"))
age = int(input("请输入你的年龄:"))if 4 <= month <= 10:if age > 60:print("¥20")elif age >= 18:print("¥60")else:print("¥30")
else:if 18 <= age <= 60:print("¥60")else:print("¥20")

for 循环分支

基本介绍
  1. 基本介绍:for 循环听其名而知其意,就是让你的代码可以循环的执行,是通过 for 语句来实现的。

  2. 基本语法

for <变量> in <范围/序列>:<循环操作语句>
  1. for 基本语法说明
  • for、in 是关键字,是规定好的。
  • <范围/序列> 可以理解成要处理的数据集,需要是可迭代对象(比如字符串,列表等…)。
  • 循环操作语句,这里可以有多条语句,也就是我们要循环执行的代码,也叫循环体。
  • python 的 for 循环是一种“轮询机制”,是对指定的数据集,进行“轮询处理”。
for 循环执行流程分析
  1. 代码演示
# 编写一个程序,可以打印5句 “hsp” 。
# 定义一个列表(后面详细介绍),可以视为一个数据集
nums = [1, 2, 3, 4, 5]
print(nums, type(nums))for i in [1, 2, 3, 4, 5]:print("hsp", i)for i in nums:print("hsp", i)
  1. for 循环控制流程图

image-20240610143507571

  1. 代码执行内存分析法

image-20240610144559091

注意实现和细节说明
  1. 循环时,依次将序列中的值取出赋给变量。
  2. 如需要遍历数字序列,可以使用内置 range()函数,它会生成数列。range()生成的数列是前闭后开。
# range函数解读
class range(stop)
class range(start, stop, step=1)
# 1、虽然被称为函数,但 range 实际上是一个不可变的序列类型。
# 2、range 默认增加的步长 step是1,也可以指定,start 默认是0。
# 3、通过list() 可以查看range() 生成的序列包含的数据。
# 4、range() 生成的数列是前闭后开。
# 1、生成一个 [1, 2, 3, 4, 5]
r1 = range(1, 6, 1)
r1 = range(1, 6)
print("r1 = ", list(r1))# 2、生成一个 [0, 1, 2, 3, 4, 5]
r2 = range(0, 6, 1)
r2 = range(0, 6)
print("r2 = ", list(r2))# 3、生成一个 r3 =  [1, 3, 5, 7, 9]
r3 = range(1, 10, 2)
print("r3 = ", list(r3))# 4、输出10句"hello, python"
for i in range(10):print("hello, python")

3、for 可以和 else 配合使用

  • 语法格式
for <variable> in <ssequence>:<statements>
else:<statements>
  • 解读:什么情况下会进入 else,就是 for 循环正常的完成遍历,在遍历过程中,没有被打断(解释:比如没有执行到 break 语句)。
# for-else案例
nums = [1, 2, 3]
for i in nums:print("hsp")# 演示break# if i == 2:#     break  # 中断-提前结束for
else:print("没有循环数据了...")
练习
# 以下代码输出什么
languages = ["c", "c++", "java", "python"]
for language in languages:print(language)

while 循环分支

基本语法
  1. 基本介绍:while 循环用于在表达式为真的情况下,重复的(循环的)执行,是通过 while 语句来实现的。
  2. 基本语法
while 判断条件(condition):循环操作语句(statements)...
  1. 基本语法说明
  • while 是关键字,是规定好的。
  • 当判断条件为 True 时,就执行循环操作语句,如果为 False,就退出 while。
  • 循环操作语句,这里可以有多条语句,也就是我们要循环执行的代码,也叫循环体。
while 循环执行流程分析
  1. 代码演示
# 使用while完成10句 “hsp”
i = 1
while i <= 10:print("hsp")i += 1
  1. while 循环控制流程图

image-20240610180701275

  1. 代码执行内存分析法

image-20240610181514324

注意事项和细节说明
  1. while 可以和 else 配合使用
  • 语法格式
while 判断条件(condition):循环操作语句(statements)
else:其它语句<additional_statements(s)>
  • 解读:在 while … else 判断条件为 false 时,会执行 else 的语句块,即:在遍历过程中,没有被打断(解释:比如没有执行到 break 语句)。
  1. 使用案例
# while-else使用案例
i = 0
while i < 3:print("hsp")i += 1# 演示break 中断# if i == 1:#     break
else:print("i < 3 不成立 i =", i)
练习
# 1、打印 1-100 之间所有能被3整除的数
i = 1
max_num = 100
while i <= max_num:if i % 3 == 0:print(i)i += 1
# 2、打印 40-200 之间所有的偶数
i = 40
max_num = 200
while i <= max_num:if i % 2 == 0:print(i)i += 1
# 3、不断输入姓名,知道输入“exit”为止
name = ""
while name != "exit":name = input("Enter your name: ")print("输入的内容是:", name)
# 4、打印 1~100 之间所有是9的倍数的整数,统计个数及总和
i = 1
max_num = 100
count = 0
sum = 0while i <= max_num:if i % 9 == 0:print(i)count += 1sum += ii += 1
print("count:", count)
print("sum:", sum)
# 5、完成下列表达式输出
num = int(input("请输入一个整数:"))
i = 0
while i <= num:print(f"{i} + {num - i} = {num}")i += 1

多重循环控制

基本介绍
  1. 基本介绍
  • 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for、while 均可以作为外层循环和内层循环。[建议一般使用两层,最多不要超过三层,否则,代码的可读性不好]。
  • 实际上,嵌套循环就是把内层循环当做外层循环的循环体。
  • 如果外层循环次数为 m 次,内层为 n 次,则内层循环体实际上需要执行 m*n 次。
# 如果外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。
for i in range(2):for j in range(3):print("i=", i, "j=", j)
应用案例
  • 编程思想:化繁为简,先死后活。
  1. 打印空心金字塔
# 打印空心金字塔
"""
思路分析- 先死后活1、先不考虑层数的变化,嘉定就是5层,后面做活- 化繁为简1、打印矩形2、打印直角三角形3、打印金字塔4、打印空心金字塔
"""
# 总层数
total_level = 5
# i 控制层数
for i in range(1, total_level + 1):# k 控制输出空格数for k in range(total_level - i):print(" ", end="")# j 控制每层输出的*号个数for j in range(2 * i - 1):if j == 0 or j == 2 * i - 2 or i == total_level:print("*", end="")else:print(" ", end="")# 每层输出后,换行print("")
  1. 打印空心菱形
# 空心菱形
n = 5
for i in range(n):if i == 0:print(" " * (n - i - 1) + "*" * (2 * i + 1))else:print(" " * (n - i - 1) + "*" + " " * (2 * i - 1) + "*")
for i in range(n - 2, -1, -1):if i == 0 or i == n - 1:print(" " * (n - i - 1) + "*" * (2 * i + 1))else:print(" " * (n - i - 1) + "*" + " " * (2 * i - 1) + "*")
  1. 使用 while 循环来实现空心金字塔
# while实现空心金字塔
i = 0
n = 5
while i < n:if i == 0 or i == n - 1:print(" " * (n - i - 1) + "*" * (2 * i + 1))else:print(" " * (n - i - 1) + "*" + " " * (2 * i - 1) + "*")i += 1
  1. 统计班级情况
"""
统计3个班成绩情况,每个班有5名同学,要求:
1、求出每个班的平均分和所有班的平均分,学生的成绩从键盘输入
2、统计三个班及格人数编程思想:(1)化繁为简(2)先死后活【先考虑3个班,每个班5名同学】
# 化繁为简
1. 先统计1个班成绩情况,求出一个班的平均分
2. 统计3个班成绩情况,求出各个班的平均分、所有班级的平均分和 及格人数
"""total = 0.0
pass_num = 0
class_num = 3
student_num = 5
# 循环地处理3个班级的成绩
for j in range(class_num):# 统计一个班成绩情况sum = 0.0for i in range(student_num):score = float(input(f"请输入第{j + 1}班的 第{i + 1}个学生的成绩:"))# 判断是否及格if score >= 60.0:pass_num += 1sum += scoreprint(f"第{j + 1}班级的情况:平均分{sum / 5}")total = total + sum
print(f"所有班级的平均分 {total / (student_num * class_num)},及格人数 {pass_num}")
  1. 打印九九乘法表
# 九九乘法表
for i in range(1, 10):for j in range(1, i + 1):print(f"{j} * {i} = {i * j}", end="\t")print()

break 语句

基本介绍
  1. 基本介绍
  • break 语句用于终止某个语句块的执行,使用在循环中
  1. 基本语法
...
break
...
  1. break 语句流程图

image-20240612124106922

快速入门
# 随机生成 1-100 的一个数,直到生成了97这个数,看看一共用了多少次
# random.randint(a, b) 返回随机整数N满足 a<=N<=b。相当于randrange(a, b+1)
import randomcount = 0
while True:count += 1n = random.randint(1, 100)print(n)if n == 97:break
print("count =", count)
注意实现和细节说明
  1. break 语句是用在 for 或 while 循环所嵌套的代码。
  2. 它会终结最近的外层循环,如果循环有可选的 else 子句,也会跳过该子句。
  3. 如果一个 for 循环被 break 所终结,该循环的控制变量会保持其当前值。
# 它会终结最近的外层循环,如果循环有可选的else子句,也会跳过该子句。
count = 0
while True:print("hi")count += 1if count == 3:breakwhile True:print("ok")break
else:print("hello")# 如果一个for循环被break所终结,该循环的控制变量会保持其当前值。
nums = [1, 2, 3, 4, 5]
for i in nums:if i > 3:break
print("i =", i)
练习
  1. 1 - 100 以内的求和,求出当和第一次大于 20 的当前控制循环的变量是多少。
sum = 0
for i in range(1, 101):sum += iif sum > 20:break
print(i)
  1. 实现登录验证,有三次机会,如果用户名为“张无忌”,密码“888” 提示登录成功,否则提示还有几次机会。
change = 3
for i in range(1, 4):name = input("请输入你的姓名:")passwd = int(input("请输入你的密码:"))change -= 1if name == "张无忌" and passwd == 888:print("登录成功")breakelse:print(f"姓名或密码错误,还有{3 - i}次机会")

continue 语句

基本介绍
  1. 基本介绍
  • continue 语句用于 for 或 while 循环所嵌套的代码中。
  • continue 语句用于结束本次循环,继续执行循环的下一次轮次。继续执行的是:该 continue 最近的外层循环的下一次轮次。
  1. 基本语法
...
continue
...
  1. continue 语句流程图

image-20240613123650312

快速入门
# 下面代码输出结果是什么
i = 1
while i <= 4:i += 1if i == 3:continueprint("i =", i)

image-20240613124615091

练习
  1. 请分析下面的代码输出结果是什么。
for i in range(0, 13):if i == 10:continueprint("i =", i)
for i in range(0, 2):for j in range(1, 4):if j == 2:continueprint("i =", i, "j =", j)

return 语句

基本介绍
  1. 基本介绍
  • return 使用在函数,表示跳出所在的函数。
  1. 演示案例
def f1():for i in range(1, 5):if i == 3:return# break# continueprint("i =", i)print("结束for循环!")f1()

本章作业

"""
某人有100000元,没经过一次路口,需要交费,规则如下:
当现金>50000时,每次交5%;当现金<=50000时,每次交1000.
"""
money = 100000
count = 0
while True:if money > 50000:money *= 0.95count += 1elif money >= 1000:money -= 1000count += 1else:breakprint("count =", count, "money =", money)

欢迎关注我的博客,如有疑问或建议,请随时留言讨论。


http://www.mrgr.cn/news/57597.html

相关文章:

  • 常用分布的数学期望、方差、特征函数
  • 3GPP协议解读_NTN系列(一)_38.811_非地面网络(NTN)的背景、应用场景和信道建模
  • 稀疏表示修复
  • 理解 React 中的 ReactElement、children 和 ReactNode
  • 【HarmonyOS NEXT】实现保存base64图片到图库
  • 1.QT概述及C++基础
  • 199116-50-2,Mito-Tracker Orange CMTMRos是一种高亲和力的线粒体染色剂
  • 02 P1223 排队接水
  • 鸿蒙网络编程系列35-通过数据包结束标志解决TCP粘包问题
  • 养殖场大型全自动饲料颗粒加工机械设备
  • 力扣49.字母异位词分组
  • 【深度学习代码调试5】标准化数据集:TensorFlow Datasets (TFDS)自动化数据加载与预处理
  • ComfyUI零基础入门搭建教程
  • 手机空号过滤接口-在线手机空号检测-手机空号过滤API
  • 机器学习——元学习(Meta-learning)
  • 912.排序数组(堆排序)
  • 极狐GitLab 17.5 发布 20+ 与 DevSecOps 相关的功能【二】
  • MyBatis Builder
  • 微信小程序 - “本地资源图片无法通过WXSS 获取,可以使用网络图片,或者 base64,或者使用标签” 解决
  • ABB防爆伺服电机HX系列 危险工业环境中的安全卫士
  • 基于Python+SQL Server2008实现(GUI)快递管理系统
  • vue2结合echarts实现数据排名列表——前端柱状进度条排行榜
  • android 生成json 文件
  • 双十一护眼台灯测评推荐:实测书客、柏曼和明基护眼台灯怎么样
  • Lora算法原理及应用
  • qt QLineEdit详解