Added Hangman setter
[cas-master-teacher-training.git] / hangman-setter.ipynb
1 {
2 "metadata": {
3 "name": "",
4 "signature": "sha256:db806d8bbe929161fce8776d2eeac6bad40d1abb93a97d112b974b6a8d50bdd0"
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": 33
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": 4,
71 "text": [
72 "62856"
73 ]
74 }
75 ],
76 "prompt_number": 4
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": 5,
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": 5
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": 6,
121 "text": [
122 "'bluster'"
123 ]
124 }
125 ],
126 "prompt_number": 6
127 },
128 {
129 "cell_type": "code",
130 "collapsed": false,
131 "input": [
132 "guessed_word = list('_' * len(target))\n",
133 "guessed_word"
134 ],
135 "language": "python",
136 "metadata": {},
137 "outputs": [
138 {
139 "metadata": {},
140 "output_type": "pyout",
141 "prompt_number": 7,
142 "text": [
143 "['_', '_', '_', '_', '_', '_', '_']"
144 ]
145 }
146 ],
147 "prompt_number": 7
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: dsf\n"
165 ]
166 },
167 {
168 "metadata": {},
169 "output_type": "pyout",
170 "prompt_number": 8,
171 "text": [
172 "'d'"
173 ]
174 }
175 ],
176 "prompt_number": 8
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": 9
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": 10,
210 "text": [
211 "[]"
212 ]
213 }
214 ],
215 "prompt_number": 10
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 " guessed_word[location] = guessed_letter\n",
225 "guessed_word"
226 ],
227 "language": "python",
228 "metadata": {},
229 "outputs": [
230 {
231 "metadata": {},
232 "output_type": "pyout",
233 "prompt_number": 11,
234 "text": [
235 "['_', '_', '_', '_', '_', 'e', '_']"
236 ]
237 }
238 ],
239 "prompt_number": 11
240 },
241 {
242 "cell_type": "code",
243 "collapsed": false,
244 "input": [
245 "def updated_guessed_word(guessed_word, guessed_letter):\n",
246 " locations = find_all(target, guessed_letter)\n",
247 " for location in locations:\n",
248 " guessed_word[location] = guessed_letter\n",
249 " return guessed_word"
250 ],
251 "language": "python",
252 "metadata": {},
253 "outputs": [],
254 "prompt_number": 13
255 },
256 {
257 "cell_type": "code",
258 "collapsed": false,
259 "input": [
260 "def initialise():\n",
261 " global lives, target, guessed_word, wrong_letters\n",
262 " lives = STARTING_LIVES\n",
263 " target = random.choice(WORDS)\n",
264 " guessed_word = list('_' * len(target))\n",
265 " wrong_letters = []"
266 ],
267 "language": "python",
268 "metadata": {},
269 "outputs": [],
270 "prompt_number": 30
271 },
272 {
273 "cell_type": "code",
274 "collapsed": false,
275 "input": [
276 "def do_turn():\n",
277 " global guessed_words, lives, wrong_letters\n",
278 " print('Word:', ' '.join(guessed_word), ' : 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_guessed_word(guessed_word, guess)\n",
282 " else:\n",
283 " lives -= 1\n",
284 " wrong_letters += [guess]"
285 ],
286 "language": "python",
287 "metadata": {},
288 "outputs": [],
289 "prompt_number": 41
290 },
291 {
292 "cell_type": "code",
293 "collapsed": false,
294 "input": [
295 "def play_game():\n",
296 " global guessed_word, lives\n",
297 " initialise()\n",
298 " game_finished = False\n",
299 " do_turn()\n",
300 " while not game_finished:\n",
301 " if '_' not in guessed_word:\n",
302 " print('You won!')\n",
303 " game_finished = True\n",
304 " elif lives <= 0:\n",
305 " print('You lost. The word was', target)\n",
306 " game_finished = True\n",
307 " else:\n",
308 " do_turn()"
309 ],
310 "language": "python",
311 "metadata": {},
312 "outputs": [],
313 "prompt_number": 36
314 },
315 {
316 "cell_type": "code",
317 "collapsed": false,
318 "input": [
319 "play_game()"
320 ],
321 "language": "python",
322 "metadata": {},
323 "outputs": [
324 {
325 "output_type": "stream",
326 "stream": "stdout",
327 "text": [
328 "Word: _ _ _ _ _ _ _ _ _ : Lives = 10 , wrong guesses: \n"
329 ]
330 },
331 {
332 "name": "stdout",
333 "output_type": "stream",
334 "stream": "stdout",
335 "text": [
336 "Enter letter: e\n"
337 ]
338 },
339 {
340 "output_type": "stream",
341 "stream": "stdout",
342 "text": [
343 "Word: _ _ _ _ _ e _ _ _ : Lives = 10 , wrong guesses: \n"
344 ]
345 },
346 {
347 "name": "stdout",
348 "output_type": "stream",
349 "stream": "stdout",
350 "text": [
351 "Enter letter: a\n"
352 ]
353 },
354 {
355 "output_type": "stream",
356 "stream": "stdout",
357 "text": [
358 "Word: a _ _ _ _ e _ _ _ : Lives = 10 , wrong guesses: \n"
359 ]
360 },
361 {
362 "name": "stdout",
363 "output_type": "stream",
364 "stream": "stdout",
365 "text": [
366 "Enter letter: t\n"
367 ]
368 },
369 {
370 "output_type": "stream",
371 "stream": "stdout",
372 "text": [
373 "Word: a _ _ _ _ e t _ _ : Lives = 10 , wrong guesses: \n"
374 ]
375 },
376 {
377 "name": "stdout",
378 "output_type": "stream",
379 "stream": "stdout",
380 "text": [
381 "Enter letter: o\n"
382 ]
383 },
384 {
385 "output_type": "stream",
386 "stream": "stdout",
387 "text": [
388 "Word: a _ _ o _ e t _ _ : Lives = 10 , wrong guesses: \n"
389 ]
390 },
391 {
392 "name": "stdout",
393 "output_type": "stream",
394 "stream": "stdout",
395 "text": [
396 "Enter letter: i\n"
397 ]
398 },
399 {
400 "output_type": "stream",
401 "stream": "stdout",
402 "text": [
403 "Word: a _ _ o _ e t _ _ : Lives = 9 , wrong guesses: i\n"
404 ]
405 },
406 {
407 "name": "stdout",
408 "output_type": "stream",
409 "stream": "stdout",
410 "text": [
411 "Enter letter: n\n"
412 ]
413 },
414 {
415 "output_type": "stream",
416 "stream": "stdout",
417 "text": [
418 "Word: a _ _ o _ e t _ _ : Lives = 8 , wrong guesses: i n\n"
419 ]
420 },
421 {
422 "name": "stdout",
423 "output_type": "stream",
424 "stream": "stdout",
425 "text": [
426 "Enter letter: s\n"
427 ]
428 },
429 {
430 "output_type": "stream",
431 "stream": "stdout",
432 "text": [
433 "Word: a _ _ o _ e t _ _ : Lives = 7 , wrong guesses: i n s\n"
434 ]
435 },
436 {
437 "name": "stdout",
438 "output_type": "stream",
439 "stream": "stdout",
440 "text": [
441 "Enter letter: h\n"
442 ]
443 },
444 {
445 "output_type": "stream",
446 "stream": "stdout",
447 "text": [
448 "Word: a _ _ o _ e t _ _ : Lives = 6 , wrong guesses: h i n s\n"
449 ]
450 },
451 {
452 "name": "stdout",
453 "output_type": "stream",
454 "stream": "stdout",
455 "text": [
456 "Enter letter: r\n"
457 ]
458 },
459 {
460 "output_type": "stream",
461 "stream": "stdout",
462 "text": [
463 "Word: a r _ o r e t _ _ : Lives = 6 , wrong guesses: h i n s\n"
464 ]
465 },
466 {
467 "name": "stdout",
468 "output_type": "stream",
469 "stream": "stdout",
470 "text": [
471 "Enter letter: g\n"
472 ]
473 },
474 {
475 "output_type": "stream",
476 "stream": "stdout",
477 "text": [
478 "Word: a r _ o r e t _ _ : Lives = 5 , wrong guesses: g h i n s\n"
479 ]
480 },
481 {
482 "name": "stdout",
483 "output_type": "stream",
484 "stream": "stdout",
485 "text": [
486 "Enter letter: r\n"
487 ]
488 },
489 {
490 "output_type": "stream",
491 "stream": "stdout",
492 "text": [
493 "Word: a r _ o r e t _ _ : Lives = 5 , wrong guesses: g h i n s\n"
494 ]
495 },
496 {
497 "name": "stdout",
498 "output_type": "stream",
499 "stream": "stdout",
500 "text": [
501 "Enter letter: d\n"
502 ]
503 },
504 {
505 "output_type": "stream",
506 "stream": "stdout",
507 "text": [
508 "Word: a r _ o r e t _ _ : Lives = 4 , wrong guesses: d g h i n s\n"
509 ]
510 },
511 {
512 "name": "stdout",
513 "output_type": "stream",
514 "stream": "stdout",
515 "text": [
516 "Enter letter: l\n"
517 ]
518 },
519 {
520 "output_type": "stream",
521 "stream": "stdout",
522 "text": [
523 "Word: a r _ o r e t _ _ : Lives = 3 , wrong guesses: d g h i l n s\n"
524 ]
525 },
526 {
527 "name": "stdout",
528 "output_type": "stream",
529 "stream": "stdout",
530 "text": [
531 "Enter letter: u\n"
532 ]
533 },
534 {
535 "output_type": "stream",
536 "stream": "stdout",
537 "text": [
538 "Word: a r _ o r e t u _ : Lives = 3 , wrong guesses: d g h i l n s\n"
539 ]
540 },
541 {
542 "name": "stdout",
543 "output_type": "stream",
544 "stream": "stdout",
545 "text": [
546 "Enter letter: b\n"
547 ]
548 },
549 {
550 "output_type": "stream",
551 "stream": "stdout",
552 "text": [
553 "Word: a r b o r e t u _ : Lives = 3 , wrong guesses: d g h i l n s\n"
554 ]
555 },
556 {
557 "name": "stdout",
558 "output_type": "stream",
559 "stream": "stdout",
560 "text": [
561 "Enter letter: m\n"
562 ]
563 },
564 {
565 "output_type": "stream",
566 "stream": "stdout",
567 "text": [
568 "You won!\n"
569 ]
570 }
571 ],
572 "prompt_number": 42
573 },
574 {
575 "cell_type": "code",
576 "collapsed": false,
577 "input": [],
578 "language": "python",
579 "metadata": {},
580 "outputs": []
581 }
582 ],
583 "metadata": {}
584 }
585 ]
586 }