遍历字符串并保存多个索引

问题描述 投票:0回答:3

我正在开始编码,我尝试编写“Hangman”。现在我自己解决了大部分问题,但我正在努力解决这个问题。 我想保存多个索引,以便我可以将“_”替换为所需的字符。

guess = ""
for x in randomWord:
    guess = str(guess) + "_"

#Calculates the index for the found lette
for i in randomWord:
    wordIndex = randomWord.find(userInput)
#If Statement deconstructs string into list and adds found letter 
if wordIndex > -1:
    guess = list(guess)
    guess[wordIndex] = userInput
    guess = "".join(guess)
    missLett -= 1

我在某处读到,枚举可以帮助我解决我的问题,但就是无法掌握它。

python for-loop enumerate
3个回答
1
投票

使用

enumerate
确实非常适合您的任务。它在迭代的每一步都会产生对
(index, value)

为了简单起见,您只需迭代

randomWord
一个字符,然后用
userInput
替换所有匹配的索引。像这样的东西应该有效:

randomWord = "hippopotomus"
guess = list("_" * len(randomWord))
userInput = "p"
for i, char in enumerate(randomWord):
    if char == userInput:
        guess[i] = userInput
print("".join(guess))
# Outputs: "__pp_p______"

0
投票

我不太确定为什么要获取字符串中的索引。您可以将

guess
定义为列表,以便您可以轻松访问其元素,并将“_”替换为正确的字母。

这是一种使用列表来实现 Hangman 的方法:

randomWord = "helloworld"
guess = ["_" for x in randomWord] # use guess as a list instead to access elements easier

max_err = 5  # max number of trials
err = 0  # number of errors 
while err < max_err:
    letter = input("Guess a letter :\n")
    if letter in randomWord:
        for i in range(len(guess)):  # parsing each letter in guess
            if randomWord[i] == letter:
                guess[i] = letter  # correct letter => replace it in guess
        print(''.join(guess))
    else:
        print("Oh no !\n")
        err += 1
print("you lost...")

0
投票

请注意,同一字母可能会在

randomWord
中出现多次。使用
enumerate
的相关代码可能如下所示:

guess = list(guess)

# Typical usage of enumerate. i contains the letters and idx its index
for idx, i in enumerate(randomWord):
    if i == userInput:
        guess[idx] = userInput
        missLett -= 1

guess = "".join(guess)
© www.soinside.com 2019 - 2024. All rights reserved.