Python使用2D list实现周度面条销量统计触发IndexError排错求助
2D列表销售统计程序IndexError根因定位与修复
触发报错的根本原因
你遇到的IndexError: list index out of range,核心是外层2D列表的初始化长度和访问索引范围完全不匹配:
- 初始定义
Sales = [[]]时,外层列表只包含1个空的子列表,有效可访问的索引仅为0。 - 代码逻辑需要存储7天的独立销售数据,对应需要7个单独的子列表。当while循环执行到i=1(处理周二数据的环节)时,代码运行到
arr[i].append(...)步骤,试图访问外层列表索引为1的元素,该元素从未被定义,直接触发索引越界。
代码隐藏的计算逻辑问题
除了直接触发报错的初始化缺陷,代码还有一个会导致计算结果失真的逻辑漏洞:
- 用于累加当日销售额的变量
total_per_day = 0定义在while循环外部,变量初始化仅执行一次,后续每日的销售额累加会带着前一天的总额值,最终存入列表的“当日总额”实际上是从周一到当天的累计销售额,并非单日的独立销售总额。
可直接运行的修复版本
# 提前初始化7个独立的空子列表,匹配7天的存储需求,避免索引越界 Sales = [[] for _ in range(7)] def enterSales(arr): i = 0 # 将固定映射的字典移到循环外定义,减少冗余重复创建 day = { 0: "Monday", 1: "Tuesday", 2: "Wednesday", 3: "Thursday", 4: "Friday", 5: "Saturday", 6: "Sunday" } noodle_type = { 0: "Dried", 1: "Dark", 2: "Spicy", } while i < 7: # 每日处理前将单日总额清零,避免跨天累加 total_per_day = 0 print("Enter " + day[i] + " sales for...") for j in range(3): arr[i].append(int(input(noodle_type[j] + " noodle: "))) # 累加当日对应品类的销售额 total_per_day += arr[i][j] # 将单日总额存入当日的子列表末尾 arr[i].append(total_per_day) i += 1 def totalWeeklySales(arr): total_sales_per_week = 0 for i in range(7): # 每个日子列表的第4个元素(索引3)就是当日总额 total_sales_per_week += arr[i][3] return total_sales_per_week enterSales(Sales) value = totalWeeklySales(Sales) print("Total sales of the week is", value, ".")
内容的提问来源于stack exchange,提问作者user12911503
相关产品推荐
相关产品推荐

