代码获取:https://github.com/qingxuly/hsp_python_course
完结版:Python基础学习完结版
程序控制结构
程序流程控制介绍
基本介绍
- 程序流程控制绝对程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。
- 顺序控制、分支控制、循环控制。
顺序控制
基本介绍
- 顺序控制:程序从上到下逐行地执行,中间没有任何判断和跳转。
# 顺序控制
print("程序开始执行")
print("1.小明去上学")
print("2.小明学习中")
print("3.小明放学了")
print("策划给你续执行结束")
# Python中定义变量时采用合法的前向引用
num1 = 12
num2 = num1 + 2
分支控制 if-else
基本介绍
- 让程序有选择的执行,分支控制有三种:单分支、双分支、多分支。
单分支
- 基本语法:单分支是通过 if 语句来实现的,if 语句的基本语法如下:
if 条件表达式:
代码块(可以有多条语句)
- 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")
- 练习
# 请编写一个程序,可以输入人的年龄,如果年龄大于等于18岁,则输出“你年龄大于等于18,要对自己的行为负责”
age = int(input("请输入你的年龄:"))
if age >= 18:
print("你年龄大于等于18,要对自己的行为负责")
- 流程图
双分支
- 基本语法
if 条件表达式:
执行代码块1
else:
执行代码块2
- 基本语法说明
- if、else 是关键字,是规定好的。
- 当条件表达式成立,即执行代码块 1,否则执行代码块 2,注意;不要少写了冒号:。
- 应用实例
# 请编写一个程序,可以输入人的年龄,如果年龄大于等于18岁,则输出“你年龄大于等于18,要对自己的行为负责”。否则,输出“你的年龄不大,这次放过你了”
age = int(input("请输入你的年龄:"))
if age >= 18:
print("你年龄大于等于18,要对自己的行为负责")
else:
print("你的年龄不大,这次放过你了")
- 流程图
- 练习
# 对下列代码,若有输出,指出输出结果
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} 不是闰年")
多分支
- 基本语法
if 条件表达式1:
执行代码块1
elif 条件表达式2:
执行代码块2
...
else:
执行代码块n+1
- 流程图
- 执行流程说明
- 当条件表达式 1 成立时,即执行代码 1。如果表达式 1 不成立,才去判断表达式 2 是否成立。
- 如果表达式 2 成立,就执行代码块 2。
- 以此类推,如果所有的表达式都不成立则执行 else 的代码块。
- 只能有一个执行入口。
- 案例演示
# 参加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")
- 练习
# 婚嫁
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("不嫁")
嵌套分支
基本介绍
- 基本介绍
-
嵌套分支:在一个分支结构中又嵌套了另一个分支结构。
-
里面的分支的结构称为内层分支,外面的分支结构称为外层分支。
-
规范:不要超过 3 层(可读性不好)
- 基本语法
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 循环分支
基本介绍
-
基本介绍:for 循环听其名而知其意,就是让你的代码可以循环的执行,是通过 for 语句来实现的。
-
基本语法
for <变量> in <范围/序列>:
<循环操作语句>
- for 基本语法说明
- for、in 是关键字,是规定好的。
- <范围/序列> 可以理解成要处理的数据集,需要是可迭代对象(比如字符串,列表等…)。
- 循环操作语句,这里可以有多条语句,也就是我们要循环执行的代码,也叫循环体。
- python 的 for 循环是一种“轮询机制”,是对指定的数据集,进行“轮询处理”。
for 循环执行流程分析
- 代码演示
# 编写一个程序,可以打印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)
- for 循环控制流程图
- 代码执行内存分析法
注意实现和细节说明
- 循环时,依次将序列中的值取出赋给变量。
- 如需要遍历数字序列,可以使用内置
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 循环分支
基本语法
- 基本介绍:while 循环用于在表达式为真的情况下,重复的(循环的)执行,是通过 while 语句来实现的。
- 基本语法
while 判断条件(condition):
循环操作语句(statements)...
- 基本语法说明
- while 是关键字,是规定好的。
- 当判断条件为 True 时,就执行循环操作语句,如果为 False,就退出 while。
- 循环操作语句,这里可以有多条语句,也就是我们要循环执行的代码,也叫循环体。
while 循环执行流程分析
- 代码演示
# 使用while完成10句 “hsp”
i = 1
while i <= 10:
print("hsp")
i += 1
- while 循环控制流程图
- 代码执行内存分析法
注意事项和细节说明
- while 可以和 else 配合使用
- 语法格式
while 判断条件(condition):
循环操作语句(statements)
else:
其它语句<additional_statements(s)>
- 解读:在 while … else 判断条件为 false 时,会执行 else 的语句块,即:在遍历过程中,没有被打断(解释:比如没有执行到 break 语句)。
- 使用案例
# 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 = 0
while i <= max_num:
if i % 9 == 0:
print(i)
count += 1
sum += i
i += 1
print("count:", count)
print("sum:", sum)
# 5、完成下列表达式输出
num = int(input("请输入一个整数:"))
i = 0
while i <= num:
print(f"{i} + {num - i} = {num}")
i += 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、先不考虑层数的变化,嘉定就是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("")
- 打印空心菱形
# 空心菱形
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) + "*")
- 使用 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
- 统计班级情况
"""
统计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.0
for i in range(student_num):
score = float(input(f"请输入第{j + 1}班的 第{i + 1}个学生的成绩:"))
# 判断是否及格
if score >= 60.0:
pass_num += 1
sum += score
print(f"第{j + 1}班级的情况:平均分{sum / 5}")
total = total + sum
print(f"所有班级的平均分 {total / (student_num * class_num)},及格人数 {pass_num}")
- 打印九九乘法表
# 九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j} * {i} = {i * j}", end="\t")
print()
break 语句
基本介绍
- 基本介绍
- break 语句用于终止某个语句块的执行,使用在循环中
- 基本语法
...
break
...
- break 语句流程图
快速入门
# 随机生成 1-100 的一个数,直到生成了97这个数,看看一共用了多少次
# random.randint(a, b) 返回随机整数N满足 a<=N<=b。相当于randrange(a, b+1)
import random
count = 0
while True:
count += 1
n = random.randint(1, 100)
print(n)
if n == 97:
break
print("count =", count)
注意实现和细节说明
- break 语句是用在 for 或 while 循环所嵌套的代码。
- 它会终结最近的外层循环,如果循环有可选的 else 子句,也会跳过该子句。
- 如果一个 for 循环被 break 所终结,该循环的控制变量会保持其当前值。
# 它会终结最近的外层循环,如果循环有可选的else子句,也会跳过该子句。
count = 0
while True:
print("hi")
count += 1
if count == 3:
break
while 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 - 100 以内的求和,求出当和第一次大于 20 的当前控制循环的变量是多少。
sum = 0
for i in range(1, 101):
sum += i
if sum > 20:
break
print(i)
- 实现登录验证,有三次机会,如果用户名为“张无忌”,密码“888” 提示登录成功,否则提示还有几次机会。
change = 3
for i in range(1, 4):
name = input("请输入你的姓名:")
passwd = int(input("请输入你的密码:"))
change -= 1
if name == "张无忌" and passwd == 888:
print("登录成功")
break
else:
print(f"姓名或密码错误,还有{3 - i}次机会")
continue 语句
基本介绍
- 基本介绍
- continue 语句用于 for 或 while 循环所嵌套的代码中。
- continue 语句用于结束本次循环,继续执行循环的下一次轮次。继续执行的是:该 continue 最近的外层循环的下一次轮次。
- 基本语法
...
continue
...
- continue 语句流程图
快速入门
# 下面代码输出结果是什么
i = 1
while i <= 4:
i += 1
if i == 3:
continue
print("i =", i)
练习
- 请分析下面的代码输出结果是什么。
for i in range(0, 13):
if i == 10:
continue
print("i =", i)
for i in range(0, 2):
for j in range(1, 4):
if j == 2:
continue
print("i =", i, "j =", j)
return 语句
基本介绍
- 基本介绍
- return 使用在函数,表示跳出所在的函数。
- 演示案例
def f1():
for i in range(1, 5):
if i == 3:
return
# break
# continue
print("i =", i)
print("结束for循环!")
f1()
本章作业
"""
某人有100000元,没经过一次路口,需要交费,规则如下:
当现金>50000时,每次交5%;当现金<=50000时,每次交1000.
"""
money = 100000
count = 0
while True:
if money > 50000:
money *= 0.95
count += 1
elif money >= 1000:
money -= 1000
count += 1
else:
break
print("count =", count, "money =", money)
欢迎关注我的博客,如有疑问或建议,请随时留言讨论。