我无法理解变量在 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)
希望这段代码现在对您来说更加明显。
我是 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)
希望这段代码现在对您来说更加明显。