75bf88c312d32b69650e5da8a085090ad75e234a
[cas-master-teacher-training.git] / hangman-setter.ipynb
1 {
2 "metadata": {
3 "name": "",
4 "signature": "sha256:a121884b619c7fb25f8da469639386d4238f812c2ed89dc610bede92be57ea00"
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 "language": "python",
550 "metadata": {},
551 "outputs": []
552 }
553 ],
554 "metadata": {}
555 }
556 ]
557 }