循环迭代结果在游戏中的保存

3

我正在尝试制作一个“猜单词”游戏,但在显示方面遇到了问题。我有一个循环,应该将正确猜测的字母放在正确的位置,但它只能一次显示一个字母的正确位置。我认为保存上一次迭代的结果并显示它会很有帮助,但不确定如何实现。

import random,time
hanglist = []
answerlist = []
file_var = open("wordlist.100000")
for n in file_var:
    hanglist.append(file_var.readline())
word = random.choice(hanglist)
print("word is",word)
guesses = 10
while guesses != 0:
    print("guess a letter")
    answer = input()
    answerlist.append(answer)
    if answer in word:
        m = list(word)
        for n in m:
            if n == answer:
                print(answer, end = '')
            else:
                print('_', end = '')                
    else:
        print("close, but not exactly")
    guesses -= 1

这是输出结果

word is fabric

guess a letter
f
f______guess a letter
a
_a_____guess a letter

1
预期输出是什么?您想要保存先前状态还是所有先前状态? - Venkata Gogu
请适当缩进你的代码。 - MoxieBall
2
if n in answerlist: print(n, end='') - TemporalWolf
@VenkataGogu 所有之前的状态 - Athreya Daniel
1
当所有字母的正确猜测都完成后,您需要跳出循环吗? - Venkata Gogu
2个回答

1
为了解决您的问题,只需将 if n==answer 替换为 if n in answer。但是,从上面的代码中可以看出,代码无法处理以下问题:
  1. 如果用户一遍又一遍地猜同一个单词
  2. 完成 4 次猜测并猜出所有单词后,代码应该跳出循环,但它没有这样做。
  3. 在读取行时,需要剥离 '\n',否则会非常困难
我的代码解决了这些问题:
import random,time
hanglist = []
answerlist = []
file_var = open("wordlist.100000")
for n in file_var:
    # strips the '/n' at the end
    hanglist.append(file_var.readline().rstrip())
word = random.choice(hanglist)
print("word is",word)
guesses = 10
while guesses!=0:
    print("guess a letter")
    answer = input()
    if answer in answerlist:
        continue
    answerlist.append(answer)
    if answer in word:
        # to print entire word guessed till now- with current and previous iterations
        word_print = ''
        for n in word:
            # to print all the last state occurences
            if n in answerlist: 
                word_print += n
            else:
                word_print += '_'
        print(word_print,end='')
        # word is correctly guessed
        if '_' not in word_print: 
            break
    else:
        print("close, but not exactly")
    guesses = guesses-1

虽然这段代码可能回答了问题,但提供有关它如何以及/或为什么解决问题的附加上下文将改善答案的长期价值...特别是您修复了核心问题,但没有提到它。 - TemporalWolf
其他答案中已经提到了这一点,不确定是否值得重复。相反,我扩展了其他的答案。我会记住的。下次,我会尽可能详细地说明。 - Venkata Gogu
@VenkataGogu,word_print变量的目的是什么? - Athreya Daniel
@VenkataGogu 只是想澄清一下:你所说的“state”是什么意思? - Athreya Daniel
我的错!状态指的是迭代。对于游戏,我通常会提到状态。对于混淆,我感到抱歉。 - Venkata Gogu
显示剩余3条评论

-1

你的问题与

if n == answer:
    print(answer,end = '')
else:
    print('_', end = '')  

这只是将每个字母与当前猜测的answer进行比较。相反,如果您使用

if n in answerlist:
    print(n, end = '')
else:
    print('_', end = '')  

如果某个字母在先前猜测的列表中,它将显示该字母。

另外: 先前的m = list(word)不是必要的, 因为for n in word:也是有效的.


当我进行这个更改后,我得到了以下输出: - Athreya Daniel
猜一个字母。 - Athreya Daniel
它将已猜测的第一个字母替换为它正在检查的字母。 - Athreya Daniel
你错过了更改的第二部分,你应该打印“n”,即我们正在检查的字母,而不是他们猜测的“answer”字母。 - TemporalWolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接