跳转至

Python 基础语法(二)- 控制流程

本章将介绍 Python 的控制流程,包括条件语句、循环语句和异常处理。这些是编程中必不可少的控制结构,能够让你的程序根据不同的条件执行不同的代码路径,或者重复执行某些操作。

第一章:条件语句

(一)if 语句

基本 if 语句:

age = 18

if age >= 18:
    print("你已经成年了!")

if-else 语句:

age = 16

if age >= 18:
    print("你已经成年了!")
else:
    print("你还未成年!")

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 循环

遍历字符串:

text = "Python"
for char in text:
    print(char)

# 输出:
# P
# y
# t
# h
# o
# n

遍历列表:

fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
    print(f"我喜欢吃{fruit}")

使用 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 循环

基本用法:

count = 0
while count < 5:
    print(count)
    count += 1

# 输出:
# 0
# 1
# 2
# 3
# 4

使用 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 语句:

# 打印 1 到 10 中的奇数
for i in range(1, 11):
    if i % 2 == 0:
        continue
    print(i)

# 输出:
# 1
# 3
# 5
# 7
# 9

嵌套循环中的 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 语句:

try:
    # 可能抛出异常的代码
    result = 10 / 0
except ZeroDivisionError:
    # 处理除以零异常
    print("不能除以零!")

多个 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()

第五章:练习题目

基础练习

  1. 条件语句
  2. 编写程序,判断一个数字是正数、负数还是零
  3. 编写程序,根据成绩判断等级(A、B、C、D、F)
  4. 编写程序,判断一年是否为闰年

  5. 循环语句

  6. 计算 1 到 100 的和
  7. 打印九九乘法表
  8. 找出 1 到 1000 中的所有质数

  9. 异常处理

  10. 编写程序,安全地读取用户输入的整数
  11. 编写程序,安全地读取文件内容
  12. 编写程序,处理除以零的异常

进阶练习

  1. 综合应用
  2. 编写程序,计算斐波那契数列的前 n 项
  3. 编写程序,找出数组中的最大值和最小值
  4. 编写程序,实现冒泡排序算法

  5. 嵌套循环

  6. 打印菱形图案
  7. 打印杨辉三角
  8. 打印螺旋矩阵

  9. 函数式编程

  10. 使用 map() 函数处理列表
  11. 使用 filter() 函数筛选列表
  12. 使用 reduce() 函数计算列表元素的和

竞赛练习

  1. 算法实现
  2. 实现快速排序算法
  3. 实现二分查找算法
  4. 实现深度优先搜索(DFS)

  5. 数据结构

  6. 实现栈(后进先出)
  7. 实现队列(先进先出)
  8. 实现链表

  9. 综合项目

  10. 实现一个简单的待办事项应用
  11. 实现一个简单的记事本应用
  12. 实现一个简单的计算器应用

恭喜你完成了 Python 基础语法(二)的学习!继续学习下一章,掌握更多 Python 知识!