如何存储来自hangman函数的用户输入,因此每次for循环运行时它都会记住用户已经猜到了这封信。
当hangman函数第一次运行时,如果用户的输入是'gera',那很好,那么它应该循环回来进行第五次猜测;问题是,如果用户现在输入“mo”,它将不会显示为这样的gera _ _ mo,而是打印_ _ _ _ _ _ mo;忘记用户之前的'gera'输入。 如何存储过去的输入,以便代码回忆传递的内容?
def get_guessed_word(secret_word, letters_guessed):
a = ""
for char1 in secret_word:
if char1 in letters_guessed:
a += char1
else:
a += "_ "
print(a)
def get_available_letters(letters_guessed):
a = string.ascii_lowercase
for char1 in a:
if char1 in letters_guessed:
a = a.replace(char1,"")
print(a)
def hangman(secret_word_user_to_guess):
secret_word_user_to_guess = 'geranimo'
for index in range(6,1,-1):
print('You have', index,'guesses left.')
#print('Available letters: abcdefghijklmnopqrstuvwxyz')
letters_guessed = input('Check a word: ')
get_guessed_word(secret_word_user_to_guess, letters_guessed)
print('Available letters:')
get_available_letters(letters_guessed)
答案 0 :(得分:0)
您可以轻松完成此操作:
result = ""
for char in secret_word:
if char in letters_guessed:
result += char
else:
result += "_"
或者,使用发电机:
result = "".join(char if char in letters_guessed else "_" for char in secret_word)
顺便说一句,letters_guessed
可以是一个字符串("eikprs"
),或者,如果订单无关紧要,则为set
:set("eikprs")
。
你也可以试试这个:
result = secret_word.translate("".maketrans(letters_guessed, "_" * len(letters_guessed)))
答案 1 :(得分:0)
有几种方法可以像ForceBru已经提到的那样解决它。但是要在评论中添加一个带有集合的集合:
def g(secret_word, letters_guessed):
letters = set(secret_word)
guess = set(letters_guessed)
for i in letters.difference(guess):
secret_word=secret_word.replace(i,'_')
print(secret_word)
secret_word = 'apple'
letters_guessed = ['e', 'i', 'k', 'p', 'r', 's']
print(g(secret_word, letters_guessed) ) #prints '_pp_e'
答案 2 :(得分:0)
让我们来看看你的功能,因为有一个你似乎没有的概念:
def g(secret_word, letters_guessed):
a = []
for char1 in secret_word:
for thing in letters_guessed:
if thing == char1:
a += thing
break
elif thing != char1:
a[secret_word.index(char1)] == '_ '
break
行for char1 in secret_word:
遍历单词,依次将每个字符拉入char
。这没有什么不妥,几乎每个解决方案都必须使用它。
接下来,您执行for thing in letters_guessed:
。正如@ForceBru所指出的那样,这有一个问题,因为Python提供in
and not in
operators来做你想要手工编写的代码。
然而,当你刚刚开始时,可以重新发明轮子几次。如果不出意外,它可以帮助您了解幕后发生的事情。
我认为你错过或误解的是:当你char1 == thing
你知道某事时。你可以绝对说“是的,这封信已被猜到”,你可以继续展示这封信。
但是当条件不正确时 - 当char1 != thing
时 - 你什么都不知道。你不能简单地说“哦,如果那不是真的那就画一个下划线”,因为你没有完成检查!
请记住,for thing in letters_guessed:
循环正在检查已猜到的每个字母。这意味着即使letters_guessed中的这个特定字符可能与单词中的当前字符不匹配,其他字符也可能匹配,因此您必须保持循环。
这样的事情:
for char1 in secret_word:
for thing in letters_guessed:
if thing == char1:
a += thing
break
else: # 'else' after for means 'if no break command was run'
a += '_'