如何修复输入整数验证时出现的IndexError: list index out of range
问题修复方案
错误根源
- 验证状态未重置:
score_valid变量在首次玩家输入验证通过后保持为True,后续5轮玩家循环会直接跳过输入逻辑,导致player_scores列表仅添加1个元素,计算总分时访问索引1-5自然触发IndexError。 - 输入验证逻辑无效:
type(int(score_input)) == int完全多余,且若用户输入非数字内容,int(score_input)会直接抛出ValueError崩溃程序,根本走不到错误提示分支。
修复后的代码
分数输入循环(修正版)
# 初始化分数列表(如果之前未定义) player_scores = [] # 循环处理6位玩家的分数输入 for x in range(6): score_valid = False # 每轮玩家输入前重置验证状态 while not score_valid: score_input = input("\n" + str(player_names[x]) + ", enter the number of hits you scored: ") try: # 尝试将输入转为整数,成功则完成验证 score = int(score_input) score_valid = True player_scores.append(score) except ValueError: # 转换失败时提示重新输入 print("Invalid input, please enter an integer. Try again.")
总分计算优化版
原循环逻辑在列表长度正确时可正常运行,但用sum()函数更简洁高效:
# 直接计算列表所有元素的总和 total = sum(player_scores)
核心优化点
- 将
score_valid的初始化放入for循环内部,确保每位玩家都能进入输入验证流程。 - 用
try-except捕获整数转换异常,这是Python处理用户输入验证的标准方式,避免非数字输入导致程序崩溃。 - 利用内置
sum()函数替代手动循环求和,减少代码冗余和出错概率。
内容的提问来源于stack exchange,提问作者crashlanding
相关产品推荐
相关产品推荐

