如何修复Python编写的《猜电影》游戏单次输入解锁多字母的逻辑错误
猜电影游戏代码异常修复方案
问题根因
问题出在unlock函数的索引匹配逻辑错误:
- 你通过
create_question生成的谜题字符串是用空格分隔每个字符的,比如电影Soul生成的初始谜题是* * * *,将其转为列表后长度为7(包含3个分隔用的空格) - 但
unlock函数循环时用的是原电影名称的长度(Soul长度为4),原电影的字符索引和谜题字符串的列表索引完全错位,导致判断已解锁字符的逻辑完全失效,才会出现未输入的字母被错误解锁的问题。
修复方案
直接修改unlock函数,先把传入的谜题字符串的分隔空格去掉,处理完字符解锁逻辑后再用空格拼接回标准格式,修改后的代码如下:
def unlock(Q,picked_Movie,letter): ref = list(picked_Movie) # 先去掉Q里的空格,得到和原电影长度一致的字符列表 Q_list = Q.split(' ') temp = [] n = len(picked_Movie) for i in range(n): if ref[i] == " " or ref[i] == letter: temp.append(ref[i]) else: if Q_list[i] == "*": temp.append("*") else: temp.append(ref[i]) # 处理完再用空格拼接 Q_new = " ".join(str(x) for x in temp) return Q_new
可选优化
如果需要支持大小写不敏感输入(比如输入小写s也能匹配大写开头的Soul里的S),可以同时修改is_present和unlock函数的判断逻辑,统一转成小写比对即可。
内容的提问来源于stack exchange,提问作者Rajarshi Chanda
相关产品推荐
相关产品推荐

