Rubyの初心者向け問題1-8:例外処理プログラムを作ろう
この問題を解くために必要な知識:
【レベル1の知識】
コメントの書き方、変数と定数、基本データ型、四則演算と演算子、入力と出力、文字列操作、分岐処理(if、if~else、elsif、case)、繰り返し処理(for、while、until、each)、範囲(Range)、例外処理(begin-rescue-end)
<<前の問題 | 問題集Top |
次の問題>> |
Rubyの文法「例外処理」とは
ここでは例外処理の意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。
プログラムがエラーを起こした際、通常その場で終了してしまいますが、例外処理を使うことでプログラムの異常な終了を防ぐことができます。
Rubyでは、begin-rescue-end
構文を使って例外をキャッチし、適切に対処することができます。
例外処理の主な目的は、エラーが発生した時にどのように対応するかを定義することです。
特にゼロ除算(0で割ること)が発生した場合など、特定のエラーを捕捉して処理を行います。
例外処理の基本構文
Rubyの例外処理は、以下のような構文で記述します。
begin # 例外が発生する可能性のあるコード rescue エラーの種類 # 例外発生時に実行される処理 end
例:ゼロ除算のエラー処理
begin 1 / 0 rescue ZeroDivisionError puts "ゼロで割ることはできません" end
この例では、1 / 0
というゼロ除算が実行され、通常であればプログラムがエラーで終了します。
しかし、rescue
でZeroDivisionError
をキャッチし、代わりに「ゼロで割ることはできません」というメッセージが表示されます。
複数の例外を処理する
複数の異なる例外を処理することもできます。
例えば、以下のように複数のrescue
ブロックを使って、異なるエラーに対応することができます。
begin # 例外が発生する可能性のあるコード rescue ZeroDivisionError puts "ゼロで割ることはできません" rescue StandardError puts "何らかのエラーが発生しました" end
まとめ
例外処理を理解することで、予期せぬエラーが発生した際にもプログラムが適切に対応できるようになります。
Rubyのbegin-rescue-end
構文を活用し、プログラムの信頼性を高めることが重要です。
Ruby練習問題1-8:例外処理プログラムを作ろう
例外処理を使って、ゼロで割った場合にエラーメッセージを表示する割り算プログラムを作成してください。
ユーザーから2つの数値を入力させ、2つ目の数値がゼロでない場合は割り算を行い、ゼロの場合はエラーメッセージを表示します。
この問題の要件
以下の要件に従ってコードを完成させてください。
- ユーザーに2つの数値を入力させ、それぞれ変数
num1
とnum2
に格納すること。 begin-rescue-end
構文を使用して、ゼロ除算エラーを処理すること。- ゼロで割った場合、
rescue
ブロック内で「ゼロで割ることはできません」というエラーメッセージを表示すること。 - 割り算が成功した場合、計算結果を「
num1
/num2
= 結果」という形式で表示すること。
ただし、以下のような実行結果となること。
----- ↓出力される結果の例↓ -----
最初の数値を入力してください: 10 二番目の数値を入力してください: 2 結果:10 / 2 = 5
最初の数値を入力してください: 10 二番目の数値を入力してください: 0 エラー:ゼロで割ることはできません。
----- ↑出力される結果の例↑ -----
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
1.ユーザーからの入力受付
1-1. puts
を使って最初の数値を入力させる
1-2. num1
という変数に最初の数値を格納
1-3. puts
を使って二番目の数値を入力させる
1-4. num2
という変数に二番目の数値を格納
2.例外処理を使った割り算
2-1. begin-rescue-end
構文の開始
2-1-1. num1
をnum2
で割り、その結果をresult
に格納
2-1-2. 割り算の結果を「num1
/ num2
= 結果」という形式で表示
2-2. rescue
ブロック内でゼロ除算エラーを捕捉
2-2-1. エラーメッセージ「ゼロで割ることはできません」を表示
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# 割り算プログラム # ユーザーに最初の数値を入力させる puts "最初の数値を入力してください:" num1 = gets.chomp.to_i # ユーザーに二番目の数値を入力させる puts "二番目の数値を入力してください:" num2 = gets.chomp.to_i begin =begin 【穴埋め問題1】 ここにnum1をnum2で割り、その結果を変数resultに代入し、結果を表示するコードを書いてください。 =end rescue ZeroDivisionError =begin 【穴埋め問題2】 ここにゼロで割った時のエラーメッセージを表示するコードを書いてください。 =end end
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
********************
# 割り算プログラム # ユーザーに最初の数値を入力させる puts "最初の数値を入力してください:" num1 = gets.chomp.to_i # ユーザーに二番目の数値を入力させる puts "二番目の数値を入力してください:" num2 = gets.chomp.to_i begin # 割り算を行う result = num1 / num2 puts "結果:#{num1} / #{num2} = #{result}" rescue ZeroDivisionError # ゼロで割った場合の例外処理 puts "エラー:ゼロで割ることはできません。" end
********************
コードの解説
このプログラムでは、ユーザーから2つの数値を入力してもらい、それらを使って割り算を行います。
もし2つ目の数値が0であった場合、通常のプログラムではエラーが発生して終了してしまいますが、このプログラムでは「例外処理」を使ってエラーが発生したときに適切に対処しています。
ユーザーからの入力部分
puts "最初の数値を入力してください:" num1 = gets.chomp.to_i puts "二番目の数値を入力してください:" num2 = gets.chomp.to_i
まず、puts
を使ってユーザーに数値を入力してもらいます。gets
で入力を受け取り、chomp
メソッドで改行を取り除きます。
その後、to_i
を使って文字列を整数に変換します。このようにして2つの数値をnum1
とnum2
という変数に格納します。
割り算と例外処理部分
begin result = num1 / num2 puts "結果:#{num1} / #{num2} = #{result}" rescue ZeroDivisionError puts "エラー:ゼロで割ることはできません。" end
ここで重要なのが、Rubyの「例外処理」です。begin-rescue-end
という構文を使って、割り算中にエラーが発生してもプログラムがクラッシュしないようにします。
begin
ブロック: この中には、エラーが発生する可能性のあるコードを書きます。この場合、num1 / num2
という割り算が行われます。num2
が0でない場合は割り算が正常に実行され、その結果がresult
に代入されます。puts
で結果を表示します。rescue
ブロック: もしnum2
が0の場合、ZeroDivisionError
というエラーが発生します。このエラーはrescue
ブロックで捕捉され、「ゼロで割ることはできません」というエラーメッセージを表示します。このようにして、エラーを適切に処理することでプログラムが異常終了することを防ぎます。
まとめ
例外処理は、プログラムの動作中に予期せぬエラーが発生した場合でも、プログラム全体がクラッシュするのを防ぐために使われます。
Rubyではbegin-rescue-end
を使って、特定のエラーが発生したときにどのように対処するかを定義できます。
<<前の問題 |
問題集Top |
次の問題>> |
この問題への質問・コメント
この問題を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。