{ "metadata": { "name": "", "signature": "sha256:44071c1a95bc0678534109dd2aa9b1d6318c87aa5048ca952603795efd142b14" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "import re\n", "import random" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "WORDS = [w.strip() for w in open('/usr/share/dict/british-english').readlines() \n", " if re.match(r'^[a-z]*$', w.strip())]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "STARTING_LIVES = 10" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "class Game:\n", " def __init__(self, target, lives=STARTING_LIVES):\n", " self.lives = lives\n", " self.target = target\n", " self.discovered = list('_' * len(target))\n", " self.wrong_letters = []\n", " self.game_finished = False\n", " self.game_won = False\n", " self.game_lost = False\n", " \n", " def find_all(self, letter):\n", " locations = []\n", " starting=0\n", " location = self.target.find(letter)\n", " while location > -1:\n", " locations += [location]\n", " starting = location + 1\n", " location = self.target.find(letter, starting)\n", " return locations\n", " \n", " def update_discovered_word(self, guessed_letter):\n", " locations = self.find_all(guessed_letter)\n", " for location in locations:\n", " self.discovered[location] = guessed_letter\n", " return self.discovered\n", " \n", " def do_turn(self):\n", " print('Word:', ' '.join(self.discovered), \n", " ' : Lives =', self.lives, \n", " ', wrong guesses:', ' '.join(sorted(self.wrong_letters)))\n", " guess = input('Enter letter: ').strip().lower()[0]\n", " if guess in self.target:\n", " self.update_discovered_word(guess)\n", " else:\n", " self.lives -= 1\n", " if guess not in self.wrong_letters:\n", " self.wrong_letters += [guess]\n", " if self.lives == 0:\n", " self.game_finished = True\n", " self.game_lost = True\n", " if '_' not in self.discovered:\n", " self.game_finished = True\n", " self.game_won = True\n", " \n", " def play_game(self):\n", " self.do_turn()\n", " while not self.game_finished:\n", " self.do_turn()\n", " return self.game_won\n", " \n", " def report_on_game(self):\n", " if self.game_won:\n", " print('You won! The word was', self.target)\n", " else:\n", " print('You lost. The word was', self.target)\n", " return self.game_won\n", " \n", " def play_game_with_report(self):\n", " self.play_game()\n", " self.report_on_game()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ "g = Game(random.choice(WORDS))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "g.target" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 23, "text": [ "'cooing'" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "g.discovered" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 24, "text": [ "['_', '_', '_', '_', '_', '_']" ] } ], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "g.do_turn()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ _ _ _ _ _ : Lives = 10 , wrong guesses: \n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: x\n" ] } ], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "g.lives" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 26, "text": [ "9" ] } ], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "g.wrong_letters" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 27, "text": [ "['x']" ] } ], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "g.do_turn()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ _ _ _ _ _ : Lives = 9 , wrong guesses: x\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: o\n" ] } ], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "g.lives" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 29, "text": [ "9" ] } ], "prompt_number": 29 }, { "cell_type": "code", "collapsed": false, "input": [ "g.discovered" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 30, "text": [ "['_', 'o', 'o', '_', '_', '_']" ] } ], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "g.wrong_letters" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 31, "text": [ "['x']" ] } ], "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [ "g = Game(random.choice(WORDS))\n", "g.play_game_with_report()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ _ _ _ _ _ _ _ _ _ : Lives = 10 , wrong guesses: \n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: e\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ _ _ _ _ _ _ _ _ _ : Lives = 9 , wrong guesses: e\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: a\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ a _ _ _ _ a _ _ _ : Lives = 9 , wrong guesses: e\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: t\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ a _ _ _ _ a _ t _ : Lives = 9 , wrong guesses: e\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: o\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ a _ _ _ _ a _ t _ : Lives = 8 , wrong guesses: e o\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: h\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ a _ _ _ _ a _ t _ : Lives = 7 , wrong guesses: e h o\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: s\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ a _ _ _ _ a _ t s : Lives = 7 , wrong guesses: e h o\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: r\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ a _ _ _ _ a _ t s : Lives = 6 , wrong guesses: e h o r\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: d\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ a _ _ _ _ a _ t s : Lives = 5 , wrong guesses: d e h o r\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: l\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ a l l _ _ a _ t s : Lives = 5 , wrong guesses: d e h o r\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: f\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ a l l _ _ a _ t s : Lives = 4 , wrong guesses: d e f h o r\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: n\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ a l l _ _ a n t s : Lives = 4 , wrong guesses: d e f h o r\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: g\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: g a l l _ _ a n t s : Lives = 4 , wrong guesses: d e f h o r\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: i\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: g a l l i _ a n t s : Lives = 4 , wrong guesses: d e f h o r\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: v\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "You won! The word was gallivants\n" ] } ], "prompt_number": 37 }, { "cell_type": "code", "collapsed": false, "input": [ "g = Game(random.choice(WORDS))\n", "g.play_game()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ _ _ _ _ _ _ _ : Lives = 10 , wrong guesses: \n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: e\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ _ _ e e _ _ _ : Lives = 10 , wrong guesses: \n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: a\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ _ _ e e _ _ _ : Lives = 9 , wrong guesses: a\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: i\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ _ _ e e i _ _ : Lives = 9 , wrong guesses: a\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: n\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ _ _ e e i n _ : Lives = 9 , wrong guesses: a\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: g\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ _ _ e e i n g : Lives = 9 , wrong guesses: a\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: u\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ _ _ e e i n g : Lives = 8 , wrong guesses: a u\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: s\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: s _ _ e e i n g : Lives = 8 , wrong guesses: a u\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: h\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: s _ _ e e i n g : Lives = 7 , wrong guesses: a h u\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: c\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: s _ _ e e i n g : Lives = 6 , wrong guesses: a c h u\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: t\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: s _ _ e e i n g : Lives = 5 , wrong guesses: a c h t u\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: r\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: s _ r e e i n g : Lives = 5 , wrong guesses: a c h t u\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: c\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: s _ r e e i n g : Lives = 4 , wrong guesses: a c h t u\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: p\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 38, "text": [ "True" ] } ], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [ "g.target" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 39, "text": [ "'spreeing'" ] } ], "prompt_number": 39 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }