Python 3单词链(Word Chain)游戏实现遇IndexError报错求助
Fixing IndexError in Word Chain Game Code
我来帮你解决这个问题!你遇到的IndexError是因为当用户输入空行时,代码试图访问空字符串的索引(比如xx[0]),这自然会触发越界错误。另外原代码还有逻辑重复、未处理大小写不敏感的问题,我会一步步帮你修复。
错误原因分析
你的第9行while xx[0] != x[-1]:会在以下场景报错:
- 当用户在纠正无效单词时输入空行,
xx变成空字符串,此时xx[0]不存在 - 后面的
x[0] != xx[-1]也会出现同样的问题
此外原代码还存在:
- 重复的输入检查逻辑,维护起来麻烦
- 没有处理大小写不敏感的规则,比如
Tomato和okra应该被判定为有效 - 初始的循环结构不够清晰,容易出现逻辑漏洞
修复后的代码
# 初始化上一个有效单词,确保至少读取第一个单词 last_word = "" while True: current_word = input('Word: ').strip() # 输入空行则结束游戏 if not current_word: break # 处理第一个单词的情况,直接作为初始有效单词 if not last_word: last_word = current_word.lower() continue # 检查当前单词是否符合规则(大小写不敏感) while current_word.lower()[0] != last_word[-1]: print('Invalid word') current_word = input('Word: ').strip() # 如果输入空行,直接退出循环 if not current_word: break # 如果是空行,跳出外层循环结束游戏 if not current_word: break # 更新上一个有效单词为当前单词的小写形式 last_word = current_word.lower()
代码说明
- 空输入处理:每次获取输入后先
strip()去除首尾空格,然后检查是否为空,为空则直接结束游戏,彻底避免访问空字符串的索引 - 大小写不敏感:把所有单词转换为小写(
lower())后再比较,不管用户输入大写还是小写都能正确匹配规则 - 简化逻辑:用一个
last_word变量保存上一个有效单词,避免重复的代码块,逻辑更清晰易懂 - 边界处理:第一个单词不需要检查,直接作为初始的
last_word,后续每个单词都和last_word的最后一个字母比对
测试示例
比如你提供的示例1流程:
Word: tomato
Word: okra
Word: asparagus
Word: seaweed
Word: cake
Invalid word
Word: dried apricots
Word: cake
Invalid word
Word:
修复后的代码可以完美运行这个流程,遇到cake时因为首字母c和seaweed的最后字母d不匹配,输出Invalid word,直到输入空行结束游戏。
示例2的大小写场景也能正常兼容,比如输入Australia后,Antartic会被判定为有效(转小写后首字母a和australia的最后字母a匹配)。
内容的提问来源于stack exchange,提问作者Kendrick BUI
相关产品推荐
相关产品推荐

