数当て

2010年11月19日

Google App Engineで、がんばってrubyを作ってきたが、だんだん心が挫けてきたのと、周囲でよくpythonの話が出てきたので。
rubyをあきらめて、勉強をはじめてみた。

基本構文に慣れるために、簡単な数あてゲームを作った。
コンピュータが乱数で答えを決めて、ユーザに数字を入れさせて、もっと大きくとか、ヒントを出していくもの。
BASICの時代によく作っていたような、単純なものだ。

ルールは以下の通り。
  • 答えの値の範囲は、1から100までの間。(冒頭の変数で最小値と最大値は容易に変更できる)
  • 正解のプラスマイナス5の範囲に入ったら、”もうちょっと”という表現を使い、推理のヒントにする。
  • 正解後、入力履歴を表示する。

コーディングには、以下の点に気をつけた。
  • 正しく日本語を扱う
  • 入力エラーを厳密に判断する
できあがったのは、以下のとおり。
pythonの特徴は、可読性の良さと、誰が書いても同じようなコードになることだという。
どうでしょうか?


#!/usr/bin/python
# -*- coding: utf-8 -*-

import random

min=1
max=100
n=0
c=0
answerList = []

r=random.randint(min,max)

print "Input number[%d-%d]" % (min,max)
while r <> n:
  c += 1
  print "%d:"%c,

  while 1:
    n = raw_input()
    try:
      n = int(n)
    except ValueError:
      print u"ちゃんと数字を入れて"
    except TypeError:
      print u"ちゃんと数字を入れて"
    else:
      if n>=min and n<=max:
        break
      else:
        contine

  answerList.append(n)

  if r == n:
    if c==1:
      print "Hit! You are Esper!"
    elif c > 1:
      print "Hit! answer is %d" % r
    break

  elif r < n and r+5 > n:
    answerList.append("v")
    print(u"もうちょっとだけ小さいよ")

  elif r > n and r-5 < n:
    answerList.append("^")
    print(u"もうちょっとだけ大きいよ")

  elif r > n:
    answerList.append("!")
    print(u"もっと大きいよ")

  elif r < n:
    answerList.append("V")
    print(u"もっと小さいよ") 

print
print u"入力履歴"

for i in answerList:
  print i,

print


実行結果は、以下のようになる。
$ python input_number.py 
Input number[1-100]
1: 50
もっと小さいよ
2: 25
もっと大きいよ
3: 40
もっと小さいよ
4: 30
もっと大きいよ
5: 38
もうちょっとだけ小さいよ
6: 36
もうちょっとだけ小さいよ
7: 35
Hit! answer is 35

入力履歴
50 V 25 ! 40 V 30 ! 38 v 36 v 35



sylphide_ffr31mr at 23:54コメント(0)トラックバック(0) 
記事検索
最新コメント
プロフィール

やすき

月別アーカイブ
  • ライブドアブログ