Python循环实现Hangman游戏show_hidden_word函数求助
Hangman猜字游戏单词显示函数实现方案
需求背景
需要实现猜字游戏的核心展示函数,函数定义:
def show_hidden_word(secret_word, old_letters_guessed):
参数规则
secret_word:字符串,玩家需要猜测的目标单词old_letters_guessed:列表,存储玩家到当前轮次已经猜过的所有字母
功能要求
返回由字母和_组成的展示字符串:
- 已经被猜中的字母(即同时存在于
secret_word和old_letters_guessed中的字母)显示在原单词对应位置 - 未被猜中的位置用
_占位
预期效果
>>> secret_word = "mammals" >>> old_letters_guessed = ['s', 'p', 'j', 'i', 'm', 'k'] >>> print(show_hidden_word(secret_word, old_letters_guessed)) m _ m m _ _ s
强制要求:必须使用for或while循环实现,不能用推导式等其他简写方式
原有代码问题排查
你提交的代码运行不符合预期,问题出在3个地方:
def show_hidden_word(secret_word, old_letters_guessed): clue = "" for letter in secret_word: if letter in clue == True: clue + letter clue = clue + letter else: clue + '_' clue = '_'+ clue return clue
- 判断逻辑错误
- 判断对象错了:你在判断
letter in clue,clue是你正在拼的结果串,正确的判断应该是当前遍历到的字母是否在已猜列表old_letters_guessed里 - 写法错误:
letter in clue == True触发了Python的链式比较规则,实际等价于(letter in clue) and (clue == True),完全达不到判断真假的效果
- 判断对象错了:你在判断
- 拼接顺序错误
拼下划线时用了'_' + clue,相当于每次把新字符插到整个字符串的最前面,遍历完成后字符顺序是完全颠倒的,应该顺着遍历顺序从左往右追加字符 - 冗余无效代码
单独写clue + letter没有赋值给任何变量,这行代码不会对结果产生任何影响,属于无效代码
可运行正确实现
def show_hidden_word(secret_word, old_letters_guessed): clue = "" for letter in secret_word: if letter in old_letters_guessed: # 猜中就追加原字母,后面加空格匹配示例格式 clue += letter + " " else: # 没猜中就追加下划线加空格 clue += "_ " # 去掉末尾多余的空格后返回 return clue.strip()
运行测试后输出和预期完全一致:m _ m m _ _ s。如果不需要字符间的空格,把拼接时的" "删掉即可。
内容的提问来源于stack exchange,提问作者Natilir
相关产品推荐
相关产品推荐

