数当てゲームを作ってみよう
ここまでで、プログラミングする際の一番基本となる部分の説明が終了です。そこで一旦、『数当てゲーム』というものを作って復習したいと思います。乱数を発生させる
先に復習って書いておきながら、いきなり新しいを説明します。済みません。本当は.Net Frameworkの内容でフライングなのですが、使ってみましょう。# coding: shift-jis
from System import *
rnd = Random()
answer = rnd.Next(100) + 1
print answer
raw_input()
出力画面:
16
始めの上の"from System import *"は.Net Frameworkを使うための準備です。"Random()"はNet
Frameworkのコマンドの一つで、乱数発生オブジェクトを生成します。わかりやすく言うと.NetFramework中のRandom()を使って、乱数発生機:rndを作成しました。rndの使い方は"rnd.Next(100)"というメゾットを実行すると0〜99の数字を適当に発生させます。したがって、変数answerは1〜100のどれかの数字になります。これ当てるゲームを作ります。
入力部分を作る。
先のコードにユーザーが答えを入力する部分を加えます。# coding: shift-jis
from System import *
rnd = Random()
answer = rnd.Next(100) + 1
print answer
moji = raw_input()
number = int(moji)
if number == answer :
print "当たり!!"
else :
print "はずれ"
raw_input()
出力画面:
43
43
当たり!!
出力画面:
80
43
はずれ
初めに出てくる数字が答えです。答えと同じ数字を入力して当たりと判断できるか、違った数字を入力してはずれ判断できるかの確認です。入力を扱うコードをみるといつも使っているraw_input()があります。
このコマンドはユーザーがEnterキーを押すまでに入力した文字を覚えていて、mojiに渡しています。mojiという名前にしたのはデータの型が文字列だからです。
文字列mojiを数値であるanswerと合っているか比べることができないため、int()を使って数値に変換します。そしてanswerとnumberが同じならば、当たり。そうでなければ、はずれと表示しています。
では次、第6感が働かなければ、100あるうちの1つなんて当てることは不可能です。なので、ヒントを出しながら、何回目で当たるか数えてみましょう。
# coding: shift-jis
from System import *
rnd = Random()
answer = rnd.Next(100) + 1
print answer
count = 0 #答えた回数を数える変数の初期化
number = 0
while number <> answer :
moji = raw_input()
number = int(moji)
count += 1 #答えた数を増やしていきます
if number > answer :
print "大き過ぎます。"
elif number < answwer :
print "小さ過ぎます。"
print str(count)+"回目で正解しました。"
raw_input()
あれ?なぜか動きません。こういう時は新しく入力した部分の行頭に"#"をつけてコメントにしてしまいます。例えばこんな感じ、# coding: shift-jis
from System import *
rnd = Random()
answer = rnd.Next(100) + 1
print answer
count = 0 #答えた回数を数える変数の初期化
number = 0
#while number <> answer :
# moji = raw_input()
# number = int(moji)
#
# count += 1 #答えた数を増やしていきます
#
# if number > answer :
# print "大き過ぎます。"
# elif number < answwer :
# print "小さ過ぎます。"
print str(count)+"回目で正解しました。"
raw_input()
出力画面:
56
0回目で正解しました。
今度は一応動きました。ということは今回コメントにした部分のどこかが悪いわけです。次は#をつけた部分を半分にします。
# coding: shift-jis
from System import *
rnd = Random()
answer = rnd.Next(100) + 1
print answer
count = 0 #答えた回数を数える変数の初期化
number = 0
while number <> answer :
moji = raw_input()
number = int(moji)
count += 1 #答えた数を増やしていきます
# if number > answer :
# print "大き過ぎます。"
# elif number < answwer :
# print "小さ過ぎます。"
print str(count)+"回目で正解しました。"
raw_input()
出力画面:
72
70
76
72
3回目で正解しました。
今度もうまくいきました。ということは残りの4行のどこかに間違いがあります。
よくみると"elif number <"の後の answwerはanswerですね。直すとちゃんと動きました。このようにプログラミングでは間違い探しをする技術も、重要な技術の一つになります。
出力画面:
23
20
小さ過ぎます。
25
大き過ぎます。
23
3回目で正解しました。
更に応用させていきます
では正解したとき、もう少し面白いコメントにしてみましょう。
# coding: shift-jis
from System import *
rnd = Random()
answer = rnd.Next(100) + 1
print answer
count = 0 #答えた回数を数える変数の初期化
number = 0
while number <> answer :
moji = raw_input()
number = int(moji)
count += 1 #答えた数を増やしていきます
if number > answer :
print "大き過ぎます。"
elif number < answwer :
print "小さ過ぎます。"
print str(count)+"回目で正解しました。"
if count == 1 :
print "すげー!もしかして超能力者?"
elif count == 2 :
print "大当たり!て・・・天才です。"
elif count == 3 :
print "大当たり!秀才かも・・・。"
elif (count == 4 | count == 5) :
print "当たり!運がよかったかな?"
elif count == 6 :
print "当たり!普通だなあ"
elif count == 7 :
print "まあこんな日もあるよ"
elif count > 7 :
print "もうちょっと頭を使いましょう"
raw_input()
出力画面:
45
45
1回目で正解しました。
すげー!もしかして超能力者?
ほぼ完成に近づきましたが、ここでユーザーが入力ミスをして、数字を入力するところを"abc"なんて入力したら、どうなるでしょう。プログラムは途中で止まってしまいますね。入力を失敗した人が悪いということもできますが、プログラムが途中で止まってしまうほど、ユーザーがきょうざめしてしまうことはありません。折角、例外処理を知っているのですから試してみましょう。
# coding: shift-jis
from System import *
rnd = Random()
answer = rnd.Next(100) + 1
print answer
count = 0
number = 0
while number <> answer :
moji = raw_input()
try :
number = int(moji)
except :
print "数字を入力してください。"
continue
else :
count += 1
if number > answer :
print "大き過ぎます。"
elif number < answer :
print "小さ過ぎます。"
print str(count)+"回目で正解しました。"
if count == 1 :
print "すげー!もしかして超能力者?"
elif count == 2 :
print "大当たり!て・・・天才です。"
elif count == 3 :
print "大当たり!秀才かも・・・。"
elif (count == 4 | count == 5) :
print "当たり!運がよかったかな?"
elif count == 6 :
print "当たり!普通だなあ"
elif count == 7 :
print "まあこんな日もあるよ"
elif count > 7 :
print "もうちょっと頭を使いましょう"
raw_input()
出力画面:
4
abc
数字を入力してください。
4
1回目で正解しました。
すげー!もしかして超能力者?
最後に、最初から答えがみえていたのではゲームにならないので、答えを隠して設問みたいにして完成です。