Python hangman游戏如何实现输入非法字符时不扣除玩家生命?
解决方案
核心问题
你当前的代码逻辑顺序错误,两个判断分支相互独立:先执行「猜测字母不在目标单词中就扣生命」的逻辑,之后才判断输入是否为合法字母。非法输入(比如数字、符号、多个字符)必然不在目标单词里,所以一定会触发扣血逻辑,之后才会弹出非法输入提示,这就是问题的来源。
修改方法
把输入合法性校验的逻辑提前到所有猜测业务逻辑之前,非法输入时直接跳过后续的扣血、记录猜测流程,要求用户重新输入即可。
具体修改点
- 拿到用户输入的第一个步骤就校验是否属于合法字母,非法则直接提示并跳过本轮循环
- 删除你原来写在扣血逻辑之后的合法性校验分支,避免重复判断
修改后的核心代码片段
# 原有代码:获取用户输入 letter_user = input('Guess a letter: ').lower() # 新增:首先校验输入合法性,非法直接跳过后续逻辑 if letter_user not in alphabet: print('Please only enter ONE letter.') continue # 原有代码:检查是否重复猜测 while letter_user in letters_guessed or letter_user in wrong_letters: print() print('You have already guessed this letter, guess a different one.') letter_user = input('Guess a letter: ') # 重复输入阶段也增加合法性校验 if letter_user not in alphabet: print('Please only enter ONE letter.') continue # 原有代码:判断是否猜错扣血(仅合法输入会执行到此处) if letter_user not in letters_word: mistakes += 1 wrong_letters.append(letter_user) # 此处删除你原来写的合法性校验分支即可
可选优化
你当前手写的26字母列表可以替换为Python自带的常量,减少手写错误:
# 导入内置字符串常量模块 import string # 替换原来的alphabet定义 alphabet = list(string.ascii_lowercase)
内容的提问来源于stack exchange,提问作者Pranav Borse
相关产品推荐
相关产品推荐

