我无法理解变量在 for 循环之前的作用

I'm having trouble understanding what a variable does right before a for loop

我是 python 的新手,我无法理解此 return 语句中 'for' 之前的变量的作用。我从 this question

获得了此代码的略微修改版本
word = "boom"

def find_all(word, guess):
    return [i for i, letter in enumerate(word) if letter == guess]

我知道该函数正在获取用户在单词“boom”中猜测的字母的每一次出现,为索引创建 'i',为枚举函数即将要计算的值创建 'letter'给。最后说如果单词中的字母等于单词中的猜测,就会发生这种情况。

什么是

i for i

不过呢?我在上面找不到任何东西,当我把它拿出来时,它破坏了密码。 有什么办法可以不在 return 中写这个?

我修改后的代码然后在状态

board = "_" * len(word)
listed_board = list(board)

while board != word:
    guess = input("Input a letter here ").lower()
    if guess in word:
        indices = find_all(word, guess)
        print(indices)
        listed_board = list(board)
        for i in indices:
            listed_board[i] = guess
            board = "".join(listed_board)
        print(listed_board)

我唯一不明白的另一部分是它在说什么

listed_board[i] = guess

这是在做什么?在listed_board上此时只有下划线,那么如何定位正确的位置插入单词并将其设置为用户猜测?

感谢回复,谢谢!

enumerate(word) returns 您可以使用 i, letter 迭代的 table 个值。 i 将是您正在迭代的索引,字母是枚举词中的项目。 i for i, letter 表示如果条件 (letter == guess) 正确,您仅选择索引。

好的,下面是您的代码的工作原理:

word = "boom"

def find_all(word, guess):
    return [i for i, letter in enumerate(word) if letter == guess]

enumerate(word) 创建新的可迭代对象。来自 'boom' 的每个字母都有自己的索引:[(0, 'b'), (1, 'o'), (2, 'o'), (3, 'm')]。 现在 for 循环遍历这个新对象,其中 i 等于索引(上面列表中的数字),letter(变量)等于字母(列表中的值) ).因此,此函数将 return 一个索引列表供您猜测。如果猜测等于 'b',它将 return [0],对于 'o',它将是 [1, 2],对于 'm'[3] ,否则此列表将为空。

更进一步:

while board != word:
    guess = input("Input a letter here ").lower()
    if guess in word:
        indices = find_all(word, guess)  # This will return all index where 'guess' is equal to letter from world. For example for word='foo', guess='o' it will return [1,2]
        print(indices)
        listed_board = list(board)
        for i in indices:  # for each index you have found:
            listed_board[i] = guess  # replace '_' with correct letter (guess)
            board = "".join(listed_board)  # change list to string
        print(listed_board)

希望这段代码现在对您来说更加明显。