Python猜词游戏如何实现正确位置字母大写的规则效果
猜词游戏格式显示逻辑实现指引
你需要把格式生成逻辑放在每次获取用户输入guess之后、判断是否猜对的分支之前,Python中字符串转大写直接调用str.upper()方法,转小写调用str.lower()方法即可。
你原有代码存在两个核心问题:一是匹配逻辑写错,拿完整输入字符串和单个位置的字符做对比永远不会触发位置匹配;二是跨轮次复用结果列表,没有处理「字母存在但位置错误」的分支,也没做重复字母的计数规避,很容易出现显示bug。
具体实现规则
每次用户提交猜测后,不要复用之前的显示结果,重新生成本次的展示字符串即可,分三步判断每个字符的显示形式:
- 同位置和谜底完全一致的字符:转大写展示
- 字符在谜底中存在、但位置不对:转小写展示
- 字符完全不在谜底剩余未匹配的字符里:展示下划线
_
注意处理重复字母场景:比如谜底
heaven包含2个e,如果用户只输入了1个e,只能给1个位置标记匹配,需要在匹配后把对应谜底字符标记为已使用,避免重复计数。
修正后可直接运行的代码
print("Welcome to the word guessing game!") print(" ") secret_word = "heaven" secret_length = len(secret_word) guess_count = 0 while True: guess = input("What is your guess? ").lower() # 校验输入长度,避免索引报错 if len(guess) != secret_length: print(f"Please enter a {secret_length}-letter word!") continue guess_count += 1 # 每次猜测重新初始化结果列表,不沿用之前的显示状态 result = ["_"] * secret_length # 存未被匹配的谜底字符,匹配过的标记为None remaining_secret_chars = list(secret_word) # 第一遍遍历:匹配位置完全正确的字符,转大写 for i in range(secret_length): if guess[i] == secret_word[i]: result[i] = guess[i].upper() remaining_secret_chars[i] = None # 第二遍遍历:匹配存在但位置错误的字符,转小写 for i in range(secret_length): # 已经正确匹配的位置直接跳过 if result[i] != "_": continue current_char = guess[i] if current_char in remaining_secret_chars: result[i] = current_char.lower() # 标记对应字符已被匹配,避免重复计数 matched_pos = remaining_secret_chars.index(current_char) remaining_secret_chars[matched_pos] = None # 判断是否猜对 if "".join(result).lower() == secret_word: print("") print("You guessed it!") break print("".join(result)) print(f"It took you {guess_count} guesses")
运行后效果示例:比如谜底是heaven,输入hxxxxx会输出H_____,输入xxexxx只会输出__e___(不会因为谜底有两个e就输出两个e),输入长度不对的内容会直接提示重输。
内容的提问来源于stack exchange,提问作者Víctor Martínez
相关产品推荐
相关产品推荐

