Python基础语法作业答案:变量、循环与条件判断代码示例
提供针对Python基础语法作业中变量定义、条件分支判断与循环结构的完整参考答案和代码示例,深入解析变量引用机制、if-elif执行逻辑以及循环控制细节。
作业一:变量定义、类型转换与数据处理
在程序设计中,变量是保存和管理计算状态的基础。初学者在处理变量时,最常遇到的问题在于输入字符串未转换为数值便直接参与数学运算,从而触发 TypeError 或字符串拼接异常。
1. 作业题目要求
编写一段程序,接收用户输入的商品单价(浮点数)与购买数量(整数),计算出折扣前的原始总额;若商品总额达到 100 元,享受 9 折优惠,最终输出保留两位小数的实付金额与明细账单。
2. 参考代码答案
# -*- coding: utf-8 -*-
# 作业一:商品结算与类型转换
# 1. 模拟输入数据(亦可替换为 input() 函数)
input_price = "24.50"
input_quantity = "5"
# 2. 强制类型转换:字符串转浮点数与整数
price = float(input_price)
quantity = int(input_quantity)
# 3. 变量算术运算
subtotal = price * quantity
# 4. 条件计算折扣
if subtotal >= 100.0:
discount = 0.90
discount_label = "10% 折扣"
else:
discount = 1.00
discount_label = "无折扣"
final_total = subtotal * discount
# 5. 格式化输出账单(使用 f-string 控制小数精度)
print("=" * 30)
print(f"商品单价: ¥{price:.2f}")
print(f"购买数量: {quantity} 件")
print(f"原始金额: ¥{subtotal:.2f}")
print(f"享受优惠: {discount_label}")
print(f"实付总计: ¥{final_total:.2f}")
print("=" * 30)
==============================
商品单价: ¥24.50
购买数量: 5 件
原始金额: ¥122.50
享受优惠: 10% 折扣
实付总计: ¥110.25
==============================
3. 原理剖析:Python 的变量“标签引用”模型
与其他诸如 C/C++ 等静态编译语言不同,Python 中的变量并非在栈内存中开辟一段固定字节的“存储盒子”。在 Python 底层,所有数据均以独立对象(Object)的形式存储于堆内存中,变量名本质上是一个指向该对象的“引用标签”。
int)与浮点数(float)在 Python 中是不可变对象(Immutable)。当对已有变量 subtotal = subtotal * discount 重新赋值时,并不是直接在原内存区域覆写数据,而是计算出新的数值对象并将 subtotal 标签指向新对象,原有旧对象若无其他引用,将由垃圾回收器(GC)自动释放。
作业二:条件判断与多分支决策(if / elif / else)
条件判断语句用于根据不同的业务规则导向不同的执行流程。初学者在编写多分支逻辑时,最容易犯的错误是混淆“连续独立 if 语句”与“互斥梯队 if-elif-else 结构”。
1. 作业题目要求
设计一个成绩分级判定模块:输入一个百分制成绩(0 至 100 分),判定其等级。标准如下:90 分及以上为 A(优秀),80 到 89 分为 B(良好),70 到 79 分为 C(中等),60 到 69 分为 D(及格),60 分以下为 F(不合格)。若输入小于 0 或大于 100,则输出报错提示。
2. 参考代码答案
# -*- coding: utf-8 -*-
# 作业二:成绩分级评定系统
score = 85.5
# 第一步:边界防御性检查
if score < 0 or score > 100:
print(f"输入错误:成绩 {score} 超出合法范围(0-100)")
else:
# 第二步:互斥分支阶梯判定
if score >= 90:
level = "A (优秀)"
elif score >= 80:
level = "B (良好)"
elif score >= 70:
level = "C (中等)"
elif score >= 60:
level = "D (及格)"
else:
level = "F (不合格)"
print(f"学员成绩: {score} 分,评定等级: {level}")
学员成绩: 85.5 分,评定等级: B (良好)
3. 核心机制对比:连续 if 与 if-elif 的关键差异与影响
为了深入理解条件判断的底层执行过程,我们设定一致的前提条件:输入变量 score = 92。对比两种书写方式在执行机制上的根本区别:
差异一:执行开销与求值次数。连续独立 if 语句无论前序条件是否成立,解释器都必须逐行对后续所有 if 表达式进行求值判定;而在 if-elif-else 结构中,一旦高优先级的条件为真,后续所有 elif 与 else 将被自动“短路跳过”,不再消耗任何计算资源。
差异二:状态穿透与逻辑颠覆。如果在连续 if 中,开发者将判断顺序误写为 if score >= 60: grade = 'D' 在前,而 if score >= 90: grade = 'A' 在后,虽然 92 分满足第一个条件并赋值为 D,但最终会被后面的 A 覆盖;但反过来,若先执行 if score >= 90: grade = 'A',紧接着 if score >= 60: grade = 'D',最终输出将会被错误地覆写为 D!这就是典型的逻辑穿透 Bug。采用 if-elif 结构配合由严至宽的排列,能从语法层面杜绝多重赋值。
作业三:循环结构应用(for 与 while 的实战对比)
循环结构用于让计算机自动重复执行特定运算。Python 提供了两类循环:for 循环与 while 循环。选错循环类型往往会导致代码冗长或潜藏死循环危机。
1. 作业题目要求
任务 A:计算 1 到 20 之间所有偶数的平方和;
任务 B:模拟一个用户认证重试系统,设定最多允许尝试 3 次,输入正确密码时立即退出循环,超过上限提示锁定。
2. 参考代码答案
# -*- coding: utf-8 -*-
# 作业三 (A):使用 for 循环计算偶数平方和
even_square_sum = 0
for num in range(1, 21):
if num % 2 == 0:
even_square_sum += num ** 2
print(f"1到20之间所有偶数的平方和为: {even_square_sum}")
# 作业三 (B):使用 while 循环控制交互重试
target_pin = "8866"
attempts = 0
max_attempts = 3
auth_success = False
# 模拟用户的连续输入序列
mock_user_inputs = ["1234", "8866"]
while attempts < max_attempts:
current_input = mock_user_inputs[attempts]
attempts += 1
if current_input == target_pin:
auth_success = True
print(f"第 {attempts} 次验证成功:密码正确!")
break
else:
print(f"第 {attempts} 次验证失败:密码错误,还剩 {max_attempts - attempts} 次机会")
if not auth_success:
print("账户已连续输错3次,已被临时锁定。")
1到20之间所有偶数的平方和为: 1540
第 1 次验证失败:密码错误,还剩 2 次机会
第 2 次验证成功:密码正确!
3. 执行步骤推导与两种循环的使用边界
无论是 for 还是 while,其底层执行模型均遵循“初始化、条件求值、执行体运行、状态步进”的完整生命周期。
在作业与实际工程中,两者的最佳选型标准如下:
- 使用
for循环的场景:当迭代次数在运行前即可确定,或需要直接遍历序列、列表、字典及生成器对象(如range())时。for循环会自动管理迭代器步进,从机制上杜绝了忘记更新计数器导致的死循环。 - 使用
while循环的场景:循环的终止不取决于固定次数,而是依赖某个动态布尔状态(如网络重试、用户等待、传感器数据就绪等)。使用while必须确保循环体内包含能促使终止条件变为 False 的状态改变语句。
作业四:综合实战——列表筛选、统计与多重条件组合
该题目是期末考试或日常作业中最常见的综合大题,要求将变量累加器、列表循环遍历与多重嵌套条件判断紧密协同起来。
1. 作业题目要求
给定一个混杂正数、负数与零的整数列表,要求编写程序统计:
1. 正偶数的个数与总和;
2. 负数的总个数;
3. 排除零值后的全量数值中,最大值与最小值。
2. 参考代码答案
# -*- coding: utf-8 -*-
# 作业四:综合数据统计与条件过滤
raw_data = [12, -7, 0, 18, -3, 24, -15, 0, 9, 30]
# 初始化统计变量
positive_even_count = 0
positive_even_sum = 0
negative_count = 0
filtered_values = []
# 循环遍历列表并执行组合判定
for item in raw_data:
# 统计正偶数
if item > 0 and item % 2 == 0:
positive_even_count += 1
positive_even_sum += item
# 统计负数
if item < 0:
negative_count += 1
# 收集非零数据用于极值统计
if item != 0:
filtered_values.append(item)
# 计算极值(注意空列表防御)
if filtered_values:
max_val = filtered_values[0]
min_val = filtered_values[0]
for val in filtered_values:
if val > max_val:
max_val = val
if val < min_val:
min_val = val
else:
max_val = min_val = None
# 输出统计指标
print("=" * 35)
print(f"原始数据规模: {len(raw_data)} 项")
print(f"正偶数个数: {positive_even_count},其累加和: {positive_even_sum}")
print(f"负数总个数: {negative_count}")
print(f"有效非零项极值: 最大值={max_val}, 最小值={min_val}")
print("=" * 35)
===================================
原始数据规模: 10 项
正偶数个数: 4,其累加和: 84
负数总个数: 3
有效非零项极值: 最大值=30, 最小值=-15
===================================
总结与自查清单
变量、循环与条件判断构成了所有命令式编程的“图灵完备”骨架。在完成作业提交前,建议对照下方知识协同地图进行全面自查。
| 检查维度 | 高频错误表现 | 推荐排查与规范做法 |
|---|---|---|
| 数据类型转换 | "10" + 5 引发 TypeError 或结果变成 "105" |
明确数据来源,使用 int() / float() 显式转换后再进行运算。 |
| 分支条件排他性 | 使用平行 if 造成判定穿透覆盖 |
多状态判定必须采用 if-elif-else 阶梯,严格按由高至低或由窄到宽排列。 |
| 循环边界与迭代器 | while 循环忘记递增 i += 1 导致 CPU 100% 死循环 |
固定次数或集合遍历首选 for ... in;使用 while 时优先检查步进收敛。 |
| 极值与初始值设定 | 求最小值时误将 min_val 设为 0,导致无法统计全是正数的列表 |
初始值应绑定为列表第一个真实元素 lst[0],或使用 float('inf')。 |
按照上述规范编写代码,不仅能够顺利通过作业中的自动化单元测试用例,更能在初学阶段建立清晰、稳健的逻辑思维习惯。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









