Python 如何用用户输入替换字符串的元素
下面是一个刽子手游戏的代码。到目前为止,一切都运行得很好。我遇到的唯一问题是,当用户猜对时,如何将带下划线的空格转换为正确的字母。我没有为它编写的代码,正在寻求一些帮助。它现在所做的就是返回空白下划线,即使你正确地猜到一个数字Python 如何用用户输入替换字符串的元素,python,list,random,Python,List,Random,下面是一个刽子手游戏的代码。到目前为止,一切都运行得很好。我遇到的唯一问题是,当用户猜对时,如何将带下划线的空格转换为正确的字母。我没有为它编写的代码,正在寻求一些帮助。它现在所做的就是返回空白下划线,即使你正确地猜到一个数字 import random responses = {'title': 'Welcome to Hangman the Game!', 'rules':'Once you guess \ wrong 6 times you lose. Using the same le
import random
responses = {'title': 'Welcome to Hangman the Game!', 'rules':'Once you guess \
wrong 6 times you lose. Using the same letter twice does not count as a guess.', \
'correct':'Well done, your guess is correct!', \
'incorrect':'Sorry, your guess is incorrect...', \
'win':'Well done, you win!', \
'lose':'Out of guesses. You lose.'}
words = ['cat', 'dog', 'work', 'school', 'game', 'one', 'hangman', 'apple',
'orange', 'list', 'words', 'bicycle', 'four', 'snowing', 'backpack',
'computer', 'house', 'water', 'plant', 'hour']
game = random.choice(words)
print(game) # just in for ease of programming
guesses = 0
letter = []
length = len(game)
numletter = game.replace(game, '_ '*length) # display number of letters
while guesses < 6:
print(numletter) # need to replace this with the code I will hopefully learn from this
user = input('Guess a letter here: ')
if user in game:
if user not in letter:
print(responses['correct'])
if user not in game:
if user not in letter:
print(responses['incorrect'])
guesses += 1
if user not in letter:
letter.append(user)
print('You have guessed these letters', letter)
else:
print('You have already guessed that letter, try again.')
if user == game:
print(responses['win'])
break
else:
print(responses['lose'])
如您所见,空格保持不变]维护布尔值列表,
可见性
使得当且仅当您希望字符串中的字符#5可见时,可见性[5]
才为真
import io
class HiddenString:
def __init__(self, word):
self._word = list(str(word))
self._visibility = [False]*len(self._word)
def make_all_instances_visible(self, char):
char = str(char)
assert(len(char) == 1)
for idx in range(len(self._word)):
if self._word[idx] == char:
self._visibility[idx] = True
return
def __str__(self):
with io.StringIO() as string_stream:
for idx in range(len(self._word)):
char = "_"
if self._visibility[idx]:
char = self._word[idx]
print(char, end="", file=string_stream)
stryng = string_stream.getvalue()
return stryng
###################################################################
secret = HiddenString("secret")
print(secret)
secret.make_all_instances_visible("e")
print(secret)
以下是控制台输出:
______
_e__e_
字符串的一个有趣函数是
.translate()
。它获取字符序数值的字典,并将它们转换为字典的值。因此,如果您将解决方案单词的所有序数放在翻译表中,将它们翻译为下划线,然后翻译单词,您将得到所有内容的下划线:
>>> word = 'apple'
>>> xlat = {ord(c):'_' for c in word}
>>> xlat
{97: '_', 112: '_', 108: '_', 101: '_'}
>>> word.translate(xlat)
'_____'
现在,当您猜测时,请测试该顺序键是否在转换表中,如果是,请将其删除。再次翻译时,删除的字母不会被替换:
>>> guess = 'p'
>>> ord(guess) in xlat
True
>>> del xlat[ord(guess)]
>>> word.translate(xlat)
'_pp__'
当word.translate(xlat)==word
游戏获胜
我将把它作为一个练习,将它合并到您的代码中
>>> guess = 'p'
>>> ord(guess) in xlat
True
>>> del xlat[ord(guess)]
>>> word.translate(xlat)
'_pp__'