Moved word filter
[cas-master-teacher-training.git] / .ipynb_checkpoints / hangman-both-checkpoint.ipynb
1 {
2 "metadata": {
3 "name": "",
4 "signature": "sha256:3fd62f8c6cf4619b87bb367305e68080edd846095261b09f98699554a3e60841"
5 },
6 "nbformat": 3,
7 "nbformat_minor": 0,
8 "worksheets": [
9 {
10 "cells": [
11 {
12 "cell_type": "code",
13 "collapsed": false,
14 "input": [
15 "import re\n",
16 "import random"
17 ],
18 "language": "python",
19 "metadata": {},
20 "outputs": [],
21 "prompt_number": 1
22 },
23 {
24 "cell_type": "code",
25 "collapsed": false,
26 "input": [
27 "WORDS = [w.strip() for w in open('/usr/share/dict/british-english').readlines() \n",
28 " if re.match(r'^[a-z]*$', w.strip())]"
29 ],
30 "language": "python",
31 "metadata": {},
32 "outputs": [],
33 "prompt_number": 2
34 },
35 {
36 "cell_type": "code",
37 "collapsed": false,
38 "input": [
39 "STARTING_LIVES = 10\n",
40 "lives = 0"
41 ],
42 "language": "python",
43 "metadata": {},
44 "outputs": [],
45 "prompt_number": 3
46 },
47 {
48 "cell_type": "code",
49 "collapsed": false,
50 "input": [
51 "wrong_letters = []"
52 ],
53 "language": "python",
54 "metadata": {},
55 "outputs": [],
56 "prompt_number": 4
57 },
58 {
59 "cell_type": "code",
60 "collapsed": false,
61 "input": [
62 "len(WORDS)"
63 ],
64 "language": "python",
65 "metadata": {},
66 "outputs": [
67 {
68 "metadata": {},
69 "output_type": "pyout",
70 "prompt_number": 5,
71 "text": [
72 "62856"
73 ]
74 }
75 ],
76 "prompt_number": 5
77 },
78 {
79 "cell_type": "code",
80 "collapsed": false,
81 "input": [
82 "WORDS[30000:30010]"
83 ],
84 "language": "python",
85 "metadata": {},
86 "outputs": [
87 {
88 "metadata": {},
89 "output_type": "pyout",
90 "prompt_number": 6,
91 "text": [
92 "['jotted',\n",
93 " 'jotting',\n",
94 " 'jottings',\n",
95 " 'joule',\n",
96 " 'joules',\n",
97 " 'jounce',\n",
98 " 'jounced',\n",
99 " 'jounces',\n",
100 " 'jouncing',\n",
101 " 'journal']"
102 ]
103 }
104 ],
105 "prompt_number": 6
106 },
107 {
108 "cell_type": "code",
109 "collapsed": false,
110 "input": [
111 "target = random.choice(WORDS)\n",
112 "target"
113 ],
114 "language": "python",
115 "metadata": {},
116 "outputs": [
117 {
118 "metadata": {},
119 "output_type": "pyout",
120 "prompt_number": 14,
121 "text": [
122 "'rebounds'"
123 ]
124 }
125 ],
126 "prompt_number": 14
127 },
128 {
129 "cell_type": "code",
130 "collapsed": false,
131 "input": [
132 "discovered = list('_' * len(target))\n",
133 "discovered"
134 ],
135 "language": "python",
136 "metadata": {},
137 "outputs": [
138 {
139 "metadata": {},
140 "output_type": "pyout",
141 "prompt_number": 8,
142 "text": [
143 "['_', '_', '_', '_', '_', '_']"
144 ]
145 }
146 ],
147 "prompt_number": 8
148 },
149 {
150 "cell_type": "code",
151 "collapsed": false,
152 "input": [
153 "letter = input('Enter letter: ').strip().lower()[0]\n",
154 "letter"
155 ],
156 "language": "python",
157 "metadata": {},
158 "outputs": [
159 {
160 "name": "stdout",
161 "output_type": "stream",
162 "stream": "stdout",
163 "text": [
164 "Enter letter: sdfsdfs\n"
165 ]
166 },
167 {
168 "metadata": {},
169 "output_type": "pyout",
170 "prompt_number": 9,
171 "text": [
172 "'s'"
173 ]
174 }
175 ],
176 "prompt_number": 9
177 },
178 {
179 "cell_type": "code",
180 "collapsed": false,
181 "input": [
182 "def find_all(string, letter):\n",
183 " locations = []\n",
184 " starting=0\n",
185 " location = string.find(letter)\n",
186 " while location > -1:\n",
187 " locations += [location]\n",
188 " starting = location + 1\n",
189 " location = string.find(letter, starting)\n",
190 " return locations"
191 ],
192 "language": "python",
193 "metadata": {},
194 "outputs": [],
195 "prompt_number": 11
196 },
197 {
198 "cell_type": "code",
199 "collapsed": false,
200 "input": [
201 "find_all('happy', 'q')"
202 ],
203 "language": "python",
204 "metadata": {},
205 "outputs": [
206 {
207 "metadata": {},
208 "output_type": "pyout",
209 "prompt_number": 12,
210 "text": [
211 "[]"
212 ]
213 }
214 ],
215 "prompt_number": 12
216 },
217 {
218 "cell_type": "code",
219 "collapsed": false,
220 "input": [
221 "guessed_letter = 'e'\n",
222 "locations = find_all(target, guessed_letter)\n",
223 "for location in locations:\n",
224 " discovered[location] = guessed_letter\n",
225 "discovered"
226 ],
227 "language": "python",
228 "metadata": {},
229 "outputs": [
230 {
231 "metadata": {},
232 "output_type": "pyout",
233 "prompt_number": 15,
234 "text": [
235 "['_', 'e', '_', '_', '_', '_']"
236 ]
237 }
238 ],
239 "prompt_number": 15
240 },
241 {
242 "cell_type": "code",
243 "collapsed": false,
244 "input": [
245 "def updated_discovered_word(discovered, guessed_letter):\n",
246 " locations = find_all(target, guessed_letter)\n",
247 " for location in locations:\n",
248 " discovered[location] = guessed_letter\n",
249 " return discovered"
250 ],
251 "language": "python",
252 "metadata": {},
253 "outputs": [],
254 "prompt_number": 18
255 },
256 {
257 "cell_type": "code",
258 "collapsed": false,
259 "input": [
260 "def initialise():\n",
261 " global lives, target, discovered, wrong_letters\n",
262 " lives = STARTING_LIVES\n",
263 " target = random.choice(WORDS)\n",
264 " discovered = list('_' * len(target))\n",
265 " wrong_letters = []"
266 ],
267 "language": "python",
268 "metadata": {},
269 "outputs": [],
270 "prompt_number": 19
271 },
272 {
273 "cell_type": "code",
274 "collapsed": false,
275 "input": [
276 "def do_turn():\n",
277 " global discovered, lives, wrong_letters\n",
278 " print('Word:', ' '.join(discovered), ' : Lives =', lives, ', wrong guesses:', ' '.join(sorted(wrong_letters)))\n",
279 " guess = input('Enter letter: ').strip().lower()[0]\n",
280 " if guess in target:\n",
281 " updated_discovered_word(discovered, guess)\n",
282 " else:\n",
283 " lives -= 1\n",
284 " if guess not in wrong_letters:\n",
285 " wrong_letters += [guess]"
286 ],
287 "language": "python",
288 "metadata": {},
289 "outputs": [],
290 "prompt_number": 27
291 },
292 {
293 "cell_type": "code",
294 "collapsed": false,
295 "input": [
296 "def play_game():\n",
297 " global discovered, lives\n",
298 " initialise()\n",
299 " game_finished = False\n",
300 " do_turn()\n",
301 " while not game_finished:\n",
302 " if '_' not in discovered:\n",
303 " print('You won! The word was', target)\n",
304 " game_finished = True\n",
305 " elif lives <= 0:\n",
306 " print('You lost. The word was', target)\n",
307 " game_finished = True\n",
308 " else:\n",
309 " do_turn()"
310 ],
311 "language": "python",
312 "metadata": {},
313 "outputs": [],
314 "prompt_number": 25
315 },
316 {
317 "cell_type": "code",
318 "collapsed": false,
319 "input": [
320 "play_game()"
321 ],
322 "language": "python",
323 "metadata": {},
324 "outputs": [
325 {
326 "output_type": "stream",
327 "stream": "stdout",
328 "text": [
329 "Word: _ _ _ _ _ _ _ _ _ _ _ _ _ _ : Lives = 10 , wrong guesses: \n"
330 ]
331 },
332 {
333 "name": "stdout",
334 "output_type": "stream",
335 "stream": "stdout",
336 "text": [
337 "Enter letter: e\n"
338 ]
339 },
340 {
341 "output_type": "stream",
342 "stream": "stdout",
343 "text": [
344 "Word: _ e _ _ _ _ _ _ _ _ _ _ _ _ : Lives = 10 , wrong guesses: \n"
345 ]
346 },
347 {
348 "name": "stdout",
349 "output_type": "stream",
350 "stream": "stdout",
351 "text": [
352 "Enter letter: a\n"
353 ]
354 },
355 {
356 "output_type": "stream",
357 "stream": "stdout",
358 "text": [
359 "Word: _ e _ _ a _ _ _ _ _ _ _ _ _ : Lives = 10 , wrong guesses: \n"
360 ]
361 },
362 {
363 "name": "stdout",
364 "output_type": "stream",
365 "stream": "stdout",
366 "text": [
367 "Enter letter: i\n"
368 ]
369 },
370 {
371 "output_type": "stream",
372 "stream": "stdout",
373 "text": [
374 "Word: _ e _ _ a _ _ _ _ _ i _ i _ : Lives = 10 , wrong guesses: \n"
375 ]
376 },
377 {
378 "name": "stdout",
379 "output_type": "stream",
380 "stream": "stdout",
381 "text": [
382 "Enter letter: o\n"
383 ]
384 },
385 {
386 "output_type": "stream",
387 "stream": "stdout",
388 "text": [
389 "Word: _ e _ _ a _ _ _ o _ i _ i _ : Lives = 10 , wrong guesses: \n"
390 ]
391 },
392 {
393 "name": "stdout",
394 "output_type": "stream",
395 "stream": "stdout",
396 "text": [
397 "Enter letter: t\n"
398 ]
399 },
400 {
401 "output_type": "stream",
402 "stream": "stdout",
403 "text": [
404 "Word: _ e _ _ a _ _ _ o _ i t i _ : Lives = 10 , wrong guesses: \n"
405 ]
406 },
407 {
408 "name": "stdout",
409 "output_type": "stream",
410 "stream": "stdout",
411 "text": [
412 "Enter letter: r\n"
413 ]
414 },
415 {
416 "output_type": "stream",
417 "stream": "stdout",
418 "text": [
419 "Word: _ e r _ a _ _ r o _ i t i _ : Lives = 10 , wrong guesses: \n"
420 ]
421 },
422 {
423 "name": "stdout",
424 "output_type": "stream",
425 "stream": "stdout",
426 "text": [
427 "Enter letter: n\n"
428 ]
429 },
430 {
431 "output_type": "stream",
432 "stream": "stdout",
433 "text": [
434 "Word: _ e r _ a _ _ r o _ i t i _ : Lives = 9 , wrong guesses: n\n"
435 ]
436 },
437 {
438 "name": "stdout",
439 "output_type": "stream",
440 "stream": "stdout",
441 "text": [
442 "Enter letter: s\n"
443 ]
444 },
445 {
446 "output_type": "stream",
447 "stream": "stdout",
448 "text": [
449 "Word: _ e r _ a _ _ r o _ i t i _ : Lives = 8 , wrong guesses: n s\n"
450 ]
451 },
452 {
453 "name": "stdout",
454 "output_type": "stream",
455 "stream": "stdout",
456 "text": [
457 "Enter letter: h\n"
458 ]
459 },
460 {
461 "output_type": "stream",
462 "stream": "stdout",
463 "text": [
464 "Word: h e r _ a _ h r o _ i t i _ : Lives = 8 , wrong guesses: n s\n"
465 ]
466 },
467 {
468 "name": "stdout",
469 "output_type": "stream",
470 "stream": "stdout",
471 "text": [
472 "Enter letter: c\n"
473 ]
474 },
475 {
476 "output_type": "stream",
477 "stream": "stdout",
478 "text": [
479 "Word: h e r _ a _ h r o _ i t i c : Lives = 8 , wrong guesses: n s\n"
480 ]
481 },
482 {
483 "name": "stdout",
484 "output_type": "stream",
485 "stream": "stdout",
486 "text": [
487 "Enter letter: c\n"
488 ]
489 },
490 {
491 "output_type": "stream",
492 "stream": "stdout",
493 "text": [
494 "Word: h e r _ a _ h r o _ i t i c : Lives = 8 , wrong guesses: n s\n"
495 ]
496 },
497 {
498 "name": "stdout",
499 "output_type": "stream",
500 "stream": "stdout",
501 "text": [
502 "Enter letter: m\n"
503 ]
504 },
505 {
506 "output_type": "stream",
507 "stream": "stdout",
508 "text": [
509 "Word: h e r m a _ h r o _ i t i c : Lives = 8 , wrong guesses: n s\n"
510 ]
511 },
512 {
513 "name": "stdout",
514 "output_type": "stream",
515 "stream": "stdout",
516 "text": [
517 "Enter letter: p\n"
518 ]
519 },
520 {
521 "output_type": "stream",
522 "stream": "stdout",
523 "text": [
524 "Word: h e r m a p h r o _ i t i c : Lives = 8 , wrong guesses: n s\n"
525 ]
526 },
527 {
528 "name": "stdout",
529 "output_type": "stream",
530 "stream": "stdout",
531 "text": [
532 "Enter letter: d\n"
533 ]
534 },
535 {
536 "output_type": "stream",
537 "stream": "stdout",
538 "text": [
539 "You won! The word was hermaphroditic\n"
540 ]
541 }
542 ],
543 "prompt_number": 30
544 },
545 {
546 "cell_type": "code",
547 "collapsed": false,
548 "input": [
549 "class Game:\n",
550 " def __init__(self, target, lives=STARTING_LIVES):\n",
551 " self.lives = lives\n",
552 " self.target = target\n",
553 " self.discovered = list('_' * len(target))\n",
554 " self.wrong_letters = []\n",
555 " self.game_finished = False\n",
556 " self.game_won = False\n",
557 " self.game_lost = False\n",
558 " \n",
559 " def find_all(self, letter):\n",
560 " locations = []\n",
561 " starting=0\n",
562 " location = self.target.find(letter)\n",
563 " while location > -1:\n",
564 " locations += [location]\n",
565 " starting = location + 1\n",
566 " location = self.target.find(letter, starting)\n",
567 " return locations\n",
568 " \n",
569 " def updated_discovered_word(self, guessed_letter):\n",
570 " locations = find_all(guessed_letter)\n",
571 " for location in locations:\n",
572 " self.discovered[location] = guessed_letter\n",
573 " return self.discovered\n",
574 " \n",
575 " def do_turn(self):\n",
576 " print('Word:', ' '.join(self.discovered), \n",
577 " ' : Lives =', self.lives, \n",
578 " ', wrong guesses:', ' '.join(sorted(self.wrong_letters)))\n",
579 " guess = input('Enter letter: ').strip().lower()[0]\n",
580 " if guess in self.target:\n",
581 " updated_discovered_word(self, guess)\n",
582 " else:\n",
583 " self.lives -= 1\n",
584 " if guess not in self.wrong_letters:\n",
585 " self.wrong_letters += [guess]\n",
586 " if self.lives == 0:\n",
587 " self.game_finished = True\n",
588 " self.game_lost = True\n",
589 " if '_' not in self.discovered:\n",
590 " self.game_finished = True\n",
591 " self.game_won = True\n",
592 " \n",
593 " def play_game(self):\n",
594 " do_turn()\n",
595 " while not self.game_finished:\n",
596 " if self.game_won:\n",
597 " print('You won! The word was', self.target)\n",
598 " elif self.game_lost:\n",
599 " print('You lost. The word was', self.target)\n",
600 " else:\n",
601 " do_turn()\n",
602 " return self.game_won"
603 ],
604 "language": "python",
605 "metadata": {},
606 "outputs": [],
607 "prompt_number": 47
608 },
609 {
610 "cell_type": "code",
611 "collapsed": false,
612 "input": [
613 "g = Game(random.choice(WORDS))"
614 ],
615 "language": "python",
616 "metadata": {},
617 "outputs": [],
618 "prompt_number": 48
619 },
620 {
621 "cell_type": "code",
622 "collapsed": false,
623 "input": [
624 "g.target"
625 ],
626 "language": "python",
627 "metadata": {},
628 "outputs": [
629 {
630 "metadata": {},
631 "output_type": "pyout",
632 "prompt_number": 49,
633 "text": [
634 "'paintbrush'"
635 ]
636 }
637 ],
638 "prompt_number": 49
639 },
640 {
641 "cell_type": "code",
642 "collapsed": false,
643 "input": [
644 "g.discovered"
645 ],
646 "language": "python",
647 "metadata": {},
648 "outputs": [
649 {
650 "metadata": {},
651 "output_type": "pyout",
652 "prompt_number": 50,
653 "text": [
654 "['_', '_', '_', '_', '_', '_', '_', '_', '_', '_']"
655 ]
656 }
657 ],
658 "prompt_number": 50
659 },
660 {
661 "cell_type": "code",
662 "collapsed": false,
663 "input": [
664 "g.do_turn()"
665 ],
666 "language": "python",
667 "metadata": {},
668 "outputs": [
669 {
670 "output_type": "stream",
671 "stream": "stdout",
672 "text": [
673 "Word: _ _ _ _ _ _ _ _ _ _ : Lives = 10 , wrong guesses: \n"
674 ]
675 },
676 {
677 "name": "stdout",
678 "output_type": "stream",
679 "stream": "stdout",
680 "text": [
681 "Enter letter: x\n"
682 ]
683 }
684 ],
685 "prompt_number": 51
686 },
687 {
688 "cell_type": "code",
689 "collapsed": false,
690 "input": [
691 "g.lives"
692 ],
693 "language": "python",
694 "metadata": {},
695 "outputs": [
696 {
697 "metadata": {},
698 "output_type": "pyout",
699 "prompt_number": 52,
700 "text": [
701 "9"
702 ]
703 }
704 ],
705 "prompt_number": 52
706 },
707 {
708 "cell_type": "code",
709 "collapsed": false,
710 "input": [
711 "g.wrong_letters"
712 ],
713 "language": "python",
714 "metadata": {},
715 "outputs": [
716 {
717 "metadata": {},
718 "output_type": "pyout",
719 "prompt_number": 53,
720 "text": [
721 "['x']"
722 ]
723 }
724 ],
725 "prompt_number": 53
726 },
727 {
728 "cell_type": "code",
729 "collapsed": false,
730 "input": [
731 "g.do_turn()"
732 ],
733 "language": "python",
734 "metadata": {},
735 "outputs": [
736 {
737 "output_type": "stream",
738 "stream": "stdout",
739 "text": [
740 "Word: _ _ _ _ _ _ _ _ _ _ : Lives = 9 , wrong guesses: x\n"
741 ]
742 },
743 {
744 "name": "stdout",
745 "output_type": "stream",
746 "stream": "stdout",
747 "text": [
748 "Enter letter: t\n"
749 ]
750 },
751 {
752 "ename": "TypeError",
753 "evalue": "'Game' object does not support item assignment",
754 "output_type": "pyerr",
755 "traceback": [
756 "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
757 "\u001b[1;32m<ipython-input-54-1beb96467341>\u001b[0m in \u001b[0;36m<module>\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",
758 "\u001b[1;32m<ipython-input-47-8f8ddb756c32>\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",
759 "\u001b[1;32m<ipython-input-18-572b4e76dcf5>\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",
760 "\u001b[1;31mTypeError\u001b[0m: 'Game' object does not support item assignment"
761 ]
762 }
763 ],
764 "prompt_number": 54
765 },
766 {
767 "cell_type": "code",
768 "collapsed": false,
769 "input": [],
770 "language": "python",
771 "metadata": {},
772 "outputs": []
773 }
774 ],
775 "metadata": {}
776 }
777 ]
778 }