{ "metadata": { "name": "", "signature": "sha256:668f52295bb8e65ad2ddd9293b48c435ea624c27afc5b1fec5862539fb575f75" }, "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\n", "lives = 0" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "wrong_letters = []" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "len(WORDS)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "62856" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "WORDS[30000:30010]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "['jotted',\n", " 'jotting',\n", " 'jottings',\n", " 'joule',\n", " 'joules',\n", " 'jounce',\n", " 'jounced',\n", " 'jounces',\n", " 'jouncing',\n", " 'journal']" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "target = random.choice(WORDS)\n", "target" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ "'rebounds'" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "discovered = list('_' * len(target))\n", "discovered" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "['_', '_', '_', '_', '_', '_']" ] } ], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "letter = input('Enter letter: ').strip().lower()[0]\n", "letter" ], "language": "python", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: sdfsdfs\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "'s'" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "def find_all(string, letter):\n", " locations = []\n", " starting=0\n", " location = string.find(letter)\n", " while location > -1:\n", " locations += [location]\n", " starting = location + 1\n", " location = string.find(letter, starting)\n", " return locations" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "find_all('happy', 'q')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "[]" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "guessed_letter = 'e'\n", "locations = find_all(target, guessed_letter)\n", "for location in locations:\n", " discovered[location] = guessed_letter\n", "discovered" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ "['_', 'e', '_', '_', '_', '_']" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "def updated_discovered_word(discovered, guessed_letter):\n", " locations = find_all(target, guessed_letter)\n", " for location in locations:\n", " discovered[location] = guessed_letter\n", " return discovered" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "def initialise():\n", " global lives, target, discovered, wrong_letters\n", " lives = STARTING_LIVES\n", " target = random.choice(WORDS)\n", " discovered = list('_' * len(target))\n", " wrong_letters = []" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "def do_turn():\n", " global discovered, lives, wrong_letters\n", " print('Word:', ' '.join(discovered), ' : Lives =', lives, ', wrong guesses:', ' '.join(sorted(wrong_letters)))\n", " guess = input('Enter letter: ').strip().lower()[0]\n", " if guess in target:\n", " updated_discovered_word(discovered, guess)\n", " else:\n", " lives -= 1\n", " if guess not in wrong_letters:\n", " wrong_letters += [guess]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "def play_game():\n", " global discovered, lives\n", " initialise()\n", " game_finished = False\n", " do_turn()\n", " while not game_finished:\n", " if '_' not in discovered:\n", " print('You won! The word was', target)\n", " game_finished = True\n", " elif lives <= 0:\n", " print('You lost. The word was', target)\n", " game_finished = True\n", " else:\n", " do_turn()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "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 _ _ _ _ _ _ _ _ _ _ _ _ : 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 _ _ a _ _ _ _ _ _ _ _ _ : Lives = 10 , wrong guesses: \n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: i\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ e _ _ a _ _ _ _ _ i _ i _ : Lives = 10 , wrong guesses: \n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: o\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ e _ _ a _ _ _ o _ i _ i _ : Lives = 10 , wrong guesses: \n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: t\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ e _ _ a _ _ _ o _ i t i _ : Lives = 10 , wrong guesses: \n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: r\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ e r _ a _ _ r o _ i t i _ : Lives = 10 , wrong guesses: \n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: n\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ e r _ a _ _ r o _ i t i _ : Lives = 9 , wrong guesses: n\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: s\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: _ e r _ a _ _ r o _ i t i _ : Lives = 8 , wrong guesses: n s\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: h\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: h e r _ a _ h r o _ i t i _ : Lives = 8 , wrong guesses: n s\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: c\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: h e r _ a _ h r o _ i t i c : Lives = 8 , wrong guesses: n s\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: c\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: h e r _ a _ h r o _ i t i c : Lives = 8 , wrong guesses: n s\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: m\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: h e r m a _ h r o _ i t i c : Lives = 8 , wrong guesses: n s\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: p\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Word: h e r m a p h r o _ i t i c : Lives = 8 , wrong guesses: n s\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter letter: d\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "You won! The word was hermaphroditic\n" ] } ], "prompt_number": 30 }, { "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 updated_discovered_word(self, guessed_letter):\n", " locations = find_all(self, 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", " updated_discovered_word(self, 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", " do_turn()\n", " while not self.game_finished:\n", " if self.game_won:\n", " print('You won! The word was', self.target)\n", " elif self.game_lost:\n", " print('You lost. The word was', self.target)\n", " else:\n", " do_turn()\n", " return self.game_won" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 47 }, { "cell_type": "code", "collapsed": false, "input": [ "g = Game(random.choice(WORDS))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 48 }, { "cell_type": "code", "collapsed": false, "input": [ "g.target" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 49, "text": [ "'paintbrush'" ] } ], "prompt_number": 49 }, { "cell_type": "code", "collapsed": false, "input": [ "g.discovered" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 50, "text": [ "['_', '_', '_', '_', '_', '_', '_', '_', '_', '_']" ] } ], "prompt_number": 50 }, { "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": 51 }, { "cell_type": "code", "collapsed": false, "input": [ "g.lives" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 52, "text": [ "9" ] } ], "prompt_number": 52 }, { "cell_type": "code", "collapsed": false, "input": [ "g.wrong_letters" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 53, "text": [ "['x']" ] } ], "prompt_number": 53 }, { "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: t\n" ] }, { "ename": "TypeError", "evalue": "'Game' object does not support item assignment", "output_type": "pyerr", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdo_turn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;32m\u001b[0m in \u001b[0;36mdo_turn\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 31\u001b[0m \u001b[0mguess\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0minput\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Enter letter: '\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstrip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlower\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 32\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mguess\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtarget\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 33\u001b[1;33m \u001b[0mupdated_discovered_word\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mguess\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 34\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 35\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlives\u001b[0m \u001b[1;33m-=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m\u001b[0m in \u001b[0;36mupdated_discovered_word\u001b[1;34m(discovered, guessed_letter)\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mlocations\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfind_all\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtarget\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mguessed_letter\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mlocation\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mlocations\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0mdiscovered\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mlocation\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mguessed_letter\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 5\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mdiscovered\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mTypeError\u001b[0m: 'Game' object does not support item assignment" ] } ], "prompt_number": 54 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }