Python列表实验出现IndexError,求符合要求的代码解决方案
解决IndexError问题:循环创建50个列表并实现计数功能
嘿,我来帮你搞定这个报错!你遇到的IndexError: list assignment index out of range,大概率是两个常见问题导致的,咱们一步步理清楚:
错误原因分析
- 子列表未初始化元素:如果你只是创建了50个空列表(比如
lists = [[] for _ in range(50)]),直接去执行lists[num][0] +=1时,每个子列表是空的,根本没有索引为0的元素,自然会报错。 - 输入的数字超出索引范围:50个列表的索引是从0到49(Python列表索引从0开始),如果输入的数字是50或者负数,就会超出列表的合法索引范围,触发越界错误。
正确实现代码
下面是符合要求的完整代码,解决了上述两个问题:
# 初始化50个列表,每个列表包含一个初始值为0的计数器 counters = [[0] for _ in range(50)] while True: try: user_input = input("请输入0-49之间的数字(输入q可退出):") # 退出逻辑 if user_input.lower() == 'q': print("程序退出") break # 转换输入为整数 target_index = int(user_input) # 检查索引是否合法 if 0 <= target_index < 50: # 对应列表的数值加1 counters[target_index][0] += 1 print(f"已更新:第{target_index}个列表的数值为{counters[target_index][0]}") else: print("提示:请输入0到49之间的有效数字!") except ValueError: print("提示:请输入数字或q退出!")
代码说明
- 初始化列表:用列表推导式创建50个列表,每个子列表初始包含一个
0,确保后续可以直接对索引0的元素进行加1操作。 - 输入验证:
- 捕获
ValueError,防止用户输入非数字内容。 - 检查输入的数字是否在0-49范围内,避免索引越界。
- 捕获
- 循环接收输入:通过
while True持续接收用户输入,直到输入q退出程序。
如果题目要求输入的数字是1-50(对应第1到第50个列表),只需要把target_index = int(user_input)改成target_index = int(user_input) - 1即可,这样输入1就对应索引0,输入50对应索引49,依然符合合法范围。
内容的提问来源于stack exchange,提问作者Harrison Anesh
相关产品推荐
相关产品推荐

