Python基础语法练习题:变量、循环与函数经典案例解析

白榆
白榆
发布时间:2026-10-23| 8人浏览过
原创

掌握编程语言的核心不在于死记硬背概念,而在于把变量、控制流程和模块化组织串联起来解决实际问题。本文精选了初学者学习Python时最具代表性的三类基础练习题,分别聚焦变量引用与解包、循环逻辑与边界控制、函数封装与可变参数,通过具体的代码实现、案例分析和执行流程推导,帮助读者吃透关键逻辑并规避常见的语法陷阱。

一、变量练习题:数据交换、引用机制与多变量解包

变量在Python中本质上是一个绑定到内存对象的标签。理解变量的赋值机制与解包操作,是写出地道Python代码的第一步。

练习题1:不引入第三变量完成数值交换与列表元素更新

题目要求:给定两个变量 a = 10 和 b = 20,使用一行代码完成两者的值互换;随后给定列表 nums = [1, 2, 3, 4, 5],要求使用解包语法将列表的首个元素赋给 head,最后一个元素赋给 tail,中间所有元素打包存储在 middle 中。

代码实现:

# 1. 变量交换
a = 10
b = 20
a, b = b, a
print(f"交换后: a = {a}, b = {b}")

# 2. 星号表达式解包
nums = [1, 2, 3, 4, 5]
head, *middle, tail = nums
print(f"head = {head}")
print(f"middle = {middle}")
print(f"tail = {tail}")
示例输出: 交换后: a = 20, b = 10
head = 1
middle = [2, 3, 4]
tail = 5

案例解析与关键要点:

在传统的C或Java语言中,交换两个变量通常需要借由临时变量 temp 暂存。而在Python中,a, b = b, a 的执行过程分为两步:首先计算右侧表达式,在内存中构建一个临时的元组 (b, a),然后由Python解释器依次将其解包赋值给左侧的变量 a 和 b。这种原子化解包避免了变量覆盖问题。

在第二部分中,扩展解包操作符 * 可以捕获任意长度的连续元素并以列表形式存入 middle。当列表元素数量变动时,只要保证有首尾元素,该解包语法均可安全工作。

避坑提醒:赋值语句中星号解包变量只能出现一次。例如 *first, *second = nums 会直接抛出 SyntaxError: multiple starred expressions in assignment。
Python基础语法练习题:变量、循环与函数经典案例解析
图1:Python变量多元赋值与解包的底层求值过程

二、循环练习题:流程推演与嵌套结构经典案例

循环是算法控制的基础。初学者在编写循环时,容易在边界条件(Off-by-one)、累加变量作用域以及循环跳出逻辑上产生混淆。

练习题2:逢七过(FizzBuzz变体)与偶数累加求和

题目要求:统计 1 到 100(包含100)之间所有满足“能够被7整除”或“个位数字是7”的正整数,将它们存储到列表中,并计算这些数字的总和;循环过程中,若遇到大于80且能被5整除的数,直接跳出循环。

代码实现:

matched_numbers = []
total_sum = 0

for num in range(1, 101):
    # 中断检查
    if num > 80 and num % 5 == 0:
        print(f"触发中断条件,当前数值: {num}")
        break

    # 逢七规则过滤
    is_divisible_by_7 = (num % 7 == 0)
    ends_with_7 = (num % 10 == 7)

    if is_divisible_by_7 or ends_with_7:
        matched_numbers.append(num)
        total_sum += num

print(f"符合条件的列表: {matched_numbers}")
print(f"累计总和: {total_sum}")
示例输出: 触发中断条件,当前数值: 85
符合条件的列表: [7, 14, 17, 21, 27, 28, 35, 37, 42, 47, 49, 56, 57, 63, 67, 70, 77]
累计总和: 683

案例解析:

range(1, 101) 生成区间为左闭右开 [1, 101),恰好覆盖 1 到 100。在循环体内,break 语句会立即终结整个循环结构的执行,而 continue 仅结束当次迭代进入下一轮。在编写此类过滤逻辑时,将高优先级的提前终止或过滤判断置于循环体前段,能够使代码逻辑更扁平清晰。

练习题3:嵌套循环打印九九乘法表并格式化对齐

题目要求:使用双重循环输出标准的九九乘法表,要求每列之间左对齐,并保持整齐的三角梯形结构。

代码实现:

for i in range(1, 10):
    for j in range(1, i + 1):
        # 格式化输出,保持每个式子占8字符宽度
        print(f"{j}x{i}={i * j:<2}", end="  ")
    print()  # 每行输出完毕换行
Python基础语法练习题:变量、循环与函数经典案例解析
图2:嵌套循环迭代与控制边界推演图

