Function keeps looping over the answer

501 Views Asked by At

UPDATE

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)

The function find_partial_anagrams_in_word_list(str1,str_list) now works accordingly but constantly loops over the answers and doesn't stop returning them. How can i get it to just return them once?

4

There are 4 best solutions below

3
Kevin On BEST ANSWER
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

Looks like you have an indentation problem. You should only return True if the for loops finishes executing without hitting the else block. Try unindenting by one.

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

You also need to de-indent your final print.

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)
2
Ludovic Viaud On
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)]
0
black panda On

Move this line out of your for loop:

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... <<<

It should be:

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
0
alfiej12 On

This is the code that doesn't infinitly loop through answers and returns partial anagrams of a text file.

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)