【问题标题】:Function keeps looping over the answer函数不断循环答案
【发布时间】:2014-11-18 18:00:49
【问题描述】:

更新

def get_dictionary_word_list():
    with open('dictionarys.txt') as f:
        return f.read().split()

def partial_anagram(str1,str2):
    str2_list = list(str2)
    for char in str1:
        if char in str2_list:
             str2_list.remove(char)
        else:
             return False
    return True

def find_partial_anagrams_in_word_list(str1,strlist):
     partial_anagrams = []
     for word in str_list:
          if (partial_anagram(word, str1)):
              partial_anagrams.append(word)
          print(partial_anagrams)

函数 find_partial_anagrams_in_word_list(str1,str_list) 现在可以相应地工作,但会不断循环遍历答案并且不会停止返回它们。我怎样才能让它只退回一次?

【问题讨论】:

  • 你真的想要字谜或者你想用你的代码做什么?因为我检查了字谜的定义,你需要使用完全相同的字母,所以 2 个字谜的大小相同。你不要试图用你的代码来做这个
  • 我想要一个部分字谜。我已经做了一个字谜函数。

标签: python string function python-3.3


【解决方案1】:
def partial_anagram(str1,str2):
    str2_list = list(str2)
    for char in str1:
        if char in str2_list:
             str2_list.remove(char)
        else:
             return False
        return True

看起来您遇到了缩进问题。如果 for 循环完成执行而没有碰到 else 块,您应该只使用 return True。尝试取消缩进一个。

def partial_anagram(str1,str2):
    str2_list = list(str2)
    for char in str1:
        if char in str2_list:
             str2_list.remove(char)
        else:
             return False
    return True

您还需要取消缩进您的最终打印。

def find_partial_anagrams_in_word_list(str1,strlist):
     partial_anagrams = []
     for word in str_list:
          if (partial_anagram(word, str1)):
              partial_anagrams.append(word)
     print(partial_anagrams)

【讨论】:

  • 您好,partial_anagram(str1,str2,) 工作正常,不是问题。问题是我问题中的最后一个功能。我需要在文件中找到“brandon”的部分字谜。我的问题中的最后一个函数应该执行此操作,但只返回带有 @kevin 的函数
  • “partial_anagram(str1,str2) 工作正常,不是问题”。我不认为那是真的。当我使用您的原始代码时,partial_anagram("hello", "hzzzz") 返回 True,即使“hzzzz”不包含“e”、“l”或“o”。您的最后一个功能已损坏,因为它使用了您的第二个功能,该功能也已损坏。
  • 我在输入时可能会错误地缩进它,但它可以工作。但是当与最后一个函数一起使用时,它只是不断循环答案?
【解决方案2】:

将此行移出 for 循环:

def find_partial_anagrams_in_word_list(str1,strlist):
     partial_anagrams = []
     for word in str_list:
          if (partial_anagram(word, str1)):
              partial_anagrams.append(word)
          print(partial_anagrams) # THIS LINE... <<<

应该是:

def find_partial_anagrams_in_word_list(str1,strlist):
     partial_anagrams = []
     for word in str_list:
          if (partial_anagram(word, str1)):
              partial_anagrams.append(word)

     print(partial_anagrams) # same level as the for loop

【讨论】:

    【解决方案3】:

    这是不会无限循环遍历答案并返回文本文件的部分字谜的代码。

    def find_partial_anagrams_in_word_list(str1,str_list):
        partial_anagrams = []
        for word in str_list:
             if (partial_anagram(word, str1)):
                 partial_anagrams.append(word)
                 print(word)
    

    【讨论】:

      【解决方案4】:
      def get_dictionary_word_list():
          return open('dictionarys.txt').read().split()
      
      
      def partial_anagram(str_1, str_2):
          return not any(str_1.count(char_1) > str_2.count(char_1) for char_1 in str_1)
      
      
      def find_partial_anagrams_in_word_list(str_1, str_list):
          return [word for word in str_list if partial_anagram(word, str_1)]
      

      【讨论】:

      • partial_anagram(str1,str2) 不是问题。我需要定义一个函数来查找文本文件中字符串的部分字谜。我的问题中的最后一个函数是我要去的地方,但它返回任何带有 A 的东西,而不是部分字谜。 @ludovicviaud
      • 你的函数有问题,我的也有问题,它不能处理多个相同的字母,我会编辑
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多