【Python】1桁だけの「ヒットアンドブロー 」ゲームを作ってみる!

【Python】1桁だけの「ヒットアンドブロー 」ゲームを作ってみる!

1桁の数当てゲームをつくってみよう!

前回ヒットアンドブローゲームを作るといったけど、今回はまずお試し版で1桁だけで作ったみよう。1桁だから「アタリ」か「ハズレ」かだけになるね。こんな風に難しいプログラムを作るときは、まずシンプルに作って仕組みを確認するっていうのも大切なんだ。流れとしては下のように作っていくよ。

  1. ランダムな1桁の数字を作る
  2. 文字を入力できるようにする
  3. アタリかハズレか判定する

1.ランダムの数をつくる

まずはランダムな数字をつくろう。これは「randomモジュール」というのが用意されているのでカンタンにつくれるんだ。まずはモジュールのインポート。書き方はこんな感じだ!

# codeing=utf-8
 
import random

それじゃあrandomモジュールの中の「randint」という関数を使って、「0から9までのランダムな数」を出してみるよ。書き方はこんな感じ。

# codeing=utf-8
 
import random

a = random.randint(0,9)
print(a)

5行目がrandintの部分。(0.9)で「0から9の間」っていうのを指定してるんだね。試しになんども実行してみると、毎回違う数字が出てくるよ。

ちなみにrandomモジュールには他にもランダムに関する便利な関数がたくさん入ってる。よく使うものをまとめておくね。

関数 意味
random.randint(a,b) a以上b以下のランダムな整数を返す
random.choice(seq) シークエンスの中からランダムに1つ取り出す
random.shuffle(x) xをランダムな順番に並び替える
random.random 0.0以上1.0未満のランダムな少数を返す
random.seed(a,version) ランダムな値を出すときの基準となる値を設定する。ランダム度合いを調整したりするのに使う。

2.文字を入力できるようにする

文字を入力する方法はいくつかあるんだけど、簡単なのは「input」という関数を使うやり方だ。書き方はこんな感じ。

# codeing=utf-8
 
import random

b = input("数字を入れてね→")
print(b)

()の中は、ユーザーに表示したい文字を入れる。これで実行すると「数字を入れてね→」という文字のあとが入力待ちの状態にって、そこに文字を入力してEnterを押すと、今入力した文字が表示されるよ。

▽ 実行結果

数字を入れてね→7
7
>>> 

3.アタリかどうか判定する

ここまでくれば、①で作ったランダムな数字「a」と②の入力結果「b」が同じかどうかをみればいいだけだ。同じか判定するのは下のような感じで書ける。

if a==b:
    print("アタリ")
else:
    print("ハズレ")

これでやりたいことのパーツは揃ったね。あとは組み合わせて1つのゲームにしていこう!とりあえず今まで書いたプログラムを合体させてみたよ。

# codeing=utf-8
 
import random

#①ランダムな数をつくる
a = random.randint(0,9)
print(a)

#②文字を入力できるようにする
b = input("数字を入れてね→")

#③アタリかどうか判定する
if a==b:
    print("アタリ")
else:
    print("ハズレ")

ちなみに7行目の「print(a)」は、問題の答えを先に表示さえせてる。ゲームとしてはネタバレになっちゃうんだけど、ちゃんと動くか確認するために書いてるんだ。動いてたら後で消せばいいからね。

それじゃあ実行してみよう。実行するとこんなふうに出るね。

8
数字を入れてね→

1行目の8っていうのは問題の答えだ。ためしにわざと間違えて7と入れてEnterを押してみたよ。

8
数字を入れてね→7
ハズレ

ちゃんと「ハズレ」と表示された!ここまでうまく動いてるね。それじゃあ今度は正解してみる。

もう一度最初から実行してみると答えは「2」と出たので、2を入力してみる。

2
数字を入れてね→2
ハズレ

正解のはずなのに「ハズレ」と出ちゃってうまく動いてくれないね。これにはちゃんと理由がある。randint()でつくったのはランダムな「数字」だけど、input()で入力した内容は「文字列」として認識されるんだ。つまり同じ2でも、数字の2と文字列の”2″をくらべたから違うって判定されちゃったんだね。

文字列を数値に変換する

動かない原因がわかったから、inputで入力した文字列を数字に変換すればいいね!変換には「int()」という関数が用意されてるよ。()の中に数値にしたい文字列を入れるだけだ。これでさっきの10行目を修正してみた。

b = int(input("数字を入れてね→"))

これでOKだね。一応ぜんぶまとめたプログラムも書いておくね。

# codeing=utf-8
 
import random

#①ランダムな数をつくる
a = random.randint(0,9)
print(a)

#②文字を入力できるようにする
b = int(input("数字を入れてね→"))

#③アタリかどうか判定する
if a==b:
    print("アタリ")
else:
    print("ハズレ")

書けたらさっきと同じように実行して試してみよう!ちゃんと動くはずだ。これで単純だけど数当てゲームの第一弾が完成だ!

今日のまとめ

  • 「randomモジュール」でランダムな数をつくる!
  • 「input関数」で文字の入力をつくる!(入力内容は文字列になるので注意)
  • 「int関数」で文字列を数字に変換する!