Python 基础语法(二)- 控制流程¶
本章将介绍 Python 的控制流程,包括条件语句、循环语句和异常处理。这些是编程中必不可少的控制结构,能够让你的程序根据不同的条件执行不同的代码路径,或者重复执行某些操作。
第一章:条件语句¶
(一)if 语句¶
基本 if 语句:
if-else 语句:
if-elif-else 语句:
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
嵌套 if 语句:
x = 10
y = 20
if x > 0:
if y > 0:
print("x 和 y 都是正数")
else:
print("x 是正数,y 不是正数")
else:
print("x 不是正数")
(二)条件表达式(三元运算符)¶
基本语法:
# 语法:value_if_true if condition else value_if_false
age = 18
status = "成年" if age >= 18 else "未成年"
print(status) # 成年
复杂示例:
# 多层嵌套
score = 75
grade = "A" if score >= 90 else ("B" if score >= 80 else ("C" if score >= 60 else "D"))
print(grade) # C
# 在函数中使用
def abs_value(x):
return x if x >= 0 else -x
print(abs_value(10)) # 10
print(abs_value(-10)) # 10
(三)match 语句(Python 3.10+)¶
基本用法:
day = 3
match day:
case 1:
print("星期一")
case 2:
print("星期二")
case 3:
print("星期三")
case 4:
print("星期四")
case 5:
print("星期五")
case 6:
print("星期六")
case 7:
print("星期日")
case _:
print("无效的日期")
模式匹配:
def greet(person):
match person:
case {"name": name, "age": age}:
print(f"你好,{name},今年 {age} 岁")
case str(name):
print(f"你好,{name}")
case _:
print("你好,陌生人")
greet({"name": "张三", "age": 20}) # 你好,张三,今年 20 岁
greet("李四") # 你好,李四
greet(123) # 你好,陌生人
第二章:循环语句¶
(一)for 循环¶
遍历字符串:
遍历列表:
使用 range() 函数:
# range(stop)
for i in range(5):
print(i) # 0 1 2 3 4
# range(start, stop)
for i in range(1, 5):
print(i) # 1 2 3 4
# range(start, stop, step)
for i in range(0, 10, 2):
print(i) # 0 2 4 6 8
# 倒序
for i in range(10, 0, -1):
print(i) # 10 9 8 7 6 5 4 3 2 1
遍历字典:
person = {"name": "张三", "age": 20, "city": "北京"}
# 遍历键
for key in person.keys():
print(key)
# 遍历值
for value in person.values():
print(value)
# 遍历键值对
for key, value in person.items():
print(f"{key}: {value}")
使用 enumerate() 获取索引:
fruits = ["苹果", "香蕉", "橙子"]
for index, fruit in enumerate(fruits):
print(f"索引 {index}: {fruit}")
# 输出:
# 索引 0: 苹果
# 索引 1: 香蕉
# 索引 2: 橙子
使用 zip() 同时遍历多个序列:
names = ["张三", "李四", "王五"]
ages = [20, 25, 30]
cities = ["北京", "上海", "广州"]
for name, age, city in zip(names, ages, cities):
print(f"{name} 今年 {age} 岁,住在 {city}")
(二)while 循环¶
基本用法:
使用 while 循环读取输入:
total = 0
count = 0
while True:
number = input("请输入数字(输入 'q' 退出):")
if number.lower() == 'q':
break
try:
num = float(number)
total += num
count += 1
print(f"当前总和:{total}")
except ValueError:
print("请输入有效的数字!")
if count > 0:
print(f"平均值:{total / count}")
else:
print("没有输入任何数字")
使用 else 子句:
count = 0
while count < 5:
print(count)
count += 1
else:
print("循环正常结束")
# 输出:
# 0
# 1
# 2
# 3
# 4
# 循环正常结束
(三)循环控制语句¶
break 语句:
# 在循环中找到第一个偶数
numbers = [1, 3, 5, 7, 9, 2, 4, 6]
for num in numbers:
if num % 2 == 0:
print(f"找到第一个偶数:{num}")
break
else:
print(f"{num} 是奇数")
# 输出:
# 1 是奇数
# 3 是奇数
# 5 是奇数
# 7 是奇数
# 9 是奇数
# 找到第一个偶数:2
continue 语句:
嵌套循环中的 break 和 continue:
# 打印乘法表中的偶数乘积
for i in range(1, 6):
for j in range(1, 6):
product = i * j
if product % 2 != 0:
continue # 跳过奇数乘积
print(f"{i} × {j} = {product}")
pass 语句:
# pass 是空操作,什么都不做
if True:
pass # 这里需要代码,但暂时不想写
for i in range(10):
pass # 什么都不做
def do_nothing():
pass # 空函数
(四)循环与条件结合¶
在循环中使用条件:
# 找出列表中的最大值
numbers = [3, 7, 2, 9, 1, 5]
max_value = numbers[0]
for num in numbers:
if num > max_value:
max_value = num
print(f"最大值:{max_value}") # 最大值:9
筛选数据:
# 筛选出偶数
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = []
for num in numbers:
if num % 2 == 0:
evens.append(num)
print(f"偶数:{evens}") # 偶数:[2, 4, 6, 8, 10]
第三章:异常处理¶
(一)基本异常处理¶
try-except 语句:
多个 except 块:
try:
number = int(input("请输入一个整数:"))
result = 10 / number
print(f"结果:{result}")
except ValueError:
print("请输入有效的整数!")
except ZeroDivisionError:
print("不能除以零!")
except Exception as e:
print(f"发生未知错误:{e}")
try-except-else 语句:
try:
number = int(input("请输入一个整数:"))
except ValueError:
print("请输入有效的整数!")
else:
# 没有异常时执行
print(f"你输入的数字是:{number}")
try-except-finally 语句:
try:
file = open("example.txt", "r")
content = file.read()
print(content)
except FileNotFoundError:
print("文件不存在!")
finally:
# 无论是否发生异常都会执行
if 'file' in locals():
file.close()
print("文件已关闭")
(二)抛出异常¶
raise 语句:
def divide(a, b):
if b == 0:
raise ValueError("除数不能为零")
return a / b
try:
result = divide(10, 0)
except ValueError as e:
print(f"错误:{e}")
自定义异常:
class CustomError(Exception):
"""自定义异常类"""
def __init__(self, message):
self.message = message
super().__init__(self.message)
def validate_age(age):
if age < 0:
raise CustomError("年龄不能为负数")
if age > 150:
raise CustomError("年龄不能超过150岁")
return True
try:
validate_age(-5)
except CustomError as e:
print(f"验证失败:{e.message}")
(三)异常处理的最佳实践¶
具体捕获异常:
# 好的做法:捕获具体的异常
try:
number = int(input("请输入一个整数:"))
except ValueError:
print("请输入有效的整数!")
# 不好的做法:捕获所有异常
try:
number = int(input("请输入一个整数:"))
except Exception as e:
print(f"发生错误:{e}")
使用 else 和 finally:
def process_file(filename):
try:
file = open(filename, "r")
content = file.read()
except FileNotFoundError:
print(f"文件 {filename} 不存在")
return None
except IOError:
print(f"读取文件 {filename} 时出错")
return None
else:
# 成功读取文件
return content
finally:
# 确保文件被关闭
if 'file' in locals():
file.close()
第四章:综合实例¶
实例1:猜数字游戏¶
import random
def guess_number_game():
"""猜数字游戏"""
# 生成随机数(1-100)
secret_number = random.randint(1, 100)
attempts = 0
max_attempts = 10
print("欢迎来到猜数字游戏!")
print(f"我想了一个 1 到 100 之间的数字,你有 {max_attempts} 次机会来猜它。")
while attempts < max_attempts:
try:
guess = int(input(f"第 {attempts + 1} 次尝试,请输入你的猜测:"))
if guess < 1 or guess > 100:
print("请输入 1 到 100 之间的整数!")
continue
attempts += 1
if guess < secret_number:
print("太小了!")
elif guess > secret_number:
print("太大了!")
else:
print(f"恭喜你!{attempts} 次就猜对了!")
return
remaining_attempts = max_attempts - attempts
if remaining_attempts > 0:
print(f"你还有 {remaining_attempts} 次机会")
except ValueError:
print("请输入有效的整数!")
print(f"很遗憾,你没有在 {max_attempts} 次内猜对。正确答案是 {secret_number}")
# 运行游戏
guess_number_game()
实例2:学生成绩管理系统¶
def grade_management():
"""学生成绩管理系统"""
students = []
while True:
print("\n===== 学生成绩管理系统 =====")
print("1. 添加学生")
print("2. 查看所有学生")
print("3. 查找学生")
print("4. 删除学生")
print("5. 退出")
choice = input("请选择操作(1-5):")
if choice == "1":
# 添加学生
name = input("请输入学生姓名:")
try:
score = float(input("请输入学生成绩(0-100):"))
if score < 0 or score > 100:
print("成绩必须在 0 到 100 之间!")
continue
students.append({"name": name, "score": score})
print(f"学生 {name} 添加成功!")
except ValueError:
print("请输入有效的成绩!")
elif choice == "2":
# 查看所有学生
if not students:
print("没有学生记录!")
else:
print("\n===== 学生列表 =====")
for i, student in enumerate(students, 1):
print(f"{i}. 姓名:{student['name']},成绩:{student['score']}")
elif choice == "3":
# 查找学生
if not students:
print("没有学生记录!")
continue
name = input("请输入要查找的学生姓名:")
found = False
for student in students:
if student['name'] == name:
print(f"姓名:{student['name']},成绩:{student['score']}")
found = True
break
if not found:
print(f"没有找到学生 {name}!")
elif choice == "4":
# 删除学生
if not students:
print("没有学生记录!")
continue
name = input("请输入要删除的学生姓名:")
found = False
for i, student in enumerate(students):
if student['name'] == name:
del students[i]
print(f"学生 {name} 删除成功!")
found = True
break
if not found:
print(f"没有找到学生 {name}!")
elif choice == "5":
# 退出
print("感谢使用学生成绩管理系统!")
break
else:
print("无效的选择,请重新输入!")
# 运行系统
grade_management()
实例3:简单的计算器¶
def calculator():
"""简单计算器"""
print("===== 简单计算器 =====")
print("支持的操作:+(加)、-(减)、*(乘)、/(除)、%(取余)、**(幂)")
while True:
try:
# 输入第一个数字
num1 = float(input("请输入第一个数字(输入 'q' 退出):"))
if str(num1).lower() == 'q':
break
# 输入操作符
operator = input("请输入操作符(+、-、*、/、%、**):")
if operator not in ['+', '-', '*', '/', '%', '**']:
print("无效的操作符!")
continue
# 输入第二个数字
num2 = float(input("请输入第二个数字:"))
# 计算结果
if operator == '+':
result = num1 + num2
elif operator == '-':
result = num1 - num2
elif operator == '*':
result = num1 * num2
elif operator == '/':
if num2 == 0:
print("错误:不能除以零!")
continue
result = num1 / num2
elif operator == '%':
if num2 == 0:
print("错误:不能除以零!")
continue
result = num1 % num2
elif operator == '**':
result = num1 ** num2
# 输出结果
print(f"结果:{num1} {operator} {num2} = {result}")
except ValueError:
print("请输入有效的数字!")
except Exception as e:
print(f"发生错误:{e}")
# 运行计算器
calculator()
第五章:练习题目¶
基础练习¶
- 条件语句
- 编写程序,判断一个数字是正数、负数还是零
- 编写程序,根据成绩判断等级(A、B、C、D、F)
-
编写程序,判断一年是否为闰年
-
循环语句
- 计算 1 到 100 的和
- 打印九九乘法表
-
找出 1 到 1000 中的所有质数
-
异常处理
- 编写程序,安全地读取用户输入的整数
- 编写程序,安全地读取文件内容
- 编写程序,处理除以零的异常
进阶练习¶
- 综合应用
- 编写程序,计算斐波那契数列的前 n 项
- 编写程序,找出数组中的最大值和最小值
-
编写程序,实现冒泡排序算法
-
嵌套循环
- 打印菱形图案
- 打印杨辉三角
-
打印螺旋矩阵
-
函数式编程
- 使用 map() 函数处理列表
- 使用 filter() 函数筛选列表
- 使用 reduce() 函数计算列表元素的和
竞赛练习¶
- 算法实现
- 实现快速排序算法
- 实现二分查找算法
-
实现深度优先搜索(DFS)
-
数据结构
- 实现栈(后进先出)
- 实现队列(先进先出)
-
实现链表
-
综合项目
- 实现一个简单的待办事项应用
- 实现一个简单的记事本应用
- 实现一个简单的计算器应用
恭喜你完成了 Python 基础语法(二)的学习!继续学习下一章,掌握更多 Python 知识!