Python 基础语法与数据类型(六) - 条件语句、循环、循环控制
文章目录
- 1. 条件语句 (if, elif, else)
- 1.1 if 语句
- 1.2 if...else 语句
- 1.3 if...elif...else 语句
- 1.4 条件表达式的“真值”
- 1.5 嵌套条件语句
- 2. 循环 (Loops)
- 2.1 for 循环
- 2.2 range() 函数
- 2.3 while 循环
- 3. 循环控制 (break, continue)
- 3.1 break 语句
- 3.2 continue 语句
- 4. 循环中的 else 块 (了解)
- 总结
- 练习题
- 练习题答案
- **创作不易,请大家点赞加收藏,关注我,持续更新教程!**
在之前的学习中,我们了解了 Python 的基本数据类型和运算符。然而,一个真正的程序不仅仅是按顺序执行一系列指令。我们需要能够根据不同的情况做出决策,或者重复执行某些任务。这就是 控制流程的作用。
本篇博客将深入讲解 Python 中用于控制流程的关键结构:条件语句 (if
, elif, else) 用于决策,循环 (for
, while
) 用于重复,以及 循环控制 (break
, continue
) 用于微调循环行为。
1. 条件语句 (if, elif, else)
条件语句允许你根据一个或多个条件的真假来决定执行哪部分代码。Python 使用 if
、elif
(else if 的缩写)和 else
关键字来构建条件判断。
核心概念: Python 使用缩进来表示代码块的归属。每个条件语句(if
, elif
, else
)后面都必须有一个冒号 :
, 并且其下属于该条件的代码块必须进行相同的缩进。
1.1 if 语句
if
语句是最简单的条件判断,如果条件为 True
,就执行 if
后面的代码块。
age = 20
if age >= 18:print("你已经成年了。")print("可以进入。")
print("这是 if 语句外面的代码,总是会执行。")
输出:
你已经成年了。
可以进入。
这是 if 语句外面的代码,总是会执行。
如果 age
小于 18,if
后面的代码块就不会执行。
1.2 if…else 语句
if...else
语句提供了两个分支:如果 if
的条件为 True
,执行 if
块;否则(即条件为 False
),执行 else
块。
temperature = 25
if temperature > 30:print("天气很热!")
else:print("天气不错。")
输出:
天气不错。
如果 temperature
是 35,输出就会是 “天气很热!”。
1.3 if…elif…else 语句
elif
(else if)用于检查多个条件。Python 会从上到下依次检查 if
和 elif
的条件。一旦找到一个条件为 True
,就会执行相应的代码块,然后跳过剩余的 elif
和 else
块。只有当所有 if
和 elif
的条件都为 False
时,才会执行 else
块(如果存在的话)。
score = 85
if score >= 90:print("成绩优秀!")
elif score >= 80: # 如果上面的条件不成立,再检查这个条件print("成绩良好。")
elif score >= 60: # 如果上面的条件都不成立,再检查这个条件print("成绩及格。")
else: # 如果所有条件都不成立print("成绩不及格。")
输出:
成绩良好。
你可以有任意数量的 elif
块。else
块是可选的,最多只能有一个。
1.4 条件表达式的“真值”
回顾我们学过的布尔类型。在条件语句中,if
、elif
后面的表达式会被 Python 解释为布尔值。还记得吗?0
、None
、空字符串 ""
、空列表 []
、空字典 {}
、空集合 set()
等都被视为 False
(Falsy),其他大多数值都被视为 True
(Truthy)。
my_list = []
if my_list: # 检查列表是否为空print("列表不为空")
else:print("列表为空")
输出:
列表为空
1.5 嵌套条件语句
条件语句可以嵌套。这意味着在一个 if
或 else
块内部,可以包含另一个完整的条件语句。
is_authenticated = True
is_admin = Falseif is_authenticated:print("用户已登录。")if is_admin:print("欢迎,管理员!")else:print("欢迎,普通用户。")
else:print("请登录。")
输出:
用户已登录。
欢迎,普通用户。
2. 循环 (Loops)
循环用于重复执行一段代码。Python 提供了两种主要的循环结构:for
循环和 while
循环。
2.1 for 循环
for
循环用于遍历任何可迭代对象(如列表、元组、字符串、字典、集合等)中的元素。它会依次将可迭代对象中的每个元素赋值给循环变量,并执行循环体。
# 遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:print(fruit)
输出:
apple
banana
cherry
# 遍历字符串
for char in "Python":print(char)
输出:
P
y
t
h
o
n
# 遍历字典 (默认遍历键)
person = {"name": "Alice", "age": 30, "city": "New York"}
for key in person:print(key) # 输出键print(person[key]) # 使用键访问值
输出(顺序可能不同):
name
Alice
age
30
city
New York
遍历字典的更常用方式: 使用 .keys()
(遍历键)、.values()
(遍历值) 或 .items()
(遍历键值对元组)。
for key in person.keys(): # 遍历键print("键:", key)for value in person.values(): # 遍历值print("值:", value)for key, value in person.items(): # 遍历键值对元组print(f"键: {key}, 值: {value}")
2.2 range() 函数
range()
函数是一个非常常用的工具,用于生成一个整数序列,它经常与 for
循环一起使用,以便按指定次数循环。
range()
的用法:
range(stop)
: 生成从 0 到stop-1
的整数序列。range(start, stop)
: 生成从start
到stop-1
的整数序列。range(start, stop, step)
: 生成从start
到stop-1
的整数序列,步长为step
。
# 循环 5 次 (从 0 到 4)
for i in range(5):print(f"循环次数 (从0开始): {i}")
输出:
循环次数 (从0开始): 0
循环次数 (从0开始): 1
循环次数 (从0开始): 2
循环次数 (从0开始): 3
循环次数 (从0开始): 4
# 循环从 2 到 6 (不包含 7)
for i in range(2, 7):print(f"当前数字: {i}")
输出:
当前数字: 2
当前数字: 3
当前数字: 4
当前数字: 5
当前数字: 6
# 循环从 10 到 0 (不包含 -1),步长为 -2
for i in range(10, -1, -2):print(f"倒计数: {i}")
输出:
倒计数: 10
倒计数: 8
倒计数: 6
倒计数: 4
倒计数: 2
倒计数: 0
2.3 while 循环
while
循环会在指定的条件为 True
时重复执行代码块。它会先检查条件,如果为 True
,则执行循环体,然后再次检查条件,直到条件变为 False
。
count = 0
while count < 5:print(f"计数: {count}")count += 1 # 每次循环后递增计数器
print("循环结束。")
输出:
计数: 0
计数: 1
计数: 2
计数: 3
计数: 4
循环结束。
重要: 在 while
循环中,务必确保循环体内部会改变某些条件,使得循环条件最终能变为 False
,否则会导致无限循环!
# 这是一个无限循环的例子 (请小心运行或避免运行)
# i = 0
# while i < 5:
# print("我会永远打印这句话!")
# # i 没有改变,条件永远为 True
# 要停止无限循环,通常在终端按 Ctrl+C
何时使用 for
vs while
?
- 如果你知道需要遍历一个序列或按照固定次数重复,通常使用
for
循环 (确定次数循环)。 - 如果你需要在某个条件保持
True
时重复执行,而你不知道具体需要循环多少次,通常使用while
循环 (不确定次数循环)。
3. 循环控制 (break, continue)
break
和 continue
语句可以改变循环的正常执行流程。
3.1 break 语句
break
语句会立即终止最内层的循环(for
或 while
),并跳出循环体,继续执行循环后面的代码。
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for num in numbers:if num == 5:print("找到 5 了,退出循环!")break # 找到 5 后立即退出 for 循环print(f"当前数字: {num}")
print("循环外的代码")
输出:
当前数字: 1
当前数字: 2
当前数字: 3
当前数字: 4
找到 5 了,退出循环!
循环外的代码
3.2 continue 语句
continue
语句会跳过当前循环的剩余代码,直接进入下一次迭代。
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for num in numbers:if num % 2 == 0: # 如果是偶数print(f"跳过偶数: {num}")continue # 跳过当前迭代的剩余部分,进入下一次循环print(f"当前是奇数,处理: {num}")
print("循环结束。")
输出:
当前是奇数,处理: 1
跳过偶数: 2
当前是奇数,处理: 3
跳过偶数: 4
当前是奇数,处理: 5
跳过偶数: 6
当前是奇数,处理: 7
跳过偶数: 8
当前是奇数,处理: 9
循环结束。
4. 循环中的 else 块 (了解)
for
循环和 while
循环都可以有一个可选的 else
块。这个 else
块会在循环正常完成(即没有遇到 break
语句)时执行。
# for 循环的 else
for i in range(3):print(f"Loop {i}")
else:print("循环正常结束。") # 循环完整执行,没有 break
输出:
Loop 0
Loop 1
Loop 2
循环正常结束。
# 带有 break 的 for 循环的 else
for i in range(5):if i == 2:print("遇到 break")breakprint(f"Loop {i}")
else:print("循环正常结束。") # 不会执行,因为遇到了 break
输出:
Loop 0
Loop 1
遇到 break
while
循环的 else
块工作方式类似。这个特性在查找元素或验证循环是否完全遍历时可能有用。
总结
控制流程是构建动态程序的基础。我们学习了:
- 条件语句 (
if
,elif
,else
):根据条件执行不同的代码分支。 - 循环 (
for
,while
):重复执行代码块。 range()
函数:配合for
循环生成数字序列进行计数。- 循环控制 (
break
,continue
):改变循环的正常执行流程。 - 了解了循环可选的
else
块。
掌握这些结构,你就可以编写出能够响应不同情况并处理重复任务的更复杂的程序了。
练习题
尝试独立完成以下练习题,并通过答案进行对照:
-
条件语句:
- 编写一个程序,接收用户输入一个数字,判断它是正数、负数还是零,并打印相应信息。
- 编写一个程序,接收用户输入一个年份,判断它是否是闰年(能被 4 整除但不能被 100 整除,或者能被 400 整除),并打印结果。
-
for
循环:- 使用
for
循环遍历字符串 “Programming is fun!”,并打印出每个字符。 - 创建一个列表
numbers = [10, 20, 30, 40, 50]
,使用for
循环遍历并打印出列表中的每一个数字。 - 使用
for
循环和range()
函数打印从 1 到 10 的所有数字。 - 使用
for
循环和range()
函数打印从 10 到 1 的所有数字。
- 使用
-
while
循环:- 使用
while
循环计算并打印从 1 加到 100 的总和。 - 编写一个
while
循环,模拟一个简单的猜数字游戏:程序预设一个数字(例如 secret_number = 7),让用户不断输入猜测的数字,直到猜对为止。每猜测一次,提示是“猜大了”、“猜小了”还是“猜对了”。
- 使用
-
循环控制 (
break
,continue
):- 使用
for
循环遍历一个数字列表,当遇到数字 7 时,打印“找到 7,退出循环”,然后使用break
立即停止循环。 - 使用
for
循环遍历从 1 到 20 的数字,但跳过所有能被 3 整除的数字,只打印其他数字。
- 使用
-
综合应用:
- 创建一个包含学生分数的列表。使用
for
循环和if
语句,统计有多少个分数是及格的(假设 60 分及格)。 - 编写一个程序,接收用户输入一个正整数 n,使用
while
循环计算 n 的阶乘(n! = n * (n-1) * … * 1)。
- 创建一个包含学生分数的列表。使用
练习题答案
1. 条件语句:
# 1.1 判断正负零
num = float(input("请输入一个数字: "))
if num > 0:print("这是一个正数。")
elif num < 0:print("这是一个负数。")
else:print("这是零。")# 1.2 判断闰年
year = int(input("请输入一个年份: "))
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):print(f"{year} 年是闰年。")
else:print(f"{year} 年不是闰年。")
2. for
循环:
# 2.1 遍历字符串
my_string = "Programming is fun!"
for char in my_string:print(char)# 2.2 遍历列表
numbers = [10, 20, 30, 40, 50]
for num in numbers:print(num)# 2.3 打印 1 到 10
for i in range(1, 11): # range(start, stop) 包含 start,不包含 stopprint(i)# 2.4 打印 10 到 1
for i in range(10, 0, -1): # range(start, stop, step) 步长为 -1print(i)
3. while
循环:
# 3.1 计算 1 加到 100 的总和
total = 0
count = 1
while count <= 100:total += countcount += 1
print(f"1 加到 100 的总和是: {total}")# 3.2 猜数字游戏
import random # 导入 random 模块以生成随机数secret_number = random.randint(1, 100) # 生成 1 到 100 之间的随机整数
guess = 0 # 初始化猜测数字
print("欢迎来到猜数字游戏!我已经想好了一个 1 到 100 之间的数字。")while guess != secret_number:try:guess = int(input("请输入你的猜测: "))if guess > secret_number:print("猜大了,再试试!")elif guess < secret_number:print("猜小了,再试试!")else:print("恭喜你,猜对了!")except ValueError:print("无效输入,请输入一个整数。")print("游戏结束。")
4. 循环控制 (break
, continue
):
# 4.1 使用 break 查找并退出
number_list = [1, 3, 5, 7, 9, 11]
for num in number_list:if num == 7:print("找到 7,退出循环")break # 立即终止循环print(f"当前数字: {num}")
print("break 后的代码")# 4.2 使用 continue 跳过能被 3 整除的数字
for i in range(1, 21): # 从 1 到 20if i % 3 == 0: # 如果能被 3 整除continue # 跳过当前循环的剩余部分,直接进入下一轮迭代print(f"打印数字: {i}") # 只有不能被 3 整除的数字会执行到这里
print("continue 后的代码")
5. 综合应用:
# 5.1 统计及格分数
student_scores = [75, 58, 90, 60, 45, 88, 59, 72]
passing_score = 60
passed_count = 0for score in student_scores:if score >= passing_score:passed_count += 1print(f"总共有 {len(student_scores)} 个学生分数。")
print(f"其中有 {passed_count} 个分数达到或超过 {passing_score} 分。")# 5.2 计算阶乘
n = int(input("请输入一个正整数计算阶乘: "))if n < 0:print("负数没有阶乘。")
elif n == 0:print("0 的阶乘是 1。")
else:factorial = 1count = nwhile count > 0:factorial *= countcount -= 1print(f"{n} 的阶乘是 {factorial}")