我是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上,此时只有下划线,那么如何找到插入单词的正确位置并将其设置为用户的猜测呢?
感谢您的答复,谢谢!
答案 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
)正确的情况下选择索引。