每次运行Python的for循环时都需要将i设置为零

1 投票
4 回答
920 浏览
提问于 2025-04-17 21:59

在第二个循环中,这个循环会一直运行到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)

撰写回答