我在理解变量在for循环之前的作用时遇到问题

时间:2019-05-09 07:38:09

标签: python loops return enumerate

我是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

可以吗?我找不到任何内容,将其取出会破坏代码。 无论如何,有没有这样的写法?

我修改后的代码,然后再进入状态

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上,此时只有下划线,那么如何找到插入单词的正确位置并将其设置为用户的猜测呢?

感谢您的答复,谢谢!

2 个答案:

答案 0 :(得分:2)

好的,这就是您的代码的工作方式:

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(变量)等于字母(列表中的值) )。因此,此函数将返回一个索引列表供您猜测。如果猜测等于'b',它将返回[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)

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

答案 1 :(得分:1)

enumerate(word)返回一个值表,您可以使用i, letter对其进行迭代。我将是您要遍历的索引,字母是列举的单词中的项目。 i for i, letter表示您仅在条件(letter == guess)正确的情况下选择索引。