每次运行Python的for循环时都需要将i设置为零
在第二个循环中,这个循环会一直运行到26。我希望每次从列表中移除一个项目时,循环的计数器能重置为零,这样我就可以从头开始检查某个字母是否在列表1的所有字母中。我试着在循环中的if语句里把i设置为0,但它还是会回到原来的范围值,而不是重置为零。
import string
def getAvailableLetters(lettersGuessed):
str1 = string.ascii_lowercase
list1 = [ ]
list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
str3 = ""
str4 = str3.join(lettersGuessed)
for j in range(len(str4)):
for i in range(26):
if list1[i] == str4[i]:
list1.remove(list1[i])
lettersGuessed = ['e', 'i', 'k', 'p', 'r', 's']
getAvailableLetters(lettersGuessed)
4 个回答
0
def getAvailableLetters(lettersGuessed):
alphabet = 'abcdefghijklmnopqrstuvwxyz'
lst= ''
for e in alphabet:
if e not in lettersGuessed:
lst += e
return lst
对于那些不在字母表中的字母,我做了这个:把它们重新加回到一个字符串里。
0
在Python中,for
循环有一个不太为人所知的(而且有点复杂的)else
表达式,可以用来判断整个循环是否完成。这在需要重新开始一个循环时非常有用。
for j in range(…):
while True:
for i in range(26):
if list1[i] == str4[i]:
list1.remove(list1[i])
break # Break out of the `for` loop to continue the `while`.
else:
# The `else` will not happen if we `break` in the `for` loop.
break # Finished the `for` loop; Break out of the `while`.
0
你可以试试用一个 while 循环
,像这样:
i = 0
for j in range(len(str4)):
while i < 26:
if list1[i] == str4[i]:
list1.remove(list1[i])
i = 0
continue
i += 1
这样你就可以实际改变 i
的值,然后从零开始继续这个循环。
3
试试这样做:
import string
def getAvailableLetters(lettersGuessed):
return sorted(set(string.ascii_lowercase) - set(lettersGuessed))
lettersGuessed = ['e', 'i', 'k', 'p', 'r', 's']
getAvailableLetters(lettersGuessed)