1.5 Python 条件语句与循环语句
前言:程序流程控制的重要性
在前四篇文章中,我们学习了Python的基本语法、变量与数据类型以及运算符。现在,我们将进入编程中最为关键的部分——程序流程控制。条件语句和循环语句是编程语言的"决策大脑"和"重复引擎",它们赋予了程序根据不同情况做出判断和重复执行任务的能力。
无论是简单的脚本还是复杂的应用程序,几乎所有的程序都依赖于条件判断和循环结构。掌握这些控制结构,意味着你能够编写出真正"智能"的程序,而不仅仅是简单的顺序执行代码。
本文将深入探讨Python中的条件语句(if/elif/else)和循环语句(for/while),通过丰富的实战案例,帮助你理解它们的原理、应用场景以及最佳实践。
一、 条件语句:程序的决策能力
条件语句允许程序根据不同的条件执行不同的代码块,这是程序具有"智能"行为的基础。
1.1 基本的if语句
语法结构:
if condition:
# 如果条件为True,执行这里的代码
statement1
statement2
...
实战案例5-1:基本的if语句
# 判断一个数是否为正数
number = float(input("请输入一个数字: "))
if number > 0:
print("这是一个正数")
print("谢谢您的输入!")
# 判断用户是否成年
age = int(input("请输入您的年龄: "))
if age >= 18:
print("您已成年,可以访问所有内容")
1.2 if-else语句
语法结构:
if condition:
# 如果条件为True,执行这里的代码
true_block
else:
# 如果条件为False,执行这里的代码
false_block
实战案例5-2:if-else语句应用
# 判断数字的奇偶性
number = int(input("请输入一个整数: "))
if number % 2 == 0:
print(f"{number} 是偶数")
else:
print(f"{number} 是奇数")
# 简单的登录验证
username = input("请输入用户名: ")
password = input("请输入密码: ")
if username == "admin" and password == "123456":
print("登录成功!")
else:
print("用户名或密码错误")
1.3 if-elif-else语句
语法结构:
if condition1:
# 如果condition1为True,执行这里的代码
block1
elif condition2:
# 如果condition1为False但condition2为True,执行这里的代码
block2
elif condition3:
# 如果上述条件都为False但condition3为True,执行这里的代码
block3
else:
# 如果所有条件都为False,执行这里的代码
else_block
实战案例5-3:多条件判断
# 成绩等级判断
score = float(input("请输入您的成绩(0-100): "))
if score >= 90:
grade = "A"
print("优秀!")
elif score >= 80:
grade = "B"
print("良好")
elif score >= 70:
grade = "C"
print("中等")
elif score >= 60:
grade = "D"
print("及格")
else:
grade = "F"
print("不及格")
print(f"您的成绩等级是: {grade}")
# 根据温度给出穿衣建议
temperature = float(input("请输入当前温度(摄氏度): "))
if temperature > 30:
print("天气炎热,建议穿短袖、短裤,注意防晒")
elif temperature > 20:
print("天气温暖,建议穿长袖或薄外套")
elif temperature > 10:
print("天气凉爽,建议穿外套或毛衣")
else:
print("天气寒冷,建议穿厚外套、毛衣,注意保暖")
1.4 嵌套条件语句
实战案例5-4:嵌套条件判断
# 权限管理系统
is_logged_in = True
user_role = "admin" # 可能是 "user", "admin", "guest"
is_premium = False
if is_logged_in:
if user_role == "admin":
print("欢迎管理员,您有所有权限")
elif user_role == "user":
if is_premium:
print("欢迎尊贵的会员用户")
else:
print("欢迎普通用户,考虑升级到会员吗?")
else:
print("欢迎访客用户,权限有限")
else:
print("请先登录")
# 闰年判断
year = int(input("请输入年份: "))
if year % 4 == 0:
if year % 100 == 0:
if year % 400 == 0:
print(f"{year}年是闰年")
else:
print(f"{year}年不是闰年")
else:
print(f"{year}年是闰年")
else:
print(f"{year}年不是闰年")
1.5 条件表达式(三元运算符)
Python提供了简洁的三元运算符语法,用于简单的条件赋值。
语法结构:
value = true_value if condition else false_value
实战案例5-5:三元运算符应用
# 传统的if-else方式
age = 20
if age >= 18:
status = "成年人"
else:
status = "未成年人"
# 使用三元运算符
status = "成年人" if age >= 18 else "未成年人"
print(f"状态: {status}")
# 更多示例
# 找出两个数中的较大值
a, b = 10, 20
max_value = a if a > b else b
print(f"{a}和{b}中的较大值是: {max_value}")
# 判断数字符号
number = -5
sign = "正数" if number > 0 else ("零" if number == 0 else "负数")
print(f"{number}是一个{sign}")
# 在实际代码中的应用
scores = [85, 92, 78, 90, 65]
passing_scores = [score for score in scores if score >= 60]
print(f"及格分数: {passing_scores}")
二、 循环语句:程序的重复引擎
循环语句允许程序重复执行一段代码,这是处理重复性任务的基础。
2.1 for循环
for循环用于遍历序列(如列表、元组、字符串)或其他可迭代对象。
语法结构:
for element in iterable:
# 对每个元素执行的代码
statement1
statement2
...
实战案例5-6:for循环基础
# 遍历列表
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
for fruit in fruits:
print(f"我喜欢吃{fruit}")
# 遍历字符串
message = "Hello Python"
for char in message:
print(char, end="-")
print() # 换行
# 使用range()函数
print("0到4的数字:")
for i in range(5): # 0, 1, 2, 3, 4
print(i, end=" ")
print()
print("2到8的偶数:")
for i in range(2, 9, 2): # 2, 4, 6, 8
print(i, end=" ")
print()
# 计算1到100的和
total = 0
for number in range(1, 101):
total += number
print(f"1到100的和是: {total}")
2.2 while循环
while循环在条件为真时重复执行代码块。
语法结构:
while condition:
# 只要条件为True就重复执行
statement1
statement2
...
实战案例5-7:while循环应用
# 简单的计数器
count = 5
while count > 0:
print(f"倒计时: {count}")
count -= 1
print("发射!")
# 用户输入验证
password = ""
while password != "secret":
password = input("请输入密码: ")
if password != "secret":
print("密码错误,请重试")
print("密码正确,欢迎访问!")
# 模拟游戏循环
game_running = True
player_health = 100
while game_running:
print(f"玩家健康值: {player_health}")
action = input("请输入动作(attack/heal/quit): ")
if action == "attack":
player_health -= 10
print("受到攻击,健康值-10")
elif action == "heal":
player_health += 15
print("恢复健康,健康值+15")
elif action == "quit":
game_running = False
print("游戏结束")
else:
print("无效动作")
if player_health <= 0:
print("游戏结束,玩家死亡")
game_running = False
2.3 循环控制语句
Python提供了break、continue和pass语句来控制循环的执行。
实战案例5-8:循环控制语句
# break语句:立即退出循环
print("寻找第一个能被3和5整除的数:")
for i in range(1, 100):
if i % 3 == 0 and i % 5 == 0:
print(f"找到了: {i}")
break # 找到后立即退出循环
# continue语句:跳过当前迭代,继续下一轮
print("1到10中的奇数:")
for i in range(1, 11):
if i % 2 == 0:
continue # 跳过偶数
print(i, end=" ")
print()
# pass语句:占位符,什么都不做
for i in range(5):
if i == 2:
pass # 什么也不做,只是占位
else:
print(i, end=" ")
print()
# 循环的else子句:循环正常结束(非break退出)时执行
print("寻找质数:")
for num in range(2, 10):
for i in range(2, num):
if num % i == 0:
print(f"{num} = {i} * {num//i}")
break
else:
# 循环正常结束(没有找到因子),说明是质数
print(f"{num} 是质数")
2.4 嵌套循环
实战案例5-9:嵌套循环应用
# 打印乘法表
print("乘法表:")
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j}", end="\t")
print() # 换行
# 查找二维列表中的元素
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
target = 5
found = False
for row in matrix:
for element in row:
if element == target:
print(f"找到目标值 {target}")
found = True
break # 只退出内层循环
if found:
break # 退出外层循环
# 使用标志变量控制嵌套循环退出
print("坐标对:")
for x in range(3):
for y in range(3):
print(f"({x}, {y})", end=" ")
if x == 1 and y == 1:
print("\n找到中心点,停止搜索")
break
else:
continue # 仅当内层循环正常结束时执行
break # 内层循环break后执行
三、 迭代工具与技巧
Python提供了许多强大的迭代工具和技巧,可以使循环更加简洁和高效。
3.1 enumerate()函数
实战案例5-10:使用enumerate()获取索引
# 传统方式:使用range(len())
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
for i in range(len(fruits)):
print(f"{i+1}. {fruits[i]}")
# 更好的方式:使用enumerate()
for index, fruit in enumerate(fruits, start=1):
print(f"{index}. {fruit}")
# 在循环中修改列表元素
numbers = [1, 2, 3, 4, 5]
for i, num in enumerate(numbers):
numbers[i] = num * 2
print(f"加倍后的列表: {numbers}")
3.2 zip()函数
实战案例5-11:使用zip()并行迭代
# 并行迭代多个序列
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f"{name}的成绩是{score}")
# 处理不同长度的序列
list1 = [1, 2, 3, 4, 5]
list2 = ['a', 'b', 'c']
for item1, item2 in zip(list1, list2):
print(f"{item1} - {item2}")
# 与enumerate()结合使用
for i, (name, score) in enumerate(zip(names, scores), start=1):
print(f"{i}. {name}: {score}")
3.3 列表推导式
列表推导式提供了一种简洁的方式来创建列表。
实战案例5-12:列表推导式应用
# 传统方式:使用for循环
squares = []
for x in range(10):
squares.append(x**2)
print(f"平方数: {squares}")
# 使用列表推导式
squares = [x**2 for x in range(10)]
print(f"平方数: {squares}")
# 带条件的列表推导式
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(f"偶数的平方: {even_squares}")
# 嵌套循环的列表推导式
pairs = [(x, y) for x in range(3) for y in range(3)]
print(f"坐标对: {pairs}")
# 实际应用:处理字符串列表
words = ["Hello", "World", "Python", "Programming"]
lengths = [len(word) for word in words]
print(f"单词长度: {lengths}")
# 转换大小写
uppercase_words = [word.upper() for word in words]
print(f"大写单词: {uppercase_words}")
四、 综合实战:学生成绩管理系统
现在,让我们创建一个综合性的学生成绩管理系统,应用本章所学的所有知识。
项目目标:
- 添加学生和成绩
- 查看所有学生成绩
- 计算平均分和统计等级分布
- 查找特定学生成绩
- 提供交互式菜单界面
代码实现:
def student_grade_system():
"""学生成绩管理系统"""
students = {} # 字典存储学生信息:{学号: {"name": 姓名, "score": 成绩}}
while True:
print("\n=== 学生成绩管理系统 ===")
print("1. 添加学生成绩")
print("2. 查看所有学生成绩")
print("3. 计算统计信息")
print("4. 查找学生成绩")
print("5. 退出系统")
choice = input("请选择操作(1-5): ")
if choice == "1":
add_student(students)
elif choice == "2":
view_all_students(students)
elif choice == "3":
show_statistics(students)
elif choice == "4":
search_student(students)
elif choice == "5":
print("感谢使用学生成绩管理系统,再见!")
break
else:
print("无效选择,请重新输入")
def add_student(students):
"""添加学生成绩"""
student_id = input("请输入学号: ")
# 检查学号是否已存在
if student_id in students:
print("该学号已存在,无法重复添加")
return
name = input("请输入姓名: ")
# 验证成绩输入
while True:
try:
score = float(input("请输入成绩(0-100): "))
if 0 <= score <= 100:
break
else:
print("成绩必须在0-100之间,请重新输入")
except ValueError:
print("请输入有效的数字")
# 添加学生信息
students[student_id] = {"name": name, "score": score}
print(f"成功添加学生: {name},成绩: {score}")
def view_all_students(students):
"""查看所有学生成绩"""
if not students:
print("暂无学生数据")
return
print("\n学号\t姓名\t成绩\t等级")
print("-" * 30)
for student_id, info in students.items():
score = info["score"]
# 确定等级
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"{student_id}\t{info['name']}\t{score}\t{grade}")
def show_statistics(students):
"""显示统计信息"""
if not students:
print("暂无学生数据")
return
# 计算平均分
total_score = sum(info["score"] for info in students.values())
average = total_score / len(students)
print(f"平均分: {average:.2f}")
# 统计各等级人数
grade_count = {"A": 0, "B": 0, "C": 0, "D": 0, "F": 0}
for info in students.values():
score = info["score"]
if score >= 90:
grade_count["A"] += 1
elif score >= 80:
grade_count["B"] += 1
elif score >= 70:
grade_count["C"] += 1
elif score >= 60:
grade_count["D"] += 1
else:
grade_count["F"] += 1
print("\n等级分布:")
for grade, count in grade_count.items():
print(f"{grade}级: {count}人")
# 找出最高分和最低分
max_score = max(info["score"] for info in students.values())
min_score = min(info["score"] for info in students.values())
print(f"最高分: {max_score}")
print(f"最低分: {min_score}")
def search_student(students):
"""查找学生成绩"""
if not students:
print("暂无学生数据")
return
search_type = input("按学号查找(1) 按姓名查找(2): ")
if search_type == "1":
student_id = input("请输入学号: ")
if student_id in students:
info = students[student_id]
print(f"找到学生: {info['name']},成绩: {info['score']}")
else:
print("未找到该学号的学生")
elif search_type == "2":
name = input("请输入姓名: ")
found = False
for student_id, info in students.items():
if info["name"] == name:
print(f"找到学生: 学号{student_id},成绩: {info['score']}")
found = True
if not found:
print("未找到该姓名的学生")
else:
print("无效选择")
# 运行系统
if __name__ == "__main__":
student_grade_system()
运行示例:
=== 学生成绩管理系统 ===
1. 添加学生成绩
2. 查看所有学生成绩
3. 计算统计信息
4. 查找学生成绩
5. 退出系统
请选择操作(1-5): 1
请输入学号: 1001
请输入姓名: 张三
请输入成绩(0-100): 85
成功添加学生: 张三,成绩: 85.0
=== 学生成绩管理系统 ===
1. 添加学生成绩
2. 查看所有学生成绩
3. 计算统计信息
4. 查找学生成绩
5. 退出系统
请选择操作(1-5): 1
请输入学号: 1002
请输入姓名: 李四
请输入成绩(0-100): 92
成功添加学生: 李四,成绩: 92.0
=== 学生成绩管理系统 ===
1. 添加学生成绩
2. 查看所有学生成绩
3. 计算统计信息
4. 查找学生成绩
5. 退出系统
请选择操作(1-5): 2
学号 姓名 成绩 等级
------------------------------
1001 张三 85.0 B
1002 李四 92.0 A
=== 学生成绩管理系统 ===
1. 添加学生成绩
2. 查看所有学生成绩
3. 计算统计信息
4. 查找学生成绩
5. 退出系统
请选择操作(1-5): 3
平均分: 88.50
等级分布:
A级: 1人
B级: 1人
C级: 0人
D级: 0人
F级: 0人
最高分: 92.0
最低分: 85.0
=== 学生成绩管理系统 ===
1. 添加学生成绩
2. 查看所有学生成绩
3. 计算统计信息
4. 查找学生成绩
5. 退出系统
请选择操作(1-5): 5
感谢使用学生成绩管理系统,再见!
总结与展望
通过本篇文章的深入学习,我们全面掌握了Python中的条件语句和循环语句:
-
条件语句:
- 掌握了if、if-else和if-elif-else结构的使用
- 学会了嵌套条件语句的编写
- 了解了三元运算符的简洁语法
-
循环语句:
- 掌握了for循环遍历各种可迭代对象
- 学会了while循环的条件控制
- 理解了break、continue和pass的区别和用途
-
迭代工具:
- 学会了使用enumerate()获取索引和值
- 掌握了使用zip()并行迭代多个序列
- 了解了列表推导式的简洁语法
-
综合应用:
- 通过学生成绩管理系统项目,将所学知识融会贯通
- 学会了如何设计交互式菜单系统
- 掌握了数据统计和查询功能的实现
这些控制结构是编程的基础,几乎所有的程序都会用到它们。掌握好条件判断和循环,意味着你能够编写出真正具有"智能"行为的程序。
思考题:
- 在什么情况下应该使用for循环而不是while循环?反之呢?
- 如何避免嵌套循环导致的性能问题?有哪些优化策略?
- 列表推导式虽然简洁,但在什么情况下不应该使用它?
- 如何设计一个更加健壮的用户输入验证系统,避免程序因无效输入而崩溃?
- 在学生成绩管理系统的基础上,还可以添加哪些功能来增强其实用性?
更多推荐

所有评论(0)