40代塾講師の「ほぼ独学プログラミング日誌。」16

記事
学び
『プログラミングで切り開く、新しい未来♪』

こんにちは!
塾講師のdainarです。
早いもので3月・・・普段から食事や運動に気をつけている私ですが久しぶりに”養命酒”を愛飲することになりました♪(深い意味はありませんよ💦健康のため)

さて今回は今まで学習してきた内容の総復習ということで”ヒット&ブロー”という数当てゲームを作ってみたいと思います。
今までとは違い少し複雑で長めのプログラムとなりますので3回に渡って配信を行いますね!

目次 
1. ヒット&ブローとは
2. 4桁のランダムな値を作ろう!
3. リストを使ってみる

ヒット&ブローとは

”ヒット&ブロー”とは4桁の数字を当てるゲームです。2人のプレーヤーが「親=出題者」と「子=回答者」に分かれてプレーします。

【ルール】

①親は0〜9の数字をつかって4桁の数字を考えます。そのときに同じ数字を2個以上つかっても構いません(例 1234, 2344, 5000)
②子はその数字を予想して親に提示します。
③親は②で提示された数字を判定し、ヒットとブローの数を提示します。
・数字と位置が正しい場合=ヒット(例 : 子=1324 親=1234 なので2つヒット)
・位置は正しくないが、その数が含まれている場合=ブロー(例 : 子=1324 親=1234 なので2つブロー)
④②〜③をくり返し、子はヒットとブローの数を参考にして親が考えた4桁の数字を当てます。
※②〜③をくり返しが少ない回数で当てることを目指すゲームです!

文章だとイメージがしづらいと思いますので簡単なプログラムを考えてみます。
hit&blow1.png

おなじみのコードが上から並んでいますが、このプログラムの動作はイメージできますか?
まず a には0〜9のランダムな数が代入され、b にはinputで入力された値がintで整数に変換されて代入されます。
以下、aとbの値が等しければ「当たり!」aとbの値が違っていれば「ハズレ」と表示されます。

ここまではOKでしょうか?

今、判定は1桁なので簡単にできています。作るゲームは4桁なのでこの判定を4つ分行うイメージです。

4桁のランダムな値を作ろう!

まずはこのコードを見てください。

hit&blow2.png

a1〜a4の変数に入る値はおわかりだと思いますが、print文の中のstrを使う意味がわかる方いますか?
そうstr関数は”ある値を文字列に変換する”関数なのです。この処理を行わないと整数「8」「9」「8」「3」がたし算され 「28」という2桁の値になってしまいます・・・
「8983」という4桁の値(文字列)で表示をするための処理だったのです!

リストを使ってみる

ただ、このようにランダムな値をa1〜a4というように別々の変数に保存していくのは後で値が等しいかどうかを調べるときに処理が少し面倒になります。
そこで、同じような値を1つまとめることができる「リスト」を使いましょう!

a = [ 5, 0, 3, 7 ]

というリストを考えるとき、aには4つの箱ができてそれぞれ「5」「0」「3」「7」の値が格納されています。このような箱それぞれを「要素(element)」といい、要素には「0」から始まる番号(=インデックス・添字)がつきます。

よって以下のコードでは

hit&blow3.png

print文でaというリストの[0]番目, [1]番目, [2]番目, [3]番目に入ったランダムな値がstr関数で文字列に変換され、「+」演算子で連結されたわけです。
まさしく今まで勉強してきた内容の”総復習&振り返り”という感じですね?

少し長くなり、皆さんもお疲れでしょうから今回はここまでとします。
では、また次回!

※参考図書=『いちばんやさしいPython入門教室』大澤文孝(著) ソーテック社


サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す