Home > Blockchain >  How to check what a function prints and do something off of that
How to check what a function prints and do something off of that

Time:09-06

How would I do: "if this function prints "Anagram" then print something else". I also would somehow just like to see if it would print that but not have it print it.

These are the files, I'm working on findAnagrams and comparewords cannot be changed.

comparewords.py

def word_compare(x, y='steal'):
    if isinstance(x, str) and isinstance(y, str) == True:
        
        sorted_x = sorted(x)
        sorted_y = sorted(y)

        if sorted_x == sorted_y:
            print('Anagram')
        else:
            mytuple = (x, y)
            print(mytuple)
        
    else:
        print("Those aren't strings!")

findtheanagram.py

from WordCompare import word_compare

def findanagram(words):
    for i in words:
        for j in words:
            if word_compare(i,j) == "Anagrams":
                print(word[i]  ":"   j)

words = ['tar', 'rat', 'face', 'cafe', 'hello']
findanagram(words)

How do I do "if the function prints x then do x and not have it print anything"?

CodePudding user response:

one way of solving your problem, using dictionary to save the sorted word and save the same sorted word in a list , make the element in list anagrams

def findanagram(words):
        dic = {}
        for word in words:
            if not isinstance(word, str):
                continue
            sorted_word = ''.join(sorted(word))
            if sorted_word not in dic:
                dic[sorted_word] = []
            dic[sorted_word].append(word)
        return [anagrams for anagrams in dic.values() if len(anagrams)>1]


words = [1,'tar', 'rat', 'face', 'cafe', 'hello']
result = findanagram(words)
print(result)

output

[['tar', 'rat'], ['face', 'cafe']]

improvement in your code

instead of using print, your function need to return True and False, stating that the given two words are anagram or not respectively.

so your code in compareword.py should be like

def word_compare(word1, word2):
    if not isinstance(word1, str) or not isinstance(word2, str):
         return False # you can use log here to give reason
    sorted_word1 = ''.join(sorted(word1))
    sorted_word2 = ''.join(sorted(word2))

    if sorted_word1==sorted_word2:
          return True
    else:
         return False
    # you can just use 
    # return sorted_word1 == sorted_word2

and in file findtheanagram.py you can do

def findtheanagram(words):
    result = []
    for i, v in enumerate(words):
        for j in range(i 1, len(words)): # considering minimum 2 elements
              word1 = v
              word2 = words[j]
              if word_compare(word1, word2):
                  result.append((word1, word2))
    return result

CodePudding user response:

You want to return a value as well instead of just printing, so that the values can be accessed outside of the function:

def word_compare(x, y):
    if isinstance(x, str) and isinstance(y, str) == True:
        
        sorted_x = sorted(x)
        sorted_y = sorted(y)
        if sorted_x == sorted_y:
            return 'Anagram'
            print('Anagram')
        else:
            mytuple = (x, y)
            return mytuple
            print(mytuple)
        
    else:
        print("Those aren't strings!")

Seeing that you don't know about return values I would suggest learning the basics of python first.

EDIT: Nevermind seeing that you have now edited your question

  • Related