2014年9月25日木曜日

開発環境

Head First C ―頭とからだで覚えるCの基本(David Griffiths (著)、Dawn Griffiths (著) 中田 秀基(監訳)(翻訳)、木下 哲也 (翻訳)、オライリージャパン)の10章(プロセス間通信: お話は楽しい)、長いエクササイズ(p.460)をpythonで考えてみる。

長いエクササイズ(p.460)

コード(BBEdit, Emacs)

sample460.py

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

import sys
import os
import signal
import random

score = 0

def endGame(sig, stack_frame):
    print('\n最終得点:{0}'.format(score))
    sys.exit(0)

def timesUp(sig, stack_frame):
    print('\n時間切れ')
    os.kill(os.getpid(), signal.SIGINT)

signal.signal(signal.SIGALRM, timesUp)
signal.signal(signal.SIGINT, endGame)

while True:
    a = random.randrange(11)
    b = random.randrange(11)

    signal.alarm(5)
    print('\n{0}かける{1}はいくつですか?'.format(a, b), end='')
    txt = input()
    try:
        if int(txt) == a * b:
            score += 1
        else:
            print('\n間違いです!得点:{0}'.format(score))
    except Exception as err:
        print(type(err), err)

入出力結果(Terminal, IPython)

$ ./sample460.py

7かける3はいくつですか?21

10かける5はいくつですか?50

0かける8はいくつですか?
時間切れ

最終得点:2
$ ./sample460.py

0かける3はいくつですか?0

7かける4はいくつですか?
時間切れ

最終得点:1
$ ./sample460.py

4かける3はいくつですか?
時間切れ

最終得点:0
$ ./sample460.py

0かける5はいくつですか?100

間違いです!得点:0

4かける8はいくつですか?ab
<class 'ValueError'> invalid literal for int() with base 10: 'ab'

8かける8はいくつですか?
時間切れ

最終得点:0
$ echo $?
0
$

0 コメント:

コメントを投稿