三、函数练习题:参数解包、作用域与默认参数陷阱

函数是代码组织与复用的核心单元。理解局部作用域与全局作用域的划分,掌握位置参数、关键字参数与默认参数的绑定机制,是写出健壮代码的关键。

练习题4:多功能统计函数与可变参数设计

题目要求:编写一个名为 calculate_stats 的函数,支持传入任意数量的数值参数(通过 *args),并支持一个关键字参数 round_digits(默认保留2位小数)。函数需返回一个包含最大值、最小值、平均值和总和的字典。若未传入任何有效数值,则优雅返回 None。

代码实现:

def calculate_stats(*args, round_digits=2):
    """
    计算任意数量数字的统计信息
    :param args: 位置参数传入数值
    :param round_digits: 保留小数位数
    :return: 统计字典或None
    """
    if not args:
        return None

    total = sum(args)
    count = len(args)
    avg = round(total / count, round_digits)
    max_val = max(args)
    min_val = min(args)

    return {
        "max": max_val,
        "min": min_val,
        "average": avg,
        "sum": total
    }

# 测试调用
sample_data = [12.4, 45.1, 88.0, 3.2, 56.7]
res = calculate_stats(*sample_data, round_digits=1)
print(f"统计结果: {res}")
示例输出: 统计结果: {'max': 88.0, 'min': 3.2, 'average': 41.1, 'sum': 205.4}

案例解析与关键避坑:

在设计函数参数时,初学者极易踩入“默认参数使用可变对象”的坑。考虑以下经典错误示例:

# 常见错误写法:使用列表作为默认参数
def append_item(item, target_list=[]):
    target_list.append(item)
    return target_list

print(append_item(1))  # [1]
print(append_item(2))  # 输出 [1, 2],而非预期的 [2]!

原因剖析:Python中的默认参数在函数被解释器定义(def 语句执行)时就已经完成求值并分配内存,而不是在每次调用时重新创建。如果默认参数是列表或字典等可变对象,多次调用同一函数将共享该默认对象。正确写法应当使用 None 作为哨兵值:

# 正确规范写法
def append_item(item, target_list=None):
    if target_list is None:
        target_list = []
    target_list.append(item)
    return target_list
Python基础语法练习题:变量、循环与函数经典案例解析
图3:函数调用时的参数传递与局部作用域生命周期图示

四、综合案例:基于函数、循环与变量的模拟成绩分析器

综合实践是检验基础知识融合能力的最佳手段。下面我们编写一个完整的学生成绩等级统计器,将变量解包、多分支判断、循环遍历以及函数封装有机结合。

练习题5:综合学生成绩分析器

题目要求:实现函数 grade_analyzer(records),接收包含多个 (姓名, 分数) 元组的列表。函数需按以下规则给出评级:90分及以上为A,80-89为B,70-79为C,60-69为D,60以下为F。最终输出全班平均分,以及获得各等级的人数统计字典。

完整实现代码:

def get_grade_level(score):
    """根据分数返回等级标签"""
    if score >= 90:
        return 'A'
    elif score >= 80:
        return 'B'
    elif score >= 70:
        return 'C'
    elif score >= 60:
        return 'D'
    else:
        return 'F'

def grade_analyzer(student_records):
    if not student_records:
        return {"average": 0.0, "distribution": {}}

    total_score = 0
    grade_distribution = {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'F': 0}

    # 循环遍历并解包元组
    for name, score in student_records:
        total_score += score
        level = get_grade_level(score)
        grade_distribution[level] += 1

    avg_score = round(total_score / len(student_records), 2)

    return {
        "average": avg_score,
        "distribution": grade_distribution
    }

# 样例输入测试
students = [
    ("小明", 92),
    ("小华", 78),
    ("小红", 85),
    ("小李", 59),
    ("小张", 88)
]

report = grade_analyzer(students)
print(f"分析报告: {report}")
示例输出: 分析报告: {'average': 80.4, 'distribution': {'A': 1, 'B': 2, 'C': 1, 'D': 0, 'F': 1}}

综合逻辑总结:

在上述案例中,我们实现了职责分离:get_grade_level 仅负责单一分数的映射计算,而 grade_analyzer 负责循环遍历聚合与宏观统计。通过解包元组 for name, score in student_records,代码不仅表意直观,而且避免了低效的索引切片调用。

五、基础语法学习路径与知识结构总结

从变量的标签绑定,到循环的迭代步进,再到函数的模块化封装,三者共同构成了Python命令式编程的基石。在掌握这些基本构件后,下一步建议深入理解生成器表达式、列表推导式以及闭包和装饰器等进阶概念。

Python基础语法练习题:变量、循环与函数经典案例解析
图4:Python基础语法技能演进与知识架构图
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。