hangman package

Hangman

A well tested, cli, python version-agnostic, multi-platform hangman game. It’s built following TDD principles and each component services a sensibly distinct logical purpose.

Submodules

hangman.__main__

Entry point for hangman command.

hangman.controller

This module is responsible for guiding the user through the game.

hangman.controller.game_loop(game=hangman(status='_______', misses=[], remaining_turns=10), flash=<hangman.utils.FlashMessage object>)[source]

Main game loop.

Parameters:
Returns:

hangman.model

This module contains all of the game logic.

class hangman.model.Hangman(answer=None)[source]

Bases: object

The hangman game object contains the logic for managing the status of the game and raising key game related events.

>>> from hangman.model import Hangman
>>> game = Hangman(answer='hangman')
>>> game.guess('a')
hangman(status='_A___A_', misses=[], remaining_turns=10)
>>> game.guess('n').guess('z').guess('e')
hangman(status='_AN__AN', misses=['E', 'Z'], remaining_turns=8)
>>> game.status
'_AN__AN'
>>> game.misses
['E', 'Z']
>>> game.remaining_turns
8
MAX_TURNS = 10
add_hit(value)[source]

Add a hit to the model. Check for game won.

Parameters:value – A single letter.
Raises:GameWon
add_miss(value)[source]

Add a miss to the model. Check for game over.

Parameters:value – A single letter.
Raises:GameOver
guess(letter)[source]

Check if guess is a hit or miss.

Parameters:letter (str) – Letter to check
Returns:self
Return type:Hangman
Raises:ValueError
hits

Get list of hits.

Return type:[str]
is_valid_answer(word)[source]

Validate answer. Letters only. Max:16

Parameters:word (str) – Word to validate.
Returns:
Return type:bool
is_valid_guess(letter)[source]

Validate guess. Letters only. Max:1

Parameters:letter (str) – Letter to validate
Returns:
Return type:bool
misses

Get list of misses.

Return type:[str]
remaining_turns

Calculate number of turns remaining.

Returns:Number of turns remaining.
Return type:int
status

Build a string representation of status with letters for hits and _ for unknowns.

Returns:game status as string
Return type:str

hangman.utils

App utilities.

class hangman.utils.WordBank[source]

Bases: object

Default collection of words to choose from

WORDS = ['ATTEMPT', 'DOLL', 'ELLEN', 'FLOATING', 'PRIDE', 'HEADING', 'FILM', 'KIDS', 'MONKEY', 'LUNGS', 'HABIT', 'SPIN', 'DISCUSSION', 'OFFICIAL', 'PHILADELPHIA', 'FACING', 'MARTIN', 'NORWAY', 'POLICEMAN', 'TOBACCO', 'VESSELS', 'TALES', 'VAPOR', 'INDEPENDENT', 'COOKIES', 'WEALTH', 'PENNSYLVANIA', 'EXPLANATION', 'DAMAGE', 'OCCASIONALLY', 'EXIST', 'SIMPLEST', 'PLATES', 'CANAL', 'NEIGHBORHOOD', 'PALACE', 'ADVICE', 'LABEL', 'DANNY', 'CLAWS', 'RUSH', 'CHOSE', 'EGYPT', 'POETRY', 'BREEZE', 'WOLF', 'MANUFACTURING', 'OURSELVES', 'SCARED', 'ARRANGEMENT', 'POSSIBLY', 'PROMISED', 'BRICK', 'ACRES', 'TREATED', 'SELECTION', 'POSITIVE', 'CONSTANTLY', 'SATISFIED', 'ZOO', 'CUSTOMS', 'UNIVERSITY', 'FIREPLACE', 'SHALLOW', 'INSTANT', 'SALE', 'PRACTICAL', 'SILLY', 'SATELLITES', 'SHAKING', 'ROCKY', 'SLOPE', 'CASEY', 'REMARKABLE', 'RUBBED', 'HAPPILY', 'MISSION', 'CAST', 'SHAKE', 'REQUIRE', 'DONKEY', 'EXCHANGE', 'JANUARY', 'MOUNT', 'AUTUMN', 'SLIP', 'BORDER', 'LEE', 'MELTED', 'TRAP', 'SOLAR', 'RECALL', 'MYSTERIOUS', 'SWUNG', 'CONTRAST', 'TOY', 'GRABBED', 'AUGUST', 'RELATIONSHIP', 'HUNTER', 'DEPTH', 'FOLKS', 'DEEPLY', 'IMAGE', 'STIFF', 'RHYME', 'ILLINOIS', 'SPECIES', 'ADULT', 'FINEST', 'THUMB', 'SLIGHT', 'GRANDMOTHER', 'SHOUT', 'HARRY', 'MATHEMATICS', 'MILL', 'ESSENTIAL', 'TUNE', 'FORT', 'COACH', 'NUTS', 'GARAGE', 'CALM', 'MEMORY', 'SOAP']
classmethod get()[source]

Get a random word from word list.

Return str:Random word.
classmethod set(*values)[source]

Set WordBank word list.

Parameters:values (tuple) –
class hangman.utils.FlashMessage[source]

Bases: object

Basic “flash message” implementation.

game_answer = ''
game_over = False
game_won = False
message = ''
exception hangman.utils.GameOver[source]

Bases: exceptions.Exception

Raised when out of turns.

exception hangman.utils.GameWon[source]

Bases: exceptions.Exception

Raised when answer has been guessed.

exception hangman.utils.GameFinished[source]

Bases: exceptions.Exception

Raised when controller should break game loop.

hangman.view

This module handles user interaction. Printing and prompting.

hangman.view.build_partial_picture(remaining_turns)[source]

Generator. Draw the iconic hangman game status.

Parameters:remaining_turns (int) – Number of turns remaining.
Returns:Line of picture.
hangman.view.build_partial_status(misses_block)[source]

Generator. Draw game status.

Returns:Line of status.
hangman.view.draw_board(game, message=<hangman.utils.FlashMessage object>)[source]

Present the game status with pictures.

Clears the screen. Flashes any messages. Zip the two halves of the picture together.

Parameters:
Raises:

hangman.utils.GameFinished

Returns:

self

hangman.view.print_partial_body(picture, status)[source]
hangman.view.print_partial_header()[source]
hangman.view.print_partial_message(flash)[source]
hangman.view.print_spacer()[source]
hangman.view.prompt_guess()[source]

Prompt user for a single keystroke.

Returns:a single letter
Raises:KeyboardInterrupt
hangman.view.prompt_play_again()[source]

Prompt user to play again.

Return type:bool
Returns:bool response
hangman.view.say_goodbye()[source]

Write a goodbye message.