今回はPythonで簡単な数当てゲームを作ってみましょう。とは言え電卓でプログラムを入力するのは大変なので、あらかじめパソコン上で作成して動作を確認してから電卓上で実行します。
乱数を表示する
数当てゲームではランダムな値(乱数値)を使います。そこで、まずは乱数を発生させて表示させてみます。
Pythonで乱数を発生させるには、あらかじめrandomモジュールを読み込ませる必要があります。
・randomモジュール
https://docs.python.org/ja/3/library/random.html
randomモジュールはimportを使って読み込ませます。モジュールを読み込ませてしまえば後は様々な機能(メソッド)を呼び出すことができます。
0から1未満までの乱数値はrandom()で発生させることができます。以下のプログラムを実行すると小数の乱数が表示されます。
import random
print(random.random())
パソコン側でファイルを作成しておき、電卓に転送します。ファイル名はA1.pyとしてあります。乱数なので実行するたびに表示される値は変わります。
数当てゲームで小数値を当てるのは至難の業です。というか、不可能に近いでしょう。当てるなら小数値ではなく整数値にしないといけません。そうでないとゲームにならなくなってしまいます。
乱数値を整数にするにはrandint()を使います。()内に乱数の初めの値と最後の値を指定します。1,6とすると1から6までの整数の乱数値を発生させます。
プログラムは以下のようになります。
import random
print(random.randint(1,6))
プログラムはパソコンで作成しておきA2.pyという名前のファイルにして保存し電卓に転送します。電卓側で実行すると以下のようになります。実行するたびに整数の乱数値が表示されます。
一定回数乱数値を表示する
乱数値を1つだけ表示するだけでは物足りないかもしれません。ということで、今度は一定回数乱数を表示してみます。
一定回数繰り返すにはforを使います。ここらへんはC言語やJava言語などを使ったことがあれば感覚的にわかるかもしれません。
Pythonでは一定回数繰り返す場合は以下のようにrange()を使います。()内に繰り返す回数を指定します。以下の例では10回繰り返すことになります。
そして、ここで注意しないといけないのがPython言語特有のルールです。C言語やJava言語など多くのプログラム言語では繰り返しなどのブロックは{ }で囲みます。Pythonではブロックはインデント(字下げ)で示します。単純に言えばfx-CG50の場合、繰り返しブロックは空白2文字分字下げしていく、ということです。字下げした文字の数でブロックを示すことになるので空白が1文字でも違うとエラーになってしまうので注意が必要です。
実際のプログラムは以下のようになります。プログラムはパソコンで作成しておきA3.pyという名前のファイルにして保存し電卓に転送します。電卓側で実行すると10個の乱数値が表示されます。
import random
for i in range(10):
print(random.randint(1,6))
ここで少しプログラムを修正します。パソコンでプログラムを入力していると気になりませんが、このようなプログラムを電卓上で入力するのはなかなか大変です。特に長いプログラムになると文字の入力だけで相当時間がかかってしまいます。そこで、長いモジュール名を少しでも短くします。ここではrandomモジュールの名前をrの1文字に縮めることにします。モジュール名を別の名前にするにはimport〜で読み込む際にasを付け、その後に使いたい名前を指定します。今回はrにするので以下のように指定します。
import random as r
このようにrandomモジュールの名前をrにすると
print(random.randint(1,6))
だった部分は
print(r.randint(1,6))
のようにrandomの文字部分をrに短くできます。1文字なら電卓でも入力の負担が大きくはならないでしょう。
このように変更したプログラムは以下のようになります。変更前と変更後でも動作には変わりなく10個の乱数値が表示されます。
import random as r
for i in range(10):
print(r.randint(1,6))
1〜6までの数を当てる
それでは数当てゲームを作りましょう。乱数を生成したら何かに値を入れておく必要があります。ここではnに入れることにしました。
次にユーザーからの入力ですが、以前にも使ったinput()を使います。ここで()内に文字列を指定すると、その文字列が実行時に表示されます。ユーザーが入力した内容は文字列なので乱数値と比較するために整数値にする必要があります。整数値にするにはint()を使います。input()を丸ごとint()で囲んでしまいます。あとは数値に変換した結果をaに入れておきます。
あとは乱数値と入力した値が等しいかどうかを調べます。値が等しいかどうかはifを使います。ifの後にa==nとするとaとnの内容が等しいかどうか調べてくれます。等しい場合は以後のブロックが実行されます。ブロックなので2文字の空白を入れて字下げします。字下げしたら当たったことを示す文字列をprint()で表示します。
実際のプログラムは以下のようになります。プログラムはパソコンで作成しておきA5.pyという名前のファイルにして保存し電卓に転送します。電卓側で実行すると入力状態になるので、数値を入力してEXEキーを押します。正解ならclear!の文字が表示されます。外れた場合は何も表示されずプログラムが終了します。
import random as r
n=r.randint(1,6)
a=int(input('1-6? '))
if a==n:
print('clear!')
【図】正解した場合
【図】正解しなかった場合
外れた場合もメッセージを表示する
先ほどのプログラムでは数を当てた場合にメッセージを表示しました。しかし、外れた場合には何もメッセージを表示せずに終了してしまいます。外れた場合もメッセージを表示するようにしてみます。
先ほどのプログラムを改良します。外れた場合に処理する、つまりifの後の条件を満たさなかった場合に処理するにはelseを使います。else以降に外れた場合に表示するメッセージをprint()で表示します。また、正解の数も表示するようにします。この場合もprint()を使います。乱数値が入っているnの値を表示するにはprint(n)のように()の中に指定します。文字列と組み合わせて表示するには,で区切って指定します。
実際のプログラムは以下のようになります。プログラムはパソコンで作成しておきA6.pyという名前のファイルにして保存し電卓に転送します。電卓側で実行すると入力状態になるので、数値を入力してEXEキーを押します。正解ならclear!の文字が表示され、外れた場合はmiss!の文字と正解の数が表示されます。
import random as r
n=r.randint(1,6)
a=int(input('1-6? '))
if a==n:
print('clear!')
else:
print('miss!')
print('n=',n)
【図】正解した場合
【図】正解しなかった場合
当てるまで終わらないようにする
数を当てるにしても1回で当てるのは至難の業です。そこで今度は数を当てるまでプログラムが終わらないようにしてみます。永遠に繰り返す、プログラムでは無限ループなどと言われますが、これはPythonでは以下のように指定します。
while True:
この行の後に2文字字下げしてブロックで数を当てる処理を指定します。ブロックが入れ子になっている場合、正しく字下げしないとエラーになるので注意してください。
あと正解したら無限ループから抜ける必要があります。ループから抜けるにはbreakを使います。exit()などでプログラムを終了するという方法もありますが、fx-CG50のPythonではexit関係の機能は動作しないようです。
実際のプログラムは以下のようになります。プログラムはパソコンで作成しておきA7.pyという名前のファイルにして保存し電卓に転送します。電卓側で実行すると入力状態になるので、数値を入力してEXEキーを押します。正解するまで終了しません。
import random as r
n=r.randint(1,6)
while True:
a=int(input('1-6? '))
if a==n:
print('clear!')
break