Changing machine
[cas-master-teacher-training.git] / hangman / 03-hangman-both.ipynb
1 {
2 "metadata": {
3 "name": "",
4 "signature": "sha256:5e9f030b42097ebbcce2654cdb1d9370fde38b61bdbfa85a0cc700e76d5a8a71"
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\n",
17 "import string\n",
18 "import collections"
19 ],
20 "language": "python",
21 "metadata": {},
22 "outputs": [],
23 "prompt_number": 71
24 },
25 {
26 "cell_type": "code",
27 "collapsed": false,
28 "input": [
29 "WORDS = [w.strip() for w in open('/usr/share/dict/british-english').readlines() \n",
30 " if re.match(r'^[a-z]*$', w.strip())]"
31 ],
32 "language": "python",
33 "metadata": {},
34 "outputs": [],
35 "prompt_number": 72
36 },
37 {
38 "cell_type": "code",
39 "collapsed": false,
40 "input": [
41 "STARTING_LIVES = 10"
42 ],
43 "language": "python",
44 "metadata": {},
45 "outputs": [],
46 "prompt_number": 73
47 },
48 {
49 "cell_type": "code",
50 "collapsed": false,
51 "input": [
52 "class Game:\n",
53 " def __init__(self, target, player=None, lives=STARTING_LIVES):\n",
54 " self.lives = lives\n",
55 " self.player = player\n",
56 " self.target = target\n",
57 " self.discovered = list('_' * len(target))\n",
58 " self.wrong_letters = []\n",
59 " self.game_finished = False\n",
60 " self.game_won = False\n",
61 " self.game_lost = False\n",
62 " \n",
63 " def find_all(self, letter):\n",
64 " return [p for p, l in enumerate(self.target) if l == letter]\n",
65 " \n",
66 " def update_discovered_word(self, guessed_letter):\n",
67 " locations = self.find_all(guessed_letter)\n",
68 " for location in locations:\n",
69 " self.discovered[location] = guessed_letter\n",
70 " return self.discovered\n",
71 " \n",
72 " def do_turn(self):\n",
73 " if self.player:\n",
74 " guess = self.player.guess(self.discovered, self.wrong_letters, self.lives)\n",
75 " else:\n",
76 " guess = self.ask_for_guess()\n",
77 " if guess in self.target:\n",
78 " self.update_discovered_word(guess)\n",
79 " else:\n",
80 " self.lives -= 1\n",
81 " if guess not in self.wrong_letters:\n",
82 " self.wrong_letters += [guess]\n",
83 " if self.lives == 0:\n",
84 " self.game_finished = True\n",
85 " self.game_lost = True\n",
86 " if '_' not in self.discovered:\n",
87 " self.game_finished = True\n",
88 " self.game_won = True\n",
89 " \n",
90 " def ask_for_guess(self):\n",
91 " print('Word:', ' '.join(self.discovered), \n",
92 " ' : Lives =', self.lives, \n",
93 " ', wrong guesses:', ' '.join(sorted(self.wrong_letters)))\n",
94 " guess = input('Enter letter: ').strip().lower()[0]\n",
95 " return guess\n",
96 " \n",
97 " def play_game(self):\n",
98 " self.do_turn()\n",
99 " while not self.game_finished:\n",
100 " self.do_turn()\n",
101 " if not self.player:\n",
102 " self.report_on_game()\n",
103 " return self.game_won\n",
104 " \n",
105 " def report_on_game(self):\n",
106 " if self.game_won:\n",
107 " print('You won! The word was', self.target)\n",
108 " else:\n",
109 " print('You lost. The word was', self.target)\n",
110 " return self.game_won"
111 ],
112 "language": "python",
113 "metadata": {},
114 "outputs": [],
115 "prompt_number": 74
116 },
117 {
118 "cell_type": "code",
119 "collapsed": false,
120 "input": [
121 "g = Game(random.choice(WORDS))"
122 ],
123 "language": "python",
124 "metadata": {},
125 "outputs": [],
126 "prompt_number": 75
127 },
128 {
129 "cell_type": "code",
130 "collapsed": false,
131 "input": [
132 "g.target"
133 ],
134 "language": "python",
135 "metadata": {},
136 "outputs": [
137 {
138 "metadata": {},
139 "output_type": "pyout",
140 "prompt_number": 76,
141 "text": [
142 "'strife'"
143 ]
144 }
145 ],
146 "prompt_number": 76
147 },
148 {
149 "cell_type": "code",
150 "collapsed": false,
151 "input": [
152 "g.discovered"
153 ],
154 "language": "python",
155 "metadata": {},
156 "outputs": [
157 {
158 "metadata": {},
159 "output_type": "pyout",
160 "prompt_number": 77,
161 "text": [
162 "['_', '_', '_', '_', '_', '_']"
163 ]
164 }
165 ],
166 "prompt_number": 77
167 },
168 {
169 "cell_type": "code",
170 "collapsed": false,
171 "input": [
172 "g.do_turn()"
173 ],
174 "language": "python",
175 "metadata": {},
176 "outputs": [
177 {
178 "output_type": "stream",
179 "stream": "stdout",
180 "text": [
181 "Word: _ _ _ _ _ _ : Lives = 10 , wrong guesses: \n"
182 ]
183 },
184 {
185 "name": "stdout",
186 "output_type": "stream",
187 "stream": "stdout",
188 "text": [
189 "Enter letter: e\n"
190 ]
191 }
192 ],
193 "prompt_number": 78
194 },
195 {
196 "cell_type": "code",
197 "collapsed": false,
198 "input": [
199 "g.lives"
200 ],
201 "language": "python",
202 "metadata": {},
203 "outputs": [
204 {
205 "metadata": {},
206 "output_type": "pyout",
207 "prompt_number": 79,
208 "text": [
209 "10"
210 ]
211 }
212 ],
213 "prompt_number": 79
214 },
215 {
216 "cell_type": "code",
217 "collapsed": false,
218 "input": [
219 "g.wrong_letters"
220 ],
221 "language": "python",
222 "metadata": {},
223 "outputs": [
224 {
225 "metadata": {},
226 "output_type": "pyout",
227 "prompt_number": 80,
228 "text": [
229 "[]"
230 ]
231 }
232 ],
233 "prompt_number": 80
234 },
235 {
236 "cell_type": "code",
237 "collapsed": false,
238 "input": [
239 "g.do_turn()"
240 ],
241 "language": "python",
242 "metadata": {},
243 "outputs": [
244 {
245 "output_type": "stream",
246 "stream": "stdout",
247 "text": [
248 "Word: _ _ _ _ _ e : Lives = 10 , wrong guesses: \n"
249 ]
250 },
251 {
252 "name": "stdout",
253 "output_type": "stream",
254 "stream": "stdout",
255 "text": [
256 "Enter letter: d\n"
257 ]
258 }
259 ],
260 "prompt_number": 81
261 },
262 {
263 "cell_type": "code",
264 "collapsed": false,
265 "input": [
266 "g.lives"
267 ],
268 "language": "python",
269 "metadata": {},
270 "outputs": [
271 {
272 "metadata": {},
273 "output_type": "pyout",
274 "prompt_number": 82,
275 "text": [
276 "9"
277 ]
278 }
279 ],
280 "prompt_number": 82
281 },
282 {
283 "cell_type": "code",
284 "collapsed": false,
285 "input": [
286 "g.discovered"
287 ],
288 "language": "python",
289 "metadata": {},
290 "outputs": [
291 {
292 "metadata": {},
293 "output_type": "pyout",
294 "prompt_number": 83,
295 "text": [
296 "['_', '_', '_', '_', '_', 'e']"
297 ]
298 }
299 ],
300 "prompt_number": 83
301 },
302 {
303 "cell_type": "code",
304 "collapsed": false,
305 "input": [
306 "g.wrong_letters"
307 ],
308 "language": "python",
309 "metadata": {},
310 "outputs": [
311 {
312 "metadata": {},
313 "output_type": "pyout",
314 "prompt_number": 84,
315 "text": [
316 "['d']"
317 ]
318 }
319 ],
320 "prompt_number": 84
321 },
322 {
323 "cell_type": "code",
324 "collapsed": false,
325 "input": [
326 "g = Game(random.choice(WORDS))\n",
327 "g.play_game()"
328 ],
329 "language": "python",
330 "metadata": {},
331 "outputs": [
332 {
333 "output_type": "stream",
334 "stream": "stdout",
335 "text": [
336 "Word: _ _ _ _ _ _ _ : Lives = 10 , wrong guesses: \n"
337 ]
338 },
339 {
340 "name": "stdout",
341 "output_type": "stream",
342 "stream": "stdout",
343 "text": [
344 "Enter letter: d\n"
345 ]
346 },
347 {
348 "output_type": "stream",
349 "stream": "stdout",
350 "text": [
351 "Word: _ _ _ _ _ _ d : Lives = 10 , wrong guesses: \n"
352 ]
353 },
354 {
355 "name": "stdout",
356 "output_type": "stream",
357 "stream": "stdout",
358 "text": [
359 "Enter letter: e\n"
360 ]
361 },
362 {
363 "output_type": "stream",
364 "stream": "stdout",
365 "text": [
366 "Word: _ e _ _ _ e d : Lives = 10 , wrong guesses: \n"
367 ]
368 },
369 {
370 "name": "stdout",
371 "output_type": "stream",
372 "stream": "stdout",
373 "text": [
374 "Enter letter: f\n"
375 ]
376 },
377 {
378 "output_type": "stream",
379 "stream": "stdout",
380 "text": [
381 "Word: _ e _ _ _ e d : Lives = 9 , wrong guesses: f\n"
382 ]
383 },
384 {
385 "name": "stdout",
386 "output_type": "stream",
387 "stream": "stdout",
388 "text": [
389 "Enter letter: e\n"
390 ]
391 },
392 {
393 "output_type": "stream",
394 "stream": "stdout",
395 "text": [
396 "Word: _ e _ _ _ e d : Lives = 9 , wrong guesses: f\n"
397 ]
398 },
399 {
400 "name": "stdout",
401 "output_type": "stream",
402 "stream": "stdout",
403 "text": [
404 "Enter letter: s\n"
405 ]
406 },
407 {
408 "output_type": "stream",
409 "stream": "stdout",
410 "text": [
411 "Word: _ e _ _ _ e d : Lives = 8 , wrong guesses: f s\n"
412 ]
413 },
414 {
415 "name": "stdout",
416 "output_type": "stream",
417 "stream": "stdout",
418 "text": [
419 "Enter letter: t\n"
420 ]
421 },
422 {
423 "output_type": "stream",
424 "stream": "stdout",
425 "text": [
426 "Word: _ e _ _ _ e d : Lives = 7 , wrong guesses: f s t\n"
427 ]
428 },
429 {
430 "name": "stdout",
431 "output_type": "stream",
432 "stream": "stdout",
433 "text": [
434 "Enter letter: n\n"
435 ]
436 },
437 {
438 "output_type": "stream",
439 "stream": "stdout",
440 "text": [
441 "Word: _ e _ _ _ e d : Lives = 6 , wrong guesses: f n s t\n"
442 ]
443 },
444 {
445 "name": "stdout",
446 "output_type": "stream",
447 "stream": "stdout",
448 "text": [
449 "Enter letter: m\n"
450 ]
451 },
452 {
453 "output_type": "stream",
454 "stream": "stdout",
455 "text": [
456 "Word: _ e _ _ _ e d : Lives = 5 , wrong guesses: f m n s t\n"
457 ]
458 },
459 {
460 "name": "stdout",
461 "output_type": "stream",
462 "stream": "stdout",
463 "text": [
464 "Enter letter: h\n"
465 ]
466 },
467 {
468 "output_type": "stream",
469 "stream": "stdout",
470 "text": [
471 "Word: _ e _ _ _ e d : Lives = 4 , wrong guesses: f h m n s t\n"
472 ]
473 },
474 {
475 "name": "stdout",
476 "output_type": "stream",
477 "stream": "stdout",
478 "text": [
479 "Enter letter: o\n"
480 ]
481 },
482 {
483 "output_type": "stream",
484 "stream": "stdout",
485 "text": [
486 "Word: _ e _ _ _ e d : Lives = 3 , wrong guesses: f h m n o s t\n"
487 ]
488 },
489 {
490 "name": "stdout",
491 "output_type": "stream",
492 "stream": "stdout",
493 "text": [
494 "Enter letter: i\n"
495 ]
496 },
497 {
498 "output_type": "stream",
499 "stream": "stdout",
500 "text": [
501 "Word: _ e _ i _ e d : Lives = 3 , wrong guesses: f h m n o s t\n"
502 ]
503 },
504 {
505 "name": "stdout",
506 "output_type": "stream",
507 "stream": "stdout",
508 "text": [
509 "Enter letter: r\n"
510 ]
511 },
512 {
513 "output_type": "stream",
514 "stream": "stdout",
515 "text": [
516 "Word: r e _ i r e d : Lives = 3 , wrong guesses: f h m n o s t\n"
517 ]
518 },
519 {
520 "name": "stdout",
521 "output_type": "stream",
522 "stream": "stdout",
523 "text": [
524 "Enter letter: w\n"
525 ]
526 },
527 {
528 "output_type": "stream",
529 "stream": "stdout",
530 "text": [
531 "You won! The word was rewired\n"
532 ]
533 },
534 {
535 "metadata": {},
536 "output_type": "pyout",
537 "prompt_number": 85,
538 "text": [
539 "True"
540 ]
541 }
542 ],
543 "prompt_number": 85
544 },
545 {
546 "cell_type": "code",
547 "collapsed": false,
548 "input": [
549 "g = Game(random.choice(WORDS))\n",
550 "g.play_game()"
551 ],
552 "language": "python",
553 "metadata": {},
554 "outputs": [
555 {
556 "output_type": "stream",
557 "stream": "stdout",
558 "text": [
559 "Word: _ _ _ _ _ : Lives = 10 , wrong guesses: \n"
560 ]
561 },
562 {
563 "name": "stdout",
564 "output_type": "stream",
565 "stream": "stdout",
566 "text": [
567 "Enter letter: e\n"
568 ]
569 },
570 {
571 "output_type": "stream",
572 "stream": "stdout",
573 "text": [
574 "Word: _ _ _ _ _ : Lives = 9 , wrong guesses: e\n"
575 ]
576 },
577 {
578 "name": "stdout",
579 "output_type": "stream",
580 "stream": "stdout",
581 "text": [
582 "Enter letter: s\n"
583 ]
584 },
585 {
586 "output_type": "stream",
587 "stream": "stdout",
588 "text": [
589 "Word: _ _ _ _ s : Lives = 9 , wrong guesses: e\n"
590 ]
591 },
592 {
593 "name": "stdout",
594 "output_type": "stream",
595 "stream": "stdout",
596 "text": [
597 "Enter letter: t\n"
598 ]
599 },
600 {
601 "output_type": "stream",
602 "stream": "stdout",
603 "text": [
604 "Word: _ _ _ _ s : Lives = 8 , wrong guesses: e t\n"
605 ]
606 },
607 {
608 "name": "stdout",
609 "output_type": "stream",
610 "stream": "stdout",
611 "text": [
612 "Enter letter: o\n"
613 ]
614 },
615 {
616 "output_type": "stream",
617 "stream": "stdout",
618 "text": [
619 "Word: _ _ _ _ s : Lives = 7 , wrong guesses: e o t\n"
620 ]
621 },
622 {
623 "name": "stdout",
624 "output_type": "stream",
625 "stream": "stdout",
626 "text": [
627 "Enter letter: i\n"
628 ]
629 },
630 {
631 "output_type": "stream",
632 "stream": "stdout",
633 "text": [
634 "Word: _ _ _ _ s : Lives = 6 , wrong guesses: e i o t\n"
635 ]
636 },
637 {
638 "name": "stdout",
639 "output_type": "stream",
640 "stream": "stdout",
641 "text": [
642 "Enter letter: u\n"
643 ]
644 },
645 {
646 "output_type": "stream",
647 "stream": "stdout",
648 "text": [
649 "Word: _ _ _ _ s : Lives = 5 , wrong guesses: e i o t u\n"
650 ]
651 },
652 {
653 "name": "stdout",
654 "output_type": "stream",
655 "stream": "stdout",
656 "text": [
657 "Enter letter: a\n"
658 ]
659 },
660 {
661 "output_type": "stream",
662 "stream": "stdout",
663 "text": [
664 "Word: _ _ _ _ s : Lives = 4 , wrong guesses: a e i o t u\n"
665 ]
666 },
667 {
668 "name": "stdout",
669 "output_type": "stream",
670 "stream": "stdout",
671 "text": [
672 "Enter letter: y\n"
673 ]
674 },
675 {
676 "output_type": "stream",
677 "stream": "stdout",
678 "text": [
679 "Word: _ y _ _ s : Lives = 4 , wrong guesses: a e i o t u\n"
680 ]
681 },
682 {
683 "name": "stdout",
684 "output_type": "stream",
685 "stream": "stdout",
686 "text": [
687 "Enter letter: w\n"
688 ]
689 },
690 {
691 "output_type": "stream",
692 "stream": "stdout",
693 "text": [
694 "Word: _ y _ _ s : Lives = 3 , wrong guesses: a e i o t u w\n"
695 ]
696 },
697 {
698 "name": "stdout",
699 "output_type": "stream",
700 "stream": "stdout",
701 "text": [
702 "Enter letter: h\n"
703 ]
704 },
705 {
706 "output_type": "stream",
707 "stream": "stdout",
708 "text": [
709 "Word: h y _ _ s : Lives = 3 , wrong guesses: a e i o t u w\n"
710 ]
711 },
712 {
713 "name": "stdout",
714 "output_type": "stream",
715 "stream": "stdout",
716 "text": [
717 "Enter letter: m\n"
718 ]
719 },
720 {
721 "output_type": "stream",
722 "stream": "stdout",
723 "text": [
724 "Word: h y m _ s : Lives = 3 , wrong guesses: a e i o t u w\n"
725 ]
726 },
727 {
728 "name": "stdout",
729 "output_type": "stream",
730 "stream": "stdout",
731 "text": [
732 "Enter letter: n\n"
733 ]
734 },
735 {
736 "output_type": "stream",
737 "stream": "stdout",
738 "text": [
739 "You won! The word was hymns\n"
740 ]
741 },
742 {
743 "metadata": {},
744 "output_type": "pyout",
745 "prompt_number": 86,
746 "text": [
747 "True"
748 ]
749 }
750 ],
751 "prompt_number": 86
752 },
753 {
754 "cell_type": "code",
755 "collapsed": false,
756 "input": [
757 "g.target"
758 ],
759 "language": "python",
760 "metadata": {},
761 "outputs": [
762 {
763 "metadata": {},
764 "output_type": "pyout",
765 "prompt_number": 108,
766 "text": [
767 "'six'"
768 ]
769 }
770 ],
771 "prompt_number": 108
772 },
773 {
774 "cell_type": "code",
775 "collapsed": false,
776 "input": [
777 "class PlayerAlphabetical:\n",
778 " def guess(self, discovered, missed, lives):\n",
779 " guessed_letters = [l.lower() for l in discovered + missed if l in string.ascii_letters]\n",
780 " return [l for l in string.ascii_lowercase if l not in guessed_letters][0]"
781 ],
782 "language": "python",
783 "metadata": {},
784 "outputs": [],
785 "prompt_number": 109
786 },
787 {
788 "cell_type": "code",
789 "collapsed": false,
790 "input": [
791 "g = Game(random.choice(WORDS), player=PlayerAlphabetical())"
792 ],
793 "language": "python",
794 "metadata": {},
795 "outputs": [],
796 "prompt_number": 110
797 },
798 {
799 "cell_type": "code",
800 "collapsed": false,
801 "input": [
802 "g.play_game()"
803 ],
804 "language": "python",
805 "metadata": {},
806 "outputs": [
807 {
808 "metadata": {},
809 "output_type": "pyout",
810 "prompt_number": 111,
811 "text": [
812 "False"
813 ]
814 }
815 ],
816 "prompt_number": 111
817 },
818 {
819 "cell_type": "code",
820 "collapsed": false,
821 "input": [
822 "g.discovered"
823 ],
824 "language": "python",
825 "metadata": {},
826 "outputs": [
827 {
828 "metadata": {},
829 "output_type": "pyout",
830 "prompt_number": 112,
831 "text": [
832 "['l', 'e', 'g', 'a', 'l', 'l', '_']"
833 ]
834 }
835 ],
836 "prompt_number": 112
837 },
838 {
839 "cell_type": "code",
840 "collapsed": false,
841 "input": [
842 "g.target"
843 ],
844 "language": "python",
845 "metadata": {},
846 "outputs": [
847 {
848 "metadata": {},
849 "output_type": "pyout",
850 "prompt_number": 113,
851 "text": [
852 "'legally'"
853 ]
854 }
855 ],
856 "prompt_number": 113
857 },
858 {
859 "cell_type": "code",
860 "collapsed": false,
861 "input": [
862 "g = Game(random.choice(WORDS), player=PlayerAlphabetical())\n",
863 "g.play_game()\n",
864 "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
865 ],
866 "language": "python",
867 "metadata": {},
868 "outputs": [
869 {
870 "output_type": "stream",
871 "stream": "stdout",
872 "text": [
873 "Target: cavalry ; Discovered: ['c', 'a', '_', 'a', 'l', '_', '_'] ; Lives remaining: 0\n"
874 ]
875 }
876 ],
877 "prompt_number": 114
878 },
879 {
880 "cell_type": "code",
881 "collapsed": false,
882 "input": [
883 "LETTER_COUNTS = collections.Counter(l.lower() for l in open('sherlock-holmes.txt').read() if l in string.ascii_letters)\n",
884 "LETTERS_IN_ORDER = [p[0] for p in LETTER_COUNTS.most_common()]\n",
885 "\n",
886 "class PlayerFreqOrdered:\n",
887 " def guess(self, discovered, missed, lives):\n",
888 " guessed_letters = [l.lower() for l in discovered + missed if l in string.ascii_letters]\n",
889 " return [l for l in LETTERS_IN_ORDER if l not in guessed_letters][0]"
890 ],
891 "language": "python",
892 "metadata": {},
893 "outputs": [],
894 "prompt_number": 115
895 },
896 {
897 "cell_type": "code",
898 "collapsed": false,
899 "input": [
900 "g = Game(random.choice(WORDS), player=PlayerFreqOrdered())\n",
901 "g.play_game()\n",
902 "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
903 ],
904 "language": "python",
905 "metadata": {},
906 "outputs": [
907 {
908 "output_type": "stream",
909 "stream": "stdout",
910 "text": [
911 "Target: deathblow ; Discovered: ['d', 'e', 'a', 't', 'h', '_', 'l', 'o', 'w'] ; Lives remaining: 0\n"
912 ]
913 }
914 ],
915 "prompt_number": 116
916 },
917 {
918 "cell_type": "code",
919 "collapsed": false,
920 "input": [
921 "g = Game(random.choice(WORDS), player=PlayerFreqOrdered())\n",
922 "g.play_game()\n",
923 "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
924 ],
925 "language": "python",
926 "metadata": {},
927 "outputs": [
928 {
929 "output_type": "stream",
930 "stream": "stdout",
931 "text": [
932 "Target: littered ; Discovered: ['l', 'i', 't', 't', 'e', 'r', 'e', 'd'] ; Lives remaining: 5\n"
933 ]
934 }
935 ],
936 "prompt_number": 117
937 },
938 {
939 "cell_type": "code",
940 "collapsed": false,
941 "input": [
942 "g = Game(random.choice(WORDS), player=PlayerFreqOrdered())\n",
943 "g.play_game()\n",
944 "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
945 ],
946 "language": "python",
947 "metadata": {},
948 "outputs": [
949 {
950 "output_type": "stream",
951 "stream": "stdout",
952 "text": [
953 "Target: licenced ; Discovered: ['l', 'i', 'c', 'e', 'n', 'c', 'e', 'd'] ; Lives remaining: 1\n"
954 ]
955 }
956 ],
957 "prompt_number": 118
958 },
959 {
960 "cell_type": "code",
961 "collapsed": false,
962 "input": [
963 "class PlayerFixedOrder:\n",
964 " def __init__(self, ordered_letters):\n",
965 " self.ordered_letters = ordered_letters\n",
966 " \n",
967 " def guess(self, discovered, missed, lives):\n",
968 " guessed_letters = [l.lower() for l in discovered + missed if l in string.ascii_letters]\n",
969 " return [l for l in self.ordered_letters if l not in guessed_letters][0]"
970 ],
971 "language": "python",
972 "metadata": {},
973 "outputs": [],
974 "prompt_number": 119
975 },
976 {
977 "cell_type": "code",
978 "collapsed": false,
979 "input": [
980 "class PlayerAlphabetical(PlayerFixedOrder):\n",
981 " def __init__(self):\n",
982 " super().__init__(string.ascii_lowercase)\n",
983 "\n",
984 "class PlayerFreqOrdered(PlayerFixedOrder):\n",
985 " def __init__(self):\n",
986 " super().__init__(LETTERS_IN_ORDER)\n"
987 ],
988 "language": "python",
989 "metadata": {},
990 "outputs": [],
991 "prompt_number": 120
992 },
993 {
994 "cell_type": "code",
995 "collapsed": false,
996 "input": [
997 "g = Game(random.choice(WORDS), player=PlayerFreqOrdered())\n",
998 "g.play_game()\n",
999 "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
1000 ],
1001 "language": "python",
1002 "metadata": {},
1003 "outputs": [
1004 {
1005 "output_type": "stream",
1006 "stream": "stdout",
1007 "text": [
1008 "Target: unworthier ; Discovered: ['u', 'n', 'w', 'o', 'r', 't', 'h', 'i', 'e', 'r'] ; Lives remaining: 5\n"
1009 ]
1010 }
1011 ],
1012 "prompt_number": 121
1013 },
1014 {
1015 "cell_type": "code",
1016 "collapsed": false,
1017 "input": [
1018 "g = Game(random.choice(WORDS), player=PlayerFreqOrdered())\n",
1019 "g.play_game()\n",
1020 "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
1021 ],
1022 "language": "python",
1023 "metadata": {},
1024 "outputs": [
1025 {
1026 "output_type": "stream",
1027 "stream": "stdout",
1028 "text": [
1029 "Target: kneel ; Discovered: ['_', 'n', 'e', 'e', 'l'] ; Lives remaining: 0\n"
1030 ]
1031 }
1032 ],
1033 "prompt_number": 122
1034 },
1035 {
1036 "cell_type": "code",
1037 "collapsed": false,
1038 "input": [
1039 "g = Game(random.choice(WORDS), player=PlayerAlphabetical())\n",
1040 "g.play_game()\n",
1041 "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
1042 ],
1043 "language": "python",
1044 "metadata": {},
1045 "outputs": [
1046 {
1047 "output_type": "stream",
1048 "stream": "stdout",
1049 "text": [
1050 "Target: provisoes ; Discovered: ['_', '_', '_', '_', 'i', '_', '_', 'e', '_'] ; Lives remaining: 0\n"
1051 ]
1052 }
1053 ],
1054 "prompt_number": 123
1055 },
1056 {
1057 "cell_type": "code",
1058 "collapsed": false,
1059 "input": [
1060 "g = Game(random.choice(WORDS), player=PlayerFixedOrder(list(reversed(string.ascii_lowercase))))\n",
1061 "g.play_game()\n",
1062 "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
1063 ],
1064 "language": "python",
1065 "metadata": {},
1066 "outputs": [
1067 {
1068 "output_type": "stream",
1069 "stream": "stdout",
1070 "text": [
1071 "Target: invincible ; Discovered: ['_', '_', 'v', '_', '_', '_', '_', '_', '_', '_'] ; Lives remaining: 0\n"
1072 ]
1073 }
1074 ],
1075 "prompt_number": 124
1076 },
1077 {
1078 "cell_type": "code",
1079 "collapsed": false,
1080 "input": [
1081 "g = Game(random.choice(WORDS), player=PlayerFixedOrder(list(reversed(string.ascii_lowercase))))\n",
1082 "g.play_game()\n",
1083 "print('Target:', g.target, '; Discovered:', g.discovered, '; Lives remaining:', g.lives)"
1084 ],
1085 "language": "python",
1086 "metadata": {},
1087 "outputs": [
1088 {
1089 "output_type": "stream",
1090 "stream": "stdout",
1091 "text": [
1092 "Target: clogging ; Discovered: ['_', '_', '_', '_', '_', '_', '_', '_'] ; Lives remaining: 0\n"
1093 ]
1094 }
1095 ],
1096 "prompt_number": 125
1097 },
1098 {
1099 "cell_type": "code",
1100 "collapsed": false,
1101 "input": [
1102 "wins = 0\n",
1103 "for _ in range(1000):\n",
1104 " g = Game(random.choice(WORDS), player=PlayerAlphabetical())\n",
1105 " g.play_game()\n",
1106 " if g.game_won:\n",
1107 " wins += 1\n",
1108 "print(wins)"
1109 ],
1110 "language": "python",
1111 "metadata": {},
1112 "outputs": [
1113 {
1114 "output_type": "stream",
1115 "stream": "stdout",
1116 "text": [
1117 "44\n"
1118 ]
1119 }
1120 ],
1121 "prompt_number": 126
1122 },
1123 {
1124 "cell_type": "code",
1125 "collapsed": false,
1126 "input": [
1127 "wins = 0\n",
1128 "for _ in range(1000):\n",
1129 " g = Game(random.choice(WORDS), player=PlayerFreqOrdered())\n",
1130 " g.play_game()\n",
1131 " if g.game_won:\n",
1132 " wins += 1\n",
1133 "print(wins)"
1134 ],
1135 "language": "python",
1136 "metadata": {},
1137 "outputs": [
1138 {
1139 "output_type": "stream",
1140 "stream": "stdout",
1141 "text": [
1142 "320\n"
1143 ]
1144 }
1145 ],
1146 "prompt_number": 127
1147 },
1148 {
1149 "cell_type": "code",
1150 "collapsed": false,
1151 "input": [
1152 "wins = 0\n",
1153 "for _ in range(1000):\n",
1154 " g = Game(random.choice(WORDS), player=PlayerFixedOrder(list(reversed(string.ascii_lowercase))))\n",
1155 " g.play_game()\n",
1156 " if g.game_won:\n",
1157 " wins += 1\n",
1158 "print(wins)"
1159 ],
1160 "language": "python",
1161 "metadata": {},
1162 "outputs": [
1163 {
1164 "output_type": "stream",
1165 "stream": "stdout",
1166 "text": [
1167 "7\n"
1168 ]
1169 }
1170 ],
1171 "prompt_number": 128
1172 },
1173 {
1174 "cell_type": "code",
1175 "collapsed": false,
1176 "input": [],
1177 "language": "python",
1178 "metadata": {},
1179 "outputs": [],
1180 "prompt_number": 128
1181 }
1182 ],
1183 "metadata": {}
1184 }
1185 ]
1186 }