Rubyの初心者向け問題1-4:case文を使って曜日判定プログラムを作ろう
この問題を解くために必要な知識:
【レベル1の知識】
コメントの書き方、変数と定数、基本データ型、四則演算と演算子、入力と出力、文字列操作、分岐処理(if、if~else、elsif、case)、繰り返し処理(for、while、until、each)、範囲(Range)、例外処理(begin-rescue-end)
<<前の問題 | 問題集Top |
次の問題>> |
Rubyの文法「分岐処理(case文)」とは
ここでは分岐処理(case文)の意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。
Rubyでは、複数の条件に応じて処理を分けるための「分岐処理」が用意されています。
分岐処理にはいくつかの種類がありますが、この記事では特に「case文」について詳しく解説します。
case文の使い方
case
文は、特定の値に基づいて処理を分岐させる場合に便利です。if-else
の連続よりも読みやすく、特に複数の条件を扱うときに効果的です。
case
文では、評価したい変数や式に対して複数のwhen
節を使って条件を指定します。条件が一致する場合、その処理が実行されます。
value = 2 case value when 1 puts "値は1です" when 2 puts "値は2です" when 3 puts "値は3です" else puts "不明な値です" end
この例では、value
が2なので「値は2です」が出力されます。else
節は、どのwhen
にも一致しなかった場合に実行されます。
複数条件を一つのwhen
で扱う
case
文では、複数の条件をカンマで区切って一つのwhen
節にまとめることができます。
value = 4 case value when 1, 2, 3 puts "値は1、2、または3のいずれかです" else puts "それ以外の値です" end
この例では、value
が4なので「それ以外の値です」が出力されます。
case
文のメリット
case
文は、複数の条件に対してよりシンプルで読みやすいコードを書くことができるのが特徴です。複雑な分岐処理を整理するのに最適な選択肢です。
まとめ
Rubyの分岐処理は、条件に応じたコードの実行を可能にする非常に重要な機能です。
特に、case
文は複数の条件を簡潔に扱うのに便利なため、複雑な条件分岐を必要とする場合に活用してください。
Ruby練習問題1-4:case文を使って曜日判定プログラムを作ろう
ユーザーから入力された数値(1~7)を曜日に変換し、その曜日を表示するプログラムを作成しましょう。
例えば、1が入力された場合は「月曜日」、2が入力された場合は「火曜日」のように表示します。
1~7以外の数値が入力された場合は「無効な入力です」と表示します。
この問題の要件
以下の要件に従ってコードを作成してください。
- ユーザーに1から7の数値を入力させること。
case文
を使用して、数値に基づいて曜日を判定すること。- 1 → 「月曜日」
- 2 → 「火曜日」
- 3 → 「水曜日」
- 4 → 「木曜日」
- 5 → 「金曜日」
- 6 → 「土曜日」
- 7 → 「日曜日」
- 1から7以外の数値が入力された場合には、「無効な入力です」と表示すること。
- 判定結果を画面に表示すること。
ただし、以下のような実行結果となること。
----- ↓出力される結果の例↓ -----
1から7の数値を入力してください: 3 入力された数値に対応する曜日は:水曜日です
----- ↑出力される結果の例↑ -----
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
1.puts
を使用してユーザーに数値入力を促す
2.gets.chomp.to_i
でユーザーの入力を受け取り、数値に変換
3.case文
で数値に基づいて曜日を判定 3-1. 1
のとき、「月曜日」と表示
3-2. 2
のとき、「火曜日」と表示
3-3. 3
のとき、「水曜日」と表示
3-4. 4
のとき、「木曜日」と表示
3-5. 5
のとき、「金曜日」と表示
3-6. 6
のとき、「土曜日」と表示
3-7. 7
のとき、「日曜日」と表示
3-8. それ以外の場合は「無効な入力です」と表示
4.puts
で判定結果を表示
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# ユーザーに数値を入力させる puts "1から7の数値を入力してください:" =begin 【穴埋め問題1】 ここにユーザーの入力を受け取り、整数に変換するコードを書いてください。 =end # 数値に基づいて曜日を判定する day_name = case day_number =begin 【穴埋め問題2】 ここに1から7までの数値に対応する曜日を判定するコードを書いてください。 =end else "無効な入力です" end # 判定結果を表示する puts "入力された数値に対応する曜日は:#{day_name}です"
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
********************
# 曜日の判定プログラム # ユーザーに数値を入力させる puts "1から7の数値を入力してください:" day_number = gets.chomp.to_i # gets.chomp.to_i はユーザーからの入力を受け取り、改行を除去し、整数に変換します。 # 数値に基づいて曜日を判定する day_name = case day_number when 1 "月曜日" when 2 "火曜日" when 3 "水曜日" when 4 "木曜日" when 5 "金曜日" when 6 "土曜日" when 7 "日曜日" else "無効な入力です" end # 判定結果を表示する puts "入力された数値に対応する曜日は:#{day_name}です"
********************
コードの解説
このプログラムは、1から7までの数値をユーザーから入力してもらい、それに応じた曜日を表示するものです。
case文
を使って分岐処理を行い、適切な曜日を出力します。以下の各ブロックで使われている文法を詳しく説明します。
ユーザーからの入力
puts "1から7の数値を入力してください:" day_number = gets.chomp.to_i
puts
は、画面にメッセージを表示するメソッドです。「1から7の数値を入力してください」と表示します。gets
は、ユーザーの入力を受け取るメソッドです。このままでは文字列のままなので、chomp
で改行を取り除き、to_i
で整数に変換しています。
case文
による分岐処理
day_name = case day_number when 1 "月曜日" when 2 "火曜日" when 3 "水曜日" when 4 "木曜日" when 5 "金曜日" when 6 "土曜日" when 7 "日曜日" else "無効な入力です" end
case文
は、指定した値に基づいて処理を分岐させるために使用します。ここでは、day_number
の値が1から7までの範囲に対応する曜日を返します。- 例えば、
day_number
が1であれば「月曜日」、2であれば「火曜日」を表示します。 else
は、指定された範囲外の値が入力されたときに実行されるコードです。1から7以外の数値が入力された場合、「無効な入力です」と表示されます。
- 例えば、
結果の表示
puts "入力された数値に対応する曜日は:#{day_name}です"
puts
を使って、計算結果を表示します。#{}
は、文字列の中に変数を埋め込むために使用され、ここではday_name
の内容が表示されます。
<<前の問題 |
問題集Top |
次の問題>> |
この問題への質問・コメント
この問題を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。