Rubyの初心者向け問題2-3: 商品の在庫管理プログラムを作ろう
この問題を解くために必要な知識:
【レベル1の知識】
コメントの書き方、変数と定数、基本データ型、四則演算と演算子、入力と出力、文字列操作、分岐処理(if、if~else、elsif、case)、繰り返し処理(for、while、until、each)、範囲(Range)、例外処理(begin-rescue-end)
【レベル2の知識】
配列(Array)、ハッシュ(Hash)、コレクション操作(配列、ハッシュの操作)、Enumerableモジュール
<<前の問題 | 問題集Top |
次の問題>> |
Ruby練習問題2-3: 商品の在庫管理プログラムを作ろう
商品ごとの在庫数をハッシュで管理し、在庫が0の商品を配列に格納するプログラムを作成しましょう。
このプログラムでは、各商品の在庫数を確認し、在庫がある場合はその数を表示し、在庫がない場合はリストに追加します。
各商品の在庫情報はハッシュとして以下のように与えられます。
inventory = { "りんご" => 5, "バナナ" => 0, "オレンジ" => 3, "ぶどう" => 0, "メロン" => 8 }
この問題の要件
以下の要件に従ってコードを完成させてください。
- 各商品の在庫数を管理するハッシュ
inventory
を定義すること。 - 在庫が0の商品を格納するための空の配列
out_of_stock_items
を定義すること。 each
メソッドを使って、inventory
ハッシュ内の商品を一つずつ確認し、在庫がある場合はその商品と在庫数を表示すること。- 在庫がない場合は、その商品を
out_of_stock_items
配列に追加すること。 - 最後に、在庫がない商品をリスト表示すること。
ただし、以下のような実行結果となること。
----- ↓出力される結果の例↓ -----
りんご: 在庫5個 オレンジ: 在庫3個 メロン: 在庫8個 在庫がない商品: バナナ, ぶどう
----- ↑出力される結果の例↑ -----
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
1.inventory
ハッシュの定義
1-1. 商品名と在庫数を格納したハッシュを作成
2.空の配列 out_of_stock_items
の定義
2-1. 在庫が0の商品を格納するための配列を作成
3.each
メソッドによるハッシュの繰り返し処理
3-1. inventory
ハッシュの各要素を繰り返し処理する
3-1-1. 在庫数が0かどうかを確認
3-1-1-1. 在庫が0の場合、商品を out_of_stock_items
配列に追加
3-1-1-2. 在庫がある場合、商品名と在庫数を表示
4.在庫がない商品の表示
4-1. out_of_stock_items
配列内の商品をカンマで区切って表示
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# 商品の在庫データ inventory = { "りんご" => 5, "バナナ" => 0, "オレンジ" => 3, "ぶどう" => 0, "メロン" => 8 } # 在庫が0の商品を格納するための配列 out_of_stock_items = [] # ハッシュ内の各商品をチェック inventory.each do |item, quantity| =begin 【穴埋め問題1】 ここに、在庫数が0かどうかを確認し、在庫が0の場合は配列に追加し、在庫がある場合は在庫数を表示するコードを書いてください。 =end end # 在庫が0の商品を表示 =begin 【穴埋め問題2】 ここに、在庫が0の商品を表示するコードを書いてください。 =end
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
********************
# 商品の在庫データ inventory = { "りんご" => 5, "バナナ" => 0, "オレンジ" => 3, "ぶどう" => 0, "メロン" => 8 } # 在庫が0の商品を格納するための配列 out_of_stock_items = [] # ハッシュ内の各商品をチェック inventory.each do |item, quantity| if quantity == 0 # 在庫が0の場合はリストに追加 out_of_stock_items << item else # 在庫がある場合は在庫数を表示 puts "#{item}: 在庫#{quantity}個" end end # 在庫が0の商品を表示 puts "在庫がない商品: #{out_of_stock_items.join(', ')}"
********************
コードの解説
このRubyコードは、商品の在庫を管理し、在庫がある商品と在庫がない商品を表示するプログラムです。
このプログラムを通じて、ハッシュ と 配列 の使い方を学びます。各ブロックの内容を詳しく解説していきます。
在庫データをハッシュで定義
inventory = { "りんご" => 5, "バナナ" => 0, "オレンジ" => 3, "ぶどう" => 0, "メロン" => 8 }
ここでは、商品名と在庫数をペアにしたハッシュ inventory
を定義しています。
ハッシュはキーと値のペアでデータを管理する便利なデータ構造です。この場合、キーが商品名、値がその商品の在庫数を表しています。
在庫が0の商品を格納する配列を定義
out_of_stock_items = []
在庫が0の商品を格納するための配列 out_of_stock_items
を作成しています。
配列は複数のデータを一括して管理するためのデータ構造です。
在庫を確認するループ処理
inventory.each do |item, quantity| if quantity == 0 out_of_stock_items << item else puts "#{item}: 在庫#{quantity}個" end end
ここでは、inventory
ハッシュの各要素を繰り返し処理するために each
メソッドを使っています。
each
メソッドは、ハッシュのキー(商品名)と値(在庫数)を一つずつ取り出して処理を行います。
if文: 商品の在庫数が0かどうかを確認し、0であれば out_of_stock_items
配列に追加します。0でなければ在庫があることを表示します。
在庫がない商品の表示
puts "在庫がない商品: #{out_of_stock_items.join(', ')}"
最後に、在庫がない商品を表示しています。
join
メソッドを使って、配列の要素をカンマで区切った文字列に変換し、商品をリスト形式で出力します。
まとめ
このプログラムでは、ハッシュ と 配列 を使って、商品の在庫管理を行いました。
ハッシュを使うことで、商品名と在庫数を効率的に管理でき、配列を使うことで在庫が0の商品をリストアップできます。
<<前の問題 |
問題集Top |
次の問題>> |
この問題への質問・コメント
この問題を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。