おひとりさまプログラミング

無料で学べるブログラミング学習サイト

Ruby講座|第5回 数当てゲーム「対話入力の値が想定外であった場合」

皆さん、こんにちは。

しょうとく(@syoucha0107)と申します。

今回も初心者向けによく使われる
数当てゲームを作ってRubyを学んでいきます。

実はこの講座を学んでいただけると
第1回目の課題の答えが導き出せるはず。

ゲームを作るにあたり、
まずはこちらの要点をご覧ください。

f:id:sayo0425tan:20200821190839p:plain

今回の数当てゲームの難点は、ユーザーが数字以外の入力をした場合です。正しく入力してくださいとエラーメッセージを返すことで、再度入力をうながしてみます。

まずは入力値を条件分岐で表示を分けるところから

難点を考える前にまずは標準入力の値を受け取り、受け取った値に応じて、条件分岐させるものを記述します。

puts "数当てゲーム。0から9までの数字を1つ選んで、数字を当ててみて。"

loop do #loopメソッド
	number = gets.to_i
	#getsメソッドはキーボードで入力した値を取得
	#to_i 文字列を整数に変換
 
	if number <= 4
		puts "入力した数値より大きいよ!"
 
	elsif number >= 6 && number <= 9
		puts "入力した数値より小さいよ!"
 
	else
		break
	end
end

puts "あたり!"

まずは数字だけを入力してみます。

f:id:sayo0425tan:20200821191731p:plain

うまくできてます。
ただし・・・下の画像をご覧下さい。

f:id:sayo0425tan:20200821191756p:plain

カタカナを入力、そしてスペースや何も入力せずに実行キーを押した場合も「入力した数値より大きい」と返答が帰ってきます。gets.to_iで、文字列を数値に変換した値を受け取るがゆえに表示されたのです。

文字列や記号、スペースキー、空実行、また2桁以上の数字が入力された場合に「1桁の数字以外は入力しないでね。もう一回入力してね。」とエラーメッセージを表示させて、再度入力をうながすにはどうすれば良いのか・・・。

ループの中にさらにループを記述

puts "数当てゲーム。0から9までの数字を1つ選んで、数字を当ててみて。"

loop do 
  number = loop do
      #getsメソッドで入力した値を、文字列で取得
      line = gets
      #to_i 文字列を整数に変換 さらに正規表現で判定する
      break line.to_i if /^\d$/ =~ line
      puts "1桁の数字以外は入力しないでね。もう一回入力してね。"
  end

  number = number.to_i

  if number <= 4
    puts "入力した数値より大きいよ!"

  elsif number >= 6 && number <= 9
    puts "入力した数値より小さいよ!"

  else
    break
  end
end

puts "あたり!"

loop do の記述の中に、さらにループの記述している箇所をご覧ください。getsメソッドで入力した値を、文字列で取得して文字列を整数に変換。さらに正規表現で判定させる。

youtu.be

いかがでしたでしょうか。今回はこちらの正規表現の記述に対する理解がそれなりに求められる問題です。正規表現の基礎をきっちり学習したのち、またこの問題を振り返ってみるとより理解が深まります。