Python嵌套循环工时统计问题:总工时累加错误与输出优化需求
Python研究助理工时统计问题修正
我们需要实现的功能是:收集3名研究助理5个工作日的工时数据,计算每人的周总工时,若日均工时超过6小时则进行标记,并且要求先完成所有输入收集,再统一输出结果。
原代码问题分析
原代码尝试用嵌套循环实现,但存在三个核心问题:
- 全局变量
hoursWorked未在每个助理的统计循环中重置,导致不同助理的工时持续累加,无法得到个体独立总工时 - 平均值计算基于累加的全局总工时,而非当前助理的独立工时,结果完全错误
- 原代码每收集完一个助理的数据就立即输出,不符合“先收集所有输入再统一输出”的要求
原代码
hoursWorked = 0 researchAssistants = 3 for assisstant in range(researchAssistants): for day in range(5): if day == 0: hoursWorked += float(input("Enter hours for research assistant {0} for Day 1: ".format(assisstant+1))) if day == 1: hoursWorked += float(input("Enter hours for research assistant {0} for Day 2: ".format(assisstant+1))) if day == 2: hoursWorked += float(input("Enter hours for research assistant {0} for Day 3: ".format(assisstant+1))) if day == 3: hoursWorked += float(input("Enter hours for research assistant {0} for Day 4: ".format(assisstant+1))) if day == 4: hoursWorked += float(input("Enter hours for research assistant {0} for Day 5: ".format(assisstant+1))) print() print("Research assistant {0} worked in total".format(assisstant+1), hoursWorked, "hours") avgHoursWorked = hoursWorked / 5 if avgHoursWorked > 6: print("Research assistant {0} has an average number of hours per day above 6".format(assisstant+1) ) print()
原代码错误输出示例
Enter hours for research assistant 1 for Day 1: 5 Enter hours for research assistant 1 for Day 2: 5 Enter hours for research assistant 1 for Day 3: 5 Enter hours for research assistant 1 for Day 4: 5 Enter hours for research assistant 1 for Day 5: 5 Research assistant 1 worked in total 25.0 hours Enter hours for research assistant 2 for Day 1: 5 Enter hours for research assistant 2 for Day 2: 5 Enter hours for research assistant 2 for Day 3: 5 Enter hours for research assistant 2 for Day 4: 5 Enter hours for research assistant 2 for Day 5: 5 Research assistant 2 worked in total 50.0 hours Research assistant 2 has an average number of hours per day above 6 Enter hours for research assistant 3 for Day 1: 5 Enter hours for research assistant 3 for Day 2: 5 Enter hours for research assistant 3 for Day 3: 5 Enter hours for research assistant 3 for Day 4: 5 Enter hours for research assistant 3 for Day 5: 5 Research assistant 3 worked in total 75.0 hours Research assistant 3 has an average number of hours per day above 6
修正后的代码
我们用列表存储每个助理的独立总工时,拆分数据收集和结果输出两个阶段,同时简化冗余的输入逻辑:
# 定义基础参数 num_assistants = 3 num_days = 5 # 存储每个助理的周总工时 total_hours_list = [] # 第一阶段:收集所有工时数据 for assistant_idx in range(num_assistants): daily_total = 0 # 每个助理的工时单独统计,每次循环重置 print(f"请输入第{assistant_idx+1}名研究助理的工时:") for day_idx in range(num_days): hours = float(input(f"第{day_idx+1}天的工时:")) daily_total += hours # 将当前助理的总工时存入列表 total_hours_list.append(daily_total) # 第二阶段:统一输出统计结果 print("\n===== 工时统计结果 =====") for idx, total_hours in enumerate(total_hours_list): assistant_num = idx + 1 avg_hours = total_hours / num_days print(f"第{assistant_num}名研究助理周总工时:{total_hours:.1f}小时") if avg_hours > 6: print(f"⚠️ 第{assistant_num}名研究助理日均工时超过6小时") print()
修正说明
- 使用列表
total_hours_list存储每个助理的独立总工时,彻底解决全局变量累加问题 - 每个助理的循环内初始化
daily_total = 0,保证个体工时从0开始统计 - 简化内层循环的输入逻辑,用
day_idx+1直接生成天数,去掉冗余的if判断 - 明确拆分数据收集和结果输出两个阶段,满足先收集再统一输出的需求
- 优化输出格式,增加分隔线和标记符号,提升可读性
修正后运行示例
输入所有日均5小时的情况
请输入第1名研究助理的工时: 第1天的工时:5 第2天的工时:5 第3天的工时:5 第4天的工时:5 第5天的工时:5 请输入第2名研究助理的工时: 第1天的工时:5 第2天的工时:5 第3天的工时:5 第4天的工时:5 第5天的工时:5 请输入第3名研究助理的工时: 第1天的工时:5 第2天的工时:5 第3天的工时:5 第4天的工时:5 第5天的工时:5 ===== 工时统计结果 ===== 第1名研究助理周总工时:25.0小时 第2名研究助理周总工时:25.0小时 第3名研究助理周总工时:25.0小时
输入某助理日均7小时的情况
... ===== 工时统计结果 ===== 第1名研究助理周总工时:35.0小时 ⚠️ 第1名研究助理日均工时超过6小时 第2名研究助理周总工时:25.0小时 第3名研究助理周总工时:25.0小时
内容的提问来源于stack exchange,提问作者wiro
相关产品推荐
相关产品推荐

