# 6.00 Problem Set 3 # # Hangman # # ----------------------------------- # Helper code # (you don't need to understand this helper code) import random import string WORDLIST_FILENAME = "words.txt" def load_words(): """ Returns a list of valid words. Words are strings of lowercase letters. Depending on the size of the word list, this function may take a while to finish. """ print "Loading word list from file..." # inFile: file inFile = open(WORDLIST_FILENAME, 'r', 0) # line: string line = inFile.readline() # wordlist: list of strings wordlist = string.split(line) print " ", len(wordlist), "words loaded." return wordlist def choose_word(wordlist): """ wordlist (list): list of words (strings) Returns a word from wordlist at random """ return random.choice(wordlist) # end of helper code # ----------------------------------- # actually load the dictionary of words and point to it with # the wordlist variable so that it can be accessed from anywhere # in the program wordlist = load_words() # your code begins here! def available_letters(letters_string, guessed_letter): letters_list = list(letters_string) index = find_letter(letters_list, guessed_letter) del letters_list[index] letters_string = ''.join(letters_list) #print "letters_string within the function", letters_string return letters_string def find_letter(word, guessed_letter): ###Returns a list of index values of where the letter occurs. index = 0 index_list = [] for letter in word: if letter == guessed_letter: index_list = index_list + [index,] index +=1 return index_list ### Use this to determine whether a guess is good or not. If index_list =/ None, then guess is good. But estimate how many lines of code would be run through each time. def update_word(word_blanks, guessed_letter, index_list): for index in index_list: word_blanks[index] = guessed_letter print word_blanks word = choose_word(wordlist) print word print "Welcome to the game, Hangman!" print "I'm thinking of a word that is", len(word), "letters long." letters_string = "abcdefghijklmnopqrstuvwxyz" word_blanks = ["_",]*len(word) for guess_number in range(26,1,-1): if guess_number==1: print "You have", guess_number, "guess left." else: print "You have", guess_number, "guesses left." print "Available letters:", letters_string guessed_letter = raw_input ("Please guess a letter:") if type(guessed_letter) =/ str or if len(guessed_letter) > 1: print "Oh no! You just wasted one of your guesses by not guessing a single letter!" else: guessed_letter = guessed_letter.lower() #print guessed_letter index_list = find_letter(word, guessed_letter) #print index_list if guessed_letter in word: word_blanks = update_word(word_blanks, guessed_letter, index_list) delimiter = ' ' updated_word = delimiter.join(word_blanks) print "Good guess:", str(updated_word) else: print "Oops! That letter is not in my word:" letters_string = available_letters(letters_string, guessed_letter) #updates which letters are available word = "cheese" guessed_letter = "e" index_list = find_letter(word, guessed_letter)
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question