diff options
| author | Carlos Maiolino <[email protected]> | 2025-07-10 22:55:07 +0200 |
|---|---|---|
| committer | Carlos Maiolino <[email protected]> | 2025-07-10 22:56:55 +0200 |
| commit | d98f46ce647846b0aa30b2e16a30fd4e152a1bf5 (patch) | |
| tree | 267474fcc77cf20b428f6f4c7f768ca09f4cfe0e /mit/hangman/ps3_hangman.py | |
| parent | 869e68986aa8f69af6e7842260a68d1e5c6f796f (diff) | |
Add new code
Signed-off-by: Carlos Maiolino <[email protected]>
Diffstat (limited to 'mit/hangman/ps3_hangman.py')
| -rw-r--r-- | mit/hangman/ps3_hangman.py | 174 |
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) |
