Thanks to everyone for all the help!

Here's the (at least for now) final script, although note I'm using
2.3.5, not 2.4, so I can't use some of the tips that were given.

#!/usr/bin/python
# Filename: unscram.py

def sort_string(word):
        '''Returns word in lowercase sorted alphabetically'''
        word_list = list(word.lower())
        word_list.sort()
        return ''.join(word_list)

print 'Building dictionary...',

dictionary = { }

f = file('/usr/share/dict/words', 'r')

for line in f.readlines():
     line = line.strip()  # remove whitespace at both ends
     if line:  # line is not the empty string
          line = line.lower()
          sline = sort_string(line)
          if sline in dictionary:
               dictionary[sline].append(line)
               #print 'Added %s to key %s' % (line,sline)
          else:
               dictionary[sline] = [line]
               #print 'Created key %s for %s' % (sline,line)
f.close()

print 'Ready!'

lookup = raw_input('Enter a scrambled word : ')
while lookup:
     try:
          results = dictionary[sort_string(lookup)]
          for x in results:
               print x,
          print
     except:
          print "?????"
     lookup = raw_input('Enter a scrambled word : ')



As for the end of the file idea, that word wasn't at the end of the
file, and there was a blank line, so that's out of the question. The
word list I was using was 272,520 words long, and I got it a while back
when doing this same thing in java, but as you can see now I'm just
using /usr/share/dict/words which I found after not finding it in the
place listed in Nick's comment.

I'm still lost as to why my old code would only work for the small
file, and another interesting note is that with the larger file, it
would only write "zzz for zzz" (or whatever each word was) instead of
"Created key zzz for zzz". However, it works now, so I'm happy.

Thanks for all the help,
Kevin

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to