Python入门课程作业:实现循环数值累加、连续相同输入时终止程序
Python作业功能实现与错误修正指南
原代码现存逻辑问题
- 循环嵌套冗余:外层
while a < b与内层for n in range(b)实现了完全重复的遍历逻辑,属于无效嵌套 - 累加计算错误:原代码用
for i in range(points)重复叠加单月学分,会导致单月学分被重复计算N次(N等于当月输入的学分数值),结果完全偏离预期 - 连续输入判断缺失:没有设置专门变量存储上一次的输入值,无法识别“连续两次输入0”的终止触发条件
- 结构缩进错误:主程序入口判断
if __name__ == "__main__":被写在main函数内部,会导致程序无法正常启动执行
核心功能实现方法
1. 循环录入值的正确累加逻辑
累加求和不需要嵌套循环,只需要在函数最开始初始化总和变量为0,每一次获取到用户输入的学分数值后,直接将该值加到总和变量上即可。核心语句为:total_sum += points
注意:不要通过嵌套循环重复叠加单条录入的数值,否则会造成计算结果翻倍的错误
2. 连续两次输入0的判断与程序终止
要实现连续输入判断,需要额外定义一个状态变量,用来留存上一次的用户输入值,完整判断流程为:
- 提前初始化
last_points = None,用于存储上一次的输入记录 - 每录入一次新的学分数值,先判断:当前输入值为0 且 上一次输入值也为0
- 满足判断条件时,直接打印要求的终止提示文本,通过函数返回(或
exit())终止程序运行,不再执行后续录入与计算逻辑 - 不满足终止条件时,将当前输入值赋值给
last_points,进入下一次录入循环
修正后完整可运行代码
def main(): # 初始化累加总和、上次输入记录变量 total_sum = 0 last_points = None # 获取统计周期的月份数 input_months = input("Enter the number of months: ") month_total = int(input_months) # 逐月录入学分 for month_idx in range(1, month_total + 1): current_points = int(input(f"Enter the number of credits in month {month_idx}:")) # 触发连续两次0学分的终止逻辑 if current_points == 0 and last_points == 0: print("You did have too many study breaks!") return # 累加当月学分至总和 total_sum += current_points # 更新上次输入的记录值 last_points = current_points # 计算保留1位小数的月均学分 avg_points = round(total_sum / month_total, 1) # 根据规则输出判定结果 if avg_points >= 5: print(f"You are a full time student and your monthly credit point average is {avg_points}.") else: print(f"Your monthly credit point average {avg_points} does not classify you as a full time student.") if __name__ == "__main__": main()
功能匹配校验
- 所有输入提示文本与作业要求完全一致,月份计数从1开始连续编号
- 连续两次输入0时,立刻打印指定提示并直接退出,无多余输出
- 平均学分严格保留1位小数,全日制判定阈值为5,输出文本完全匹配作业要求
内容的提问来源于stack exchange,提问作者Hnk Mrn
相关产品推荐
相关产品推荐

