Python Hangman游戏运行无报错但无法接收用户输入问题求助
问题根源
两个新手写Python最容易踩的基础语法坑,直接导致程序跑不起来:
- 核心问题:你根本没调用写好的
main()函数。Python不会自动执行你定义的函数,你只是把main()里的游戏逻辑写完了,但脚本里没有任何触发这个函数运行的代码。程序启动后只会把get_valid_word、main两个函数加载到内存,直接就运行结束了,当然不会有输出,也不会弹出输入提示等你打字。 - 次要问题:代码缩进不统一。Python是强缩进敏感的语言,从你贴的代码看,
while循环块的缩进和main函数里前面几行变量定义的缩进层级对不上,就算调用了main(),缩进不对也会出逻辑异常。
修复步骤
- 先统一所有代码缩进:
main函数内部的所有代码,包括变量定义、while循环、循环里的打印、输入判断逻辑,全部保持同一缩进层级(推荐统一用4个空格作为一级缩进,别混着按空格和Tab)。 - 在整个脚本的最末尾,加上程序入口代码,让脚本启动后自动运行游戏逻辑:
if __name__ == "__main__": main()
- 你现在的代码缺了胜利提示,while循环跑完(也就是所有字母都猜对)之后玩家看不到结果,可以在while循环结束后补一行:
print(f"猜对了!正确单词就是{word},你赢了!")
修复后可直接运行的完整代码
import random from words import words import string def get_valid_word(words): word = random.choice(words) # 从单词列表随机选词 while '_' in word or ' ' in word: word = random.choice(words) return word.upper() def main(): word = get_valid_word(words) word_letters = set(word) # 存单词里还没被猜对的字母 alphabet = set(string.ascii_uppercase) used_letters = set() # 存用户已经猜过的字母 # 循环猜词,直到所有字母都被猜中 while len(word_letters) > 0: # 展示已猜过的字母 print('你已经猜过这些字母: ', ' '.join(used_letters)) # 展示当前猜词进度(例:W _ R D) word_list = [letter if letter in used_letters else '_' for letter in word] print('当前单词: ', ' '.join(word_list)) user_letter = input('猜一个字母: ').upper() if user_letter in alphabet - used_letters: used_letters.add(user_letter) if user_letter in word_letters: word_letters.remove(user_letter) elif user_letter in used_letters: print('这个字母你已经猜过了,换一个试试') else: print('输入无效,请输入英文字母') print(f"恭喜通关!正确单词就是{word}") # 启动游戏 if __name__ == "__main__": main()
注意:要保证存单词列表的
words.py文件和游戏脚本在同一个文件夹下,且words.py里确实定义了名为words的列表变量,否则会报导入错误。
内容的提问来源于stack exchange,提问作者Jeewanthi Wijesinghe
相关产品推荐
相关产品推荐

