プレイヤーの入力を制御したい!「繰り返し処理」を書いてみよう!

記事
IT・テクノロジー
こんにちは!現役システムエンジニア@育休中のtak_kです!😁
本業でシステムエンジニアをしているかたわら、複業でプログラミング講師や、初学者向けにプログラミング学習をサポートする『メンター』をやっています!

前回の振り返り

前回の復習.png
前回の記事で、以下の話をしました。

「gets」メソッドを使うと、プレイヤーの入力を受け付けることができる!
プレイヤーが入力した文字を、変数「input」に保存するところまで完成した!

プレイヤーの入力を「HIGH」か「LOW」にさせたい場合は!?

doors-1690423_640.jpg

前回までで、プレイヤーに「HIGH」か「LOW」のどちらかを入力してもらうように促し、実際に文字を入力してもらいました。
ただし、実際に「HIGH」か「LOW」以外の文字が入力された場合のことを考えてみましょう。プレイヤーの勝ち負けを判定できず、ゲームになりませんね。。。

これに対する解決方法は、色々と考えられますが、ここでは以下のような仕組みを考えてみましょう。

■解決方法
入力された文字が「HIGH」、「LOW」のいずれでもない間、以下を繰り返す
 → プレイヤーに入力を促し、変数「input」に入力値を保存する

これにより、「HIGH」と「LOW」以外の文字が入力される限り、何度でもプレイヤーに再入力を促し続けることができます。
ここで使っている論理構造を「繰り返し」と言います。 

フローチャート上でも、この繰り返しを表現しており、以下のようになっています。
スクリーンショット 2022-07-15 20.46.15.png



Rubyで繰り返しの処理をプログラミングしよう!

hamster-wheel-1014047_640.jpg

それでは、先ほどのフローチャートで出てきた、繰り返しの処理をRubyで書いてみましょう!
繰り返しの処理は、実は様々な記載方法があるのですが、最も基本となる「while文」を使ってみましょう!構文は以下の通りです。

■構文
while [条件式] do
  [条件式を満たす間、実行する処理]
  ...
end
今までと比較して、少し複雑になりましたね。
新しい用語も出てきているので、一つ一つ説明していきます。

まず「条件式」ですが、文字通りで、「条件を表す数式」と捉えられます。
今回の場合で言うと、
 ・『入力された文字≠「HIGH」』
 ・『入力された文字≠「LOW」』
は、それぞれが条件式になります。
ただし、Rubyの文法で、「左辺と右辺が等しくない」と言う条件を記載する場合、以下のような構文になるので注意しましょう。

■構文
[左辺] != [右辺]

さらに、今回の場合、上記の2つの条件をいずれも満たす場合に、処理を実行したい、という要件があります。
そのような場合、日本語で以下のように表すことがありますね。
 ・『入力された文字≠「HIGH」』
   かつ
 ・『入力された文字≠「LOW」』

これもRubyの文法で表すことができ、以下のような構文になります。

■構文
[条件式1] && [条件式2]
今までの話をまとめて、ハイ&ローゲームのプログラムを書き進めていきましょう!
以下のようになります。

■プログラム内容
num1 = rand(10)
puts "「HIGH」か「LOW」を入力してください"
input = gets
##以下を追加
while input != "HIGH" && input!= "LOW"
  puts "もう一度入力してください" #確認用出力
  input = gets
end
puts "繰り返し文を抜けました" #確認用出力

条件式を満たした場合、そのことがわかるように「もう一度入力してください」と言うメッセージを出力するようにし、
さらに、条件式を満たさなくなった時、その目印に「繰り返し文を抜けました」のメッセージを出力するように、プログラムを追加しておきました。

「ちょっといきなり難易度上がって大変!」と言う人もいると思いますが、一つ一つ自分で理解しながら、進めていってください。

では、これを実行してみましょう!
例えば、入力内容を「test」にした場合は、再入力が促されるはずです。

■実行結果
スクリーンショット 2022-07-15 21.14.59.png

できてますね!
それでは次に、「HIGH」を入力すると、再入力が促されずに繰り返し文を抜け、そのまま処理が終了するはずです。

■実行結果
スクリーンショット 2022-07-15 21.16.45.png

あれ、結果が想定と違いますね。。。😅

今まで一度もこのような想定外の挙動は発生してこなかったので、ビックリされたかもしれません。
しかし、実際の開発現場では、このようなことは日常茶飯事。。。
こういう時に、どのようなアプローチで課題を乗り越えていくか、次回それを進めていきましょう!

次回の予告

次回予告.png

今回は、「繰り返し処理」について解説しました!
繰り返し処理を行いたい条件を、条件式で表して、それをwhile文と言う構文で記載していくことを学びましたね!
ですが、今回初めてプログラムが想定外の動作をしてしまいました。。。
次回は、この状況をどうやって軌道修正していくのかを解説したいと思います。果たして、不具合を修正することができるのか。。。次回もお楽しみに!
https://coconala.com/mypage/blogs/edit/209065



プログラミング学習をサポートします!

サポート.jpg

プログラミングの学習は、一人だととても挫折しやすいんですよね。
そんな方のために、現役エンジニアで指導経験もある私が、プログラミング学習のお悩み相談に乗るサービスを提供しています。
「何をしてくれるのかよくわからない!」という方も、お気軽にメッセージで問い合わせてくださいね!
※問い合わせるだけなら「タダ」です!😂
また、小中学生向けのプログラミング教育の場で、「scratch」というプログラミング言語がよく使われてます。
難しそうなプログラミングのイメージとは違って(まさに本章の見出し画像のようなイメージ😅)、視覚的/直感的にわかりやすいのが特徴で、お子様でも楽しく遊び感覚で、プログラミング的な思考力を養うことができます。
こちらもお気軽にお問い合わせください!

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