Wordle项目中遭遇“list index out of range”错误的排查求助
解决Wordle过滤逻辑中的"list index out of range"错误
错误根源
你遇到的IndexError来自两个核心问题:
- 索引越界:循环
for x in range(len(data))会让x遍历到len(data)-1,此时x+1等于列表长度,超出了列表的最大索引(列表索引从0开始,最大索引为len(data)-1)。 - 循环中修改列表长度:使用
pop()删除元素后,列表长度会缩短,但循环仍按初始的len(data)执行,后续的x会指向已不存在的位置。
另外你的原逻辑在处理重复字母时存在错误:比如当遇到C级别的项时,代码会删除C项,这和Wordle的规则(保留位置正确的绿色项)相悖。
修复方案
- 限制循环范围:因为要对比
data[x]和data[x+1],循环只需遍历到len(data)-2,避免x+1越界。 - 从后往前遍历:避免删除元素后打乱未遍历的索引顺序。
- 修正优先级逻辑:保留优先级高的项(C > W > I),删除低优先级的重复项。
修改后的完整代码
word = "APPLE" guess = "AMPLE" data = [] output = "" if len(guess) != 5: print("Guess should be 5 letters long.") if not guess.isalpha(): print("Guess should be an English word.") else: for x in range(5): for y in range(5): if word[x] == guess[y]: if x == y: data.append(guess[y] + "C" + str(y)) else: data.append(guess[y] + "W" + str(y)) else: data.append(guess[y] + "I" + str(y)) data = list(set(data)) print(data) # Test # 按位置数字排序 for i in range(len(data)): for j in range(0, len(data) - i - 1): if data[j][2] > data[j + 1][2]: data[j], data[j+1] = data[j+1], data[j] print(data) # Test # 修复后的去重逻辑:从后往前遍历,保留高优先级项 priority = {'C':3, 'W':2, 'I':1} x = len(data) - 2 while x >= 0: current_char = data[x][0] next_char = data[x+1][0] if current_char == next_char: # 比较优先级,删除低的那个 if priority[data[x][1]] < priority[data[x+1][1]]: data.pop(x) else: data.pop(x+1) x -= 1 print(data) # Test print(output)
关键修改说明
- 使用
while循环从后往前遍历,彻底避免列表长度变化导致的索引混乱。 - 定义优先级字典
priority,清晰对比不同状态的优先级,确保保留符合Wordle规则的项。 - 调整
pop()的目标:当当前项优先级低于下一项时删除当前项,否则删除下一项,保证高优先级的项被保留。
内容的提问来源于stack exchange,提问作者Troy Dave Ericson Avendano
相关产品推荐
相关产品推荐

