wordList = [] letters = [] import string #Loads all words, and returns those with numLetters letters. def loadWords(numLetters, filename): something = open(filename, "r") data = something.readlines() something.close() newWords = [] for word in data: word= word.lower() newWord = "" #Strip all non-letters, including whitespace for letter in word: if letter in string.letters: newWord = newWord + letter newWords.append(newWord) # Only include words longer than 2 letters and # shorter than 10 letters... newList = [] for word in newWords: if len(word) == numLetters: newList.append(word) return(newList) def pickNumWords(): wl_str = raw_input("How many letters?") try: numLetters = int(wl_str) if numLetters < 3 or numLetters > 10: print "Pick a number between 3 and 10! Try again!" num = pickNumWords() return(num) except: print "that wasn't a valid number! Try again!" num = pickNumWords() return(num) #Everything is OK return numLetters def countLetters(word, letter): count = 0 for item in word: if item == letter: count = count + 1 return count def countLetterFreq(wordList, letter): wordSize = len( wordList[0] ) aList = [] for item in range(wordSize): aList.append(0) for word in wordList: index = 0 while index < wordSize: wl = word[index] if wl == letter: aList[index] = aList[index] + 1 index = index + 1 return aList def printLetters(): print "Letters so far:", for item in letters: print item, print def hangman(): global wordList global letters numLetters = pickNumWords() for x in range(numLetters): letters.append("_") guesses = numLetters * 2 print "You have", guesses, "guesses left" wordList = loadWords(numLetters, "6of12.txt") print "DEMO: We have", len(wordList), "words!" while guesses > 0: printLetters() letter = raw_input("Enter your letter guess:") newList = filter( lambda w: letter[0] not in w, wordList) print "DEMO: newList has", len(newList), "words left" if len(newList) > 0: wordList = newList guesses = guesses -1 print "Sorry, the word *I* was thinking of, doesn't have any letters", letter[0], " in it!" print "You have ", guesses, "guesses left" else: #Throw out any words with two of the same letter! newList = [] for item in wordList: if not (countLetters(item, letter[0]) > 1): newList.append(item) if len(newList) > 0: wordList = newList letterFreq = countLetterFreq(wordList, letter[0]) maxNum = max(letterFreq) maxIdx = letterFreq.index(maxNum) newList = filter( lambda w: w[maxIdx] == letter[0], wordList) wordList = newList print "DEMO:", wordList letters[maxIdx] = letter[0] print "Congratulations! You found a letter!" #did they win? Yah, right... if "_" not in letters: print "\n\nCONGRATULATIONS! You won!" guesses = 0 if "_" in letters: print "So sorry! You lost. The word I was thinking of was:" print wordList[0] hangman()