完成后是否可以返回for循环?

时间:2020-08-26 20:02:19

标签: python

我正在尝试制作一个字谜程序,但是我的程序无法正常工作。有时它会给我我想要的字符串,这是前两个字符串。但有时它什么也没打印。

我认为我可以通过将第二个for循环放入函数中来解决该问题,这样如果最后一个if语句没有被调用,我可以再次运行整个第二个循环。但是当我这样做时,它会打印很多东西,然后程序达到打印限制并崩溃。然后,我尝试在while循环中放入第二个for循环,但是当我这样做时,该程序甚至无法运行。

text = "texxtttt"
text_list = ["tettxtxt", "ttexxtte", "texxtexxxt", "tttttxxe", "txextttt"]

input_unique_letters = "".join(set(text))

for i in range(len(input_unique_letters)):
    input_letter = input_unique_letters[i:i+1]
    input_letter_n = text.count(input_letter)

for i in range(len(text_list)):
    list_unique_letters = "".join(set(text_list[i]))

    list_word = text_list[i]
    list_letter = list_word[i:i+1]
    list_letter_n = list_word.count(list_letter)

    if len(text) == len(list_word):
        if input_letter == list_letter and input_letter_n == list_letter_n:
            print(list_word)

在这里达到打印限制的代码:

text = "texxtttt"
text_list = ["tettxtxt", "ttexxtte", "texxtexxxt", "tttttxxe", "txextttt"]

input_unique_letters = "".join(set(text))

for i in range(len(input_unique_letters)):
    input_letter = input_unique_letters[i:i+1]
    input_letter_n = text.count(input_letter)

def coroutine():
    for i in range(len(text_list)):
        list_unique_letters = "".join(set(text_list[i]))

        list_word = text_list[i]
        list_letter = list_word[i:i+1]
        list_letter_n = list_word.count(list_letter)

        if len(text) == len(list_word):
            if input_letter == list_letter and input_letter_n == list_letter_n:
                print(list_word)

        else:
            coroutine()

coroutine()

1 个答案:

答案 0 :(得分:1)

您对代码的一些评论:

  • 不,您不能“返回for循环”。如果确实需要,可以使用while循环并递增或递减索引。在这里似乎没有必要。
  • 您很少需要使用for i in range(len(text_list)):。考虑使用for letter in text_list:,或者,如果您确实需要索引,请考虑使用for i, letter in enumerate(text_list):
  • list_letter = list_word[i:i+1]似乎很奇怪。为什么不只是list_letter = list_word[i]
  • 您为什么将一组字母转换为字符串?我们只遍历字母,顺序不再重要。
  • 变量input_letter_n仅等于遇到的最后一个值。您不会在任何地方存储以前的值。

以下是一些基于您的代码,但更多的是Pythonic:

def anagram(): 
    text = "texxtttt"  
    text_list = ["tettxtxt", "ttexxtte", "texxtexxxt", "tttttxxe", "txextttt"] 
    input_unique_letters = set(text) 
    count_dict = {letter: text.count(letter) for letter in input_unique_letters} 
    for list_word in text_list: 
        word_unique_letters = set(list_word) 
        for letter in word_unique_letters: 
            if letter in input_unique_letters: 
                if list_word.count(letter) == count_dict[letter]: 
                    print(list_word) 
                    break 

一些重要的变化:

  • 我不使用字符串,而是直接使用集合。
  • 为了跟踪计数,我使用了字典,将字母映射为计数。
  • 使用break语句可以使每个单词最多打印一次。如果发生这种情况,我们将离开for letter in word_unique_letters循环。