我想写一个hangman程序,为了做到这一点,我必须用用户猜测的字母(guess
(替换散列('-'(字母。但当我运行代码时,它会用用户的猜测字母替换所有哈希。代码看起来不错,但我没有得到想要的结果。
words
是我在函数之前编写的单词列表
def word_guess():
random.shuffle(words)
word = words[0]
words.pop(0)
print(word)
l_count = 0
for letter in word:
l_count += 1
# the hidden words are shown a '-'
blank = '-' * l_count
print(blank)
guess = input("please guess a letter ")
if guess in word:
# a list of the position of all the specified letters in the word
a = [i for i, letter in enumerate(word) if letter == guess]
for num in a:
blank_reformed = blank.replace(blank[num], guess)
print(blank_reformed)
word_guess()
例如:当word
为"滑稽",guess
为"n"时,输出为"nnnnn"。
我应该如何用guess
字母替换所需的哈希字符串?
它替换了所有的散列
这正是blank.replace
应该做的。
您应该做的是替换字符串中的单个字符。由于字符串是不可变的,所以不能真正做到这一点。但是,字符串的列表是可变的,所以您可以执行blank = ['-'] * l_count
,这将是一个短划线列表,然后修改blank[num]
:
for num in a:
blank[num] = guess
print(blank)
需要注意的几件事:
- 低效/非Python
pop
操作(请参阅此( l_count
只是len(word)
- 非蟒蛇,无法读取的替代品
相反,这里有一个更好的实现:
def word_guess() -> str:
random.shuffle(words)
word = words.pop()
guess = input()
out = ''
for char in word:
if char == guess:
out.append(char)
else:
out.append('-')
return out
如果您以后不打算使用正确猜测的位置,那么您可以简化代码的最后一部分:
word = 'hangman'
blank = '-------'
guess = 'a'
if guess in word:
blank_reformed = ''.join(guess if word[i] == guess else blank[i] for i in range(len(word)))
blank_reformed
'-a---a-'
(为了让整个游戏发挥作用,你还有一些工作要做…(