summaryrefslogtreecommitdiff
path: root/mit/hangman/ps3_hangman.py
diff options
context:
space:
mode:
Diffstat (limited to 'mit/hangman/ps3_hangman.py')
-rw-r--r--mit/hangman/ps3_hangman.py174
1 files changed, 174 insertions, 0 deletions
diff --git a/mit/hangman/ps3_hangman.py b/mit/hangman/ps3_hangman.py
new file mode 100644
index 0000000..7d7d8e9
--- /dev/null
+++ b/mit/hangman/ps3_hangman.py
@@ -0,0 +1,174 @@
+#!/usr/bin/python3
+
+# Hangman game
+#
+
+# -----------------------------------
+# Helper code
+# You don't need to understand this helper code,
+# but you will have to know how to use the functions
+# (so be sure to read the docstrings!)
+
+import random
+
+WORDLIST_FILENAME = "words.txt"
+
+def loadWords():
+ """
+ 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')
+ # line: string
+ line = inFile.readline()
+ # wordlist: list of strings
+ wordlist = line.split()
+ print(" ", len(wordlist), "words loaded.")
+ return wordlist
+
+def chooseWord(wordlist):
+ """
+ wordlist (list): list of words (strings)
+
+ Returns a word from wordlist at random
+ """
+ return random.choice(wordlist)
+
+# end of helper code
+# -----------------------------------
+
+# Load the list of words into the variable wordlist
+# so that it can be accessed from anywhere in the program
+wordlist = loadWords()
+
+def isWordGuessed(secretWord, lettersGuessed):
+ '''
+ secretWord: string, the word the user is guessing
+ lettersGuessed: list, what letters have been guessed so far
+ returns: boolean, True if all the letters of secretWord are in lettersGuessed;
+ False otherwise
+ This function assumes variable lettersGuessed have no repeated letters
+ '''
+ num = len(secretWord)
+
+ for i in secretWord:
+ if i in lettersGuessed:
+ num -= 1
+
+ if num == 0:
+ return True
+ else:
+ return False
+
+
+
+def getGuessedWord(secretWord, lettersGuessed):
+ '''
+ secretWord: string, the word the user is guessing
+ lettersGuessed: list, what letters have been guessed so far
+ returns: string, comprised of letters and underscores that represents
+ what letters in secretWord have been guessed so far.
+ '''
+ word = ""
+
+ for i in secretWord:
+ if i in lettersGuessed:
+ word += i
+ else:
+ word += "_ "
+
+ return word
+
+
+
+def getAvailableLetters(lettersGuessed):
+ '''
+ lettersGuessed: list, what letters have been guessed so far
+ returns: string, comprised of letters that represents what letters have not
+ yet been guessed.
+ '''
+ alphabet = "abcdefghijklmnopqrstuvwxyz"
+ available = ""
+
+ for i in alphabet:
+ if i not in lettersGuessed:
+ available += i
+ return available
+
+def hangman(secretWord):
+ '''
+ secretWord: string, the secret word to guess.
+
+ Starts up an interactive game of Hangman.
+
+ * At the start of the game, let the user know how many
+ letters the secretWord contains.
+
+ * Ask the user to supply one guess (i.e. letter) per round.
+
+ * The user should receive feedback immediately after each guess
+ about whether their guess appears in the computers word.
+
+ * After each round, you should also display to the user the
+ partially guessed word so far, as well as letters that the
+ user has not yet guessed.
+
+ Follows the other limitations detailed in the problem write-up.
+ '''
+
+ # Number of guesses user still has
+ num_guesses = 8
+
+ # Tracks the letters already guessed by user
+ lettersGuessed = []
+
+
+ print("Welcome to the game, Hangman!")
+ print("I am thinking of a word that is " + str(len(secretWord)) + \
+ " letters long")
+
+ while True:
+
+ available = getAvailableLetters(lettersGuessed)
+
+ print("------------")
+ if isWordGuessed(secretWord, lettersGuessed):
+ print("Congratulations, you won!")
+ win = True
+ break
+ elif num_guesses == 0:
+ print("Sorry, you ran out of guesses. The word was: " + secretWord)
+ break
+
+ print("You have " + str(num_guesses) + " guesses left.")
+ print("Available letters: " + available)
+
+ guess = input("Please guess a letter: ")
+
+ if guess not in available:
+ print("Oops! You've already guessed that letter: " + \
+ getGuessedWord(secretWord, lettersGuessed))
+ continue
+
+ lettersGuessed.append(guess)
+
+ if guess not in secretWord:
+ print("Oops! That letter is not in my word: " + \
+ getGuessedWord(secretWord, lettersGuessed))
+ num_guesses -= 1
+ continue
+ else:
+ print("Good guess: " + getGuessedWord(secretWord, lettersGuessed))
+
+
+# When you've completed your hangman function, uncomment these two lines
+# and run this file to test! (hint: you might want to pick your own
+# secretWord while you're testing)
+
+# secretWord = chooseWord(wordlist).lower()
+secretWord = "swards"
+hangman(secretWord)