Null Mr.Freeman wrote: > Python Word Unscrambler: > > OK, this is the Python code I'm using to unscramble words but it > unscrambles one word at a time, can someone please help me out and tell > me how can I improve my code to make it decrypt several words at a time? > P.S: Another thing is that it prints the solution 4 or 5 times don't > know why.
One way to make it work with multiple words would be to put the call to main() in a loop. (You might want to rename main() to something like unscramble()). Each time through the loop you will be asked for a word to unscramble. I'm not sure why you get the same solution multiple times. If the scrambled word has repeated letters that will cause repeated answers because you generate all permutations of the letters. One solution would be to make a set out of the anagrams of the original word, that will remove any duplicates. You could also use a set instead of a dict to store the word list. And don't use dict as the name of a variable, it shadows the name of the built-in dict object. Another approach to solving anagrams is to sort the letters in the scrambled word. When you read the dictionary, sort the letters in each dictionary word and build a dict that maps sorted words to a list of all the words that sort that way. Then you can solve an anagram with a single lookup in the dict of sorted words. HTH, Kent > > Sorry, I'm very new to Python. > Please help if you can. > Thanks a ton! > ------------------------------------------------------------------------------------------------------------ > > CODE > > import string > > def anagrams(s): > if s == "": > return [s] > else: > ans = [] > for an in anagrams(s[1:]): > for pos in range(len(an)+1): > ans.append(an[:pos]+s[0]+an[pos:]) > return ans > > def dictionary(wordlist): > dict = {} > infile = open(wordlist, "r") > for line in infile: > word = line.split("\n")[0] > dict[word] = 1 > infile.close() > return dict > > def main(): > anagram = raw_input("Please enter a words you need to unscramble: ") > anaLst = anagrams(anagram) > diction = dictionary("wordlist.txt") > for ana in anaLst: > if diction.has_key(ana): > print "The solution to the jumble is", ana > > main() > > ------------------------------------------------------------------------------------------------------------ > > > > > ------------------------------------------------------------------------ > > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor