import random HANGMAN_ART = [ ''' +---+ | | | | ======= ''', ''' +---+ | O | | | ======= ''', ''' +---+ | O | | | | ======= ''', ''' +---+ | O | /| | | ======= ''', ''' +---+ | O | /|\\ | | ======= ''', ''' +---+ | O | /|\\ | | | ======= ''', ''' +---+ | O | /|\\ | / | ======= ''', ''' +---+ | O | /|\\ | / \\ | ======= ''' ] words = "elephant giraffe tiger lion zebra monkey penguin kangaroo hippopotamus rhinoceros " \ "china india united_states russia canada brazil australia argentina kazakhstan algeria " \ "apple banana orange grape strawberry watermelon pineapple kiwi peach mango " \ "red blue green yellow purple orange black white pink brown " \ "car bus train bicycle motorcycle airplane helicopter boat truck submarine".split() def getRandomWord(wordlist): # this function returns a random string from the list of strings passed in wordIndex = random.randint(0, len(wordlist) - 1) return wordlist[wordIndex] def displayBoard(missedLetters, correctLetters, secretWord): artIndex = len(missedLetters) print(HANGMAN_ART[artIndex]) print() print('Missed Letters:', end=' ') for letter in missedLetters: print(letter, end=' ') print() blanks = '_' * len(secretWord) for i in range(len(secretWord)): # replace blanks with correctly guessed letters if secretWord[i] in correctLetters: blanks = blanks[:i] + secretWord[i] + blanks[i+1:] # show the blanks and the correctly guessed letters for letter in blanks: print(letter, end=' ') print() def getGuess(alreadyGuessed): # returns the letter the player enters. Makes sure the player entered a # single letter and nothing else while True: guess = input('Guess a letter: ') guess = guess.lower() if len(guess) != 1: print('Please enter a single letter.') elif guess in alreadyGuessed: print('You already guessed that letter. Choose again.') elif guess not in 'abcdefghijklmnopqrstuvwxyz': print('Please enter a letter of the alphabet.') else: return guess def playAgain(): # this function returns True if the user wants to play again, # otherwise False if they do not print('Do you want to play again? (yes or no)') playAgain = input() playAgain = playAgain.lower() return playAgain.startswith('y') print('H A N G M A N') missedLetters = '' correctLetters = '' secretWord = getRandomWord(words) gameIsDone = False while True: displayBoard(missedLetters, correctLetters, secretWord) # let the player guess guess = getGuess(missedLetters + correctLetters) if guess in secretWord: correctLetters += guess # check if the player won foundAllLetters = True for i in range(len(secretWord)): if secretWord[i] not in correctLetters: foundAllLetters = False break if foundAllLetters: print('Yes! The secret word is "' + secretWord + '"! You have won!') gameIsDone = True else: missedLetters += guess # check if player is out of guesses (lost) if len(missedLetters) == len(HANGMAN_ART) - 1: displayBoard(missedLetters, correctLetters, secretWord) print('You have run out of guesses!\nAfter ' + str(len(missedLetters)) + ' missed guesses and ' + str(len(correctLetters)) + ' correct guesses, the ' \ 'word was ' + secretWord) gameIsDone = True # only if the game is done, ask the player if they want to play again if gameIsDone: if playAgain(): missedLetters = '' correctLetters = '' secretWord = getRandomWord(words) gameIsDone = False else: break # break out of game loop. user is done playing