CSc 7003, Programming for Data Science (Summer 2019)
Program 4 - Hangman
Write a Python program to implement the "Hangman" game of guessing phrases. A sample session follows:
This program plays the game of hangman. The computer will pick a random phrase. After 5 wrong guesses you lose. I am thinking of a MOVIE ... WHOS AFRAID OF VIRGINIA WOOLF The current phrase is **** ****** ** ******** ***** The letters you have not guessed yet are: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Enter your next guess: w You guessed W That is present in the secret phrase. You have made 0 wrong guesses. The current phrase is W*** ****** ** ******** W**** The letters you have not guessed yet are: A B C D E F G H I J K L M N O P Q R S T U V X Y Z Enter your next guess: o You guessed O That is present in the secret phrase. You have made 0 wrong guesses. The current phrase is W*O* ****** O* ******** WOO** The letters you have not guessed yet are: A B C D E F G H I J K L M N P Q R S T U V X Y Z Enter your next guess: o O is not a valid guess. The letters you have not guessed yet are: A B C D E F G H I J K L M N P Q R S T U V X Y Z Enter your next guess: 3 3 is not a valid guess. The letters you have not guessed yet are: A B C D E F G H I J K L M N P Q R S T U V X Y Z Enter your next guess: m You guessed M That is not present in the secret phrase. You have made 1 wrong guess. The current phrase is W*O* ****** O* ******** WOO** The letters you have not guessed yet are: A B C D E F G H I J K L N P Q R S T U V X Y Z Enter your next guess: n You guessed N That is present in the secret phrase. You have made 1 wrong guess. The current phrase is W*O* ****** O* *****N** WOO** The letters you have not guessed yet are: A B C D E F G H I J K L P Q R S T U V X Y Z Enter your next guess: q You guessed Q That is not present in the secret phrase. You have made 2 wrong guesses. The current phrase is W*O* ****** O* *****N** WOO** The letters you have not guessed yet are: A B C D E F G H I J K L P R S T U V X Y Z Enter your next guess: z You guessed Z That is not present in the secret phrase. You have made 3 wrong guesses. The current phrase is W*O* ****** O* *****N** WOO** The letters you have not guessed yet are: A B C D E F G H I J K L P R S T U V X Y Enter your next guess: v You guessed V That is present in the secret phrase. You have made 3 wrong guesses. The current phrase is W*O* ****** O* V****N** WOO** The letters you have not guessed yet are: A B C D E F G H I J K L P R S T U X Y Enter your next guess: x You guessed X That is not present in the secret phrase. You have made 4 wrong guesses. The current phrase is W*O* ****** O* V****N** WOO** The letters you have not guessed yet are: A B C D E F G H I J K L P R S T U Y Enter your next guess: t You guessed T That is not present in the secret phrase. You lose. The secret phrase was WHOS AFRAID OF VIRGINIA WOOLF Do you want to play again? (y/n): y I am thinking of a MOVIE ... THE PRESTIGE The current phrase is *** ******** The letters you have not guessed yet are: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Enter your next guess: T You guessed T That is present in the secret phrase. You have made 0 wrong guesses. The current phrase is T** ****T*** The letters you have not guessed yet are: A B C D E F G H I J K L M N O P Q R S U V W X Y Z Enter your next guess: H You guessed H That is present in the secret phrase. You have made 0 wrong guesses. The current phrase is TH* ****T*** The letters you have not guessed yet are: A B C D E F G I J K L M N O P Q R S U V W X Y Z Enter your next guess: e You guessed E That is present in the secret phrase. You have made 0 wrong guesses. The current phrase is THE **E*T**E The letters you have not guessed yet are: A B C D F G I J K L M N O P Q R S U V W X Y Z Enter your next guess: p You guessed P That is present in the secret phrase. You have made 0 wrong guesses. The current phrase is THE P*E*T**E The letters you have not guessed yet are: A B C D F G I J K L M N O Q R S U V W X Y Z Enter your next guess: r You guessed R That is present in the secret phrase. You have made 0 wrong guesses. The current phrase is THE PRE*T**E The letters you have not guessed yet are: A B C D F G I J K L M N O Q S U V W X Y Z Enter your next guess: s You guessed S That is present in the secret phrase. You have made 0 wrong guesses. The current phrase is THE PREST**E The letters you have not guessed yet are: A B C D F G I J K L M N O Q U V W X Y Z Enter your next guess: i You guessed I That is present in the secret phrase. You have made 0 wrong guesses. The current phrase is THE PRESTI*E The letters you have not guessed yet are: A B C D F G J K L M N O Q U V W X Y Z Enter your next guess: g You guessed G That is present in the secret phrase. The phrase is THE PRESTIGE YOU WIN!!!! Do you want to play again? (y/n): nThis program will use the following Python Class (PhraseBank.py) to initialize a phrase bank and retrieve the next phrase as well as retrieve the topic of the phrases.
import random class PhraseBank: def __init__(self,fname): with open(fname) as f: p = f.readlines() ps = [x.strip().upper() for x in p] self._topic = ps[0] pss = ps[1:] random.shuffle(pss) self._phrases = pss self._current_index = 0 def next_phrase(self): self._current_index = (self._current_index + 1)%len(self._phrases) return self._phrases[self._current_index] def topic(self): return self._topicYou should use a variable:
remaining_letters = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z "which will keep track of the remaining letters of the alphabet that have not been used by the user.
The template for your Hangman.py program should be the following:
import sys from PhraseBank import * NUM_WRONG_LIMIT = 5 def main(): intro() phrases = PhraseBank(sys.argv[1]) while True: play_one_round(phrases) response = input("Do you want to play again? (y/n): ").upper().strip() if response != "Y": break def intro(): print("\nThis program plays the game of hangman.") print("The computer will pick a random phrase.") print("After "+str(NUM_WRONG_LIMIT)+" wrong guesses you lose.\n") def play_one_round(phrases): # implements the code for one round of the game # keep playing while the player has not won and not lost the game. # loss would be indicated by: number of wrong guesses is less than NUM_WRONG_LIMIT # win would be indicated when all letters have been revealed. def current_phrase(phrase, remaining_letters): # This function takes as input the phrase the user is trying to guess and # remaining_letters and returns the phrase with letters that appear in remaining_letters # as * and leaving other letters as they are. def test_if_win_loss(num_wrong, result, phrase): # this function prints the message for WIN or LOSS or number of wrong guesses def get_valid_guess(remaining_letters): # this function repeatedly prints the input message asking the user for the next guess # and returns a valid guess