Skip to main content

Python hangman TDD demonstration.

Project description

Development Status https://travis-ci.org/bionikspoon/Hangman.svg?branch=develop https://pypip.in/version/python-hangman/badge.svg?branch=develop https://coveralls.io/repos/bionikspoon/Hangman/badge.svg?branch=develop Documentation Status

A Python TDD Experiment

A python version agnostic, tox tested, travis-backed program! Documented and distributed.

Has very high unit test coverage, with passing tests on every version of python including PyPy.

Features

TODO

Documentation Status

Compatibility

Supported Python versions Supported Python implementations
  • Python 2.6

  • Python 2.7

  • Python 3.2

  • Python 3.3

  • Python 3.4

  • PyPy

Getting Started

At the command line either via easy_install or pip:

mkvirtualenv hangman  # optional for venv users
pip install python_hangman

hangman

Uninstall

$ pip uninstall python_hangman

Goal

Learning! Python in this case. I’m particularly interested in testing and Test Driven Development. This was a TDD exercise.

Also, explored:

  • Tox, test automation

  • Travis CI

  • Python version agnostic programming

  • Setuptools

  • Publishing on pip

  • Coverage via coveralls

  • Documentation with sphinx and ReadTheDocs

Design

There are 3 main components that run the game: hangman.Hangman, hangman.Commander, and hangman.Presenter

The entirety of the game logic is contained in hangman.Hangman. You could technically play the game in the python console by instantiating the class, submitting guesses with Hangman.guess(self, letter) and printing the game state.

For example:

>>> from hangman.hangman 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=['Z', 'E'], remaining_turns=8)

>>> game.status, game.misses, game.remaining_turns
('_AN__AN', ['Z', 'E'], 8)

hangman.Presenter is a simple presentation layer. It handles printing the art to the console, and collecting input from the user

The hangman.Commander is exactly that, the commander, the director, the maestro, the tour guide. It guides you, the user, through the game. It tells the presenter module what to print and what data to collect. The commander updates the state of the game and handles game events.

Design Reasoning

This design pattern was the right choice, because it offers a sensible separation between the game logic and presentation layer. I did not know in advance how the game was going to interact with the user. Curses was on the table, it still is. But, following TDD, there needed to be an immediate working solution that could be swapped out in the future. And that’s what this design allows. The presenter class can changed to any other presentation layer with out changing the game.

Call Diagram

Call Diagram

Documentation

The full documentation is at https://python-hangman.readthedocs.org.

History

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_hangman-1.4.0.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_hangman-1.4.0-py2.py3-none-any.whl (11.4 kB view details)

Uploaded Python 2Python 3

File details

Details for the file python_hangman-1.4.0.tar.gz.

File metadata

File hashes

Hashes for python_hangman-1.4.0.tar.gz
Algorithm Hash digest
SHA256 d032252227736fd9786f68f2df1c04b88744b3f8f1cfd4dda42bb648cd7c223d
MD5 f4c16e26e974312725cc3ca21ebb530f
BLAKE2b-256 212eccd55415b4f772cf624ce095bdbdb632e5ecf770724d3c03b88ccff893f1

See more details on using hashes here.

File details

Details for the file python_hangman-1.4.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for python_hangman-1.4.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 83deafc638bbc3bb4fc8960e7ef9be28771b49ff59e112a686e28d41907b8d77
MD5 95db3a25d12058e226765d10554ff8b4
BLAKE2b-256 d4540d8ae39824b5f6581fff5d8cf0a366587bc55b21f3c06d1c6818c9e716c1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page