Rubyの初心者向け問題2-☆1:ショッピングカートプログラムを作ろう
この問題を解くために必要な知識:
【レベル1の知識】
コメントの書き方、変数と定数、基本データ型、四則演算と演算子、入力と出力、文字列操作、分岐処理(if、if~else、elsif、case)、繰り返し処理(for、while、until、each)、範囲(Range)、例外処理(begin-rescue-end)
【レベル2の知識】
配列(Array)、ハッシュ(Hash)、コレクション操作(配列、ハッシュの操作)、Enumerableモジュール
<<前の問題 | 問題集Top |
次の問題>> |
Ruby練習問題2-☆1:ショッピングカートプログラムを作ろう
ユーザーが商品を選び、その数量を入力することで合計金額を計算するプログラムを作成しましょう。
ユーザーが「終了」と入力するまで商品を追加できます。入力された商品が存在しない場合は、その旨を表示してください。
この問題の要件
以下の要件に従ってコードを完成させてください。
prices
ハッシュに「りんご」「バナナ」「オレンジ」の各商品の価格を定義すること。- ユーザーが商品名を入力し、入力が「終了」でない場合は数量を入力させること。
- 入力された商品が
prices
ハッシュに存在するかを確認し、存在する場合は数量を掛けた合計金額を計算すること。 - 存在しない場合は「その商品は存在しません」と表示すること。
- 入力が「終了」であればループを終了し、最終的な合計金額を表示すること。
ただし、以下のような実行結果となること。
----- ↓出力される結果の例↓ -----
商品名を入力してください(終了するには「終了」と入力): りんご 数量を入力してください: 2 商品名を入力してください(終了するには「終了」と入力): バナナ 数量を入力してください: 3 商品名を入力してください(終了するには「終了」と入力): 終了 合計金額は350円です。
----- ↑出力される結果の例↑ -----
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
1.prices
ハッシュの定義
1-1. 商品名と価格を格納したハッシュを作成
2.合計金額を初期化
2-1. 合計金額を 0
に初期化する
3.loop
メソッドによる無限ループの開始
3-1. ユーザーが「終了」と入力するまでループを繰り返す
3-1-1. 商品名の入力をユーザーに求める
3-1-2. 商品名が「終了」であればループを終了
3-1-3. 商品が prices
ハッシュに存在するか確認
3-1-3-1. 商品が存在すれば数量を入力し、部分合計を計算して合計金額に追加
3-1-3-2. 商品が存在しない場合、エラーメッセージを表示
4.合計金額の表示
4-1. ループ終了後に最終的な合計金額を表示
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# 商品の価格データ prices = { "りんご" => 100, "バナナ" => 50, "オレンジ" => 80 } # 合計金額を初期化 total = 0 # 無限ループを開始 loop do # ユーザーから商品名を入力 print "商品名を入力してください(終了するには「終了」と入力): " =begin 【穴埋め問題1】 ここにgetsメソッドを使ってユーザーから商品名を入力するコードを書いてください。 =end # 入力が「終了」ならループを終了 if item == "終了" break end # 商品が価格データに存在するか確認 if prices.key?(item) # ユーザーから数量を入力 print "数量を入力してください: " =begin 【穴埋め問題2】 ここにgetsメソッドを使ってユーザーから数量を入力するコードを書いてください。 =end # 部分合計を計算し、合計金額に追加 total += prices[item] * quantity else puts "その商品は存在しません。" end end # 最終的な合計金額を表示 puts "合計金額は#{total}円です。"
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
********************
# 商品の価格データ prices = { "りんご" => 100, "バナナ" => 50, "オレンジ" => 80 } # 合計金額を初期化 total = 0 # 無限ループを開始 loop do # ユーザーから商品名を入力 print "商品名を入力してください(終了するには「終了」と入力): " item = gets.chomp # 入力が「終了」ならループを終了 if item == "終了" break end # 商品が価格データに存在するか確認 if prices.key?(item) # ユーザーから数量を入力 print "数量を入力してください: " quantity = gets.to_i # 部分合計を計算し、合計金額に追加 total += prices[item] * quantity else puts "その商品は存在しません。" end end # 最終的な合計金額を表示 puts "合計金額は#{total}円です。"
********************
コードの解説
このRubyコードは、ユーザーが商品を選んでその数量を入力すると、合計金額を計算して表示するプログラムです。
コードの各部分を分解し、どのように動作するのかを詳しく説明します。
商品データの定義
prices = { "りんご" => 100, "バナナ" => 50, "オレンジ" => 80 }
ここでは、prices
というハッシュを定義しています。
ハッシュは、キーと値のペアを管理するデータ構造で、この場合、キーは商品名、値はその商品の価格です。
合計金額の初期化
total = 0
total
変数は合計金額を保持するためのものです。最初は0に初期化され、後で購入した商品の価格がここに加算されていきます。
無限ループの開始
loop do
loop
メソッドは、終了条件が満たされるまでコードを繰り返し実行するための無限ループを作成します。
ユーザーが「終了」と入力するまでこのループが繰り返されます。
商品名の入力と処理
print "商品名を入力してください(終了するには「終了」と入力): " item = gets.chomp
print
メソッドでユーザーに商品名の入力を求め、gets.chomp
で入力を取得します。
chomp
メソッドは、入力された文字列の末尾にある改行を取り除きます。
ループの終了条件
if item == "終了" break end
ユーザーが「終了」と入力した場合、break
文によってループが終了します。
商品の存在確認
if prices.key?(item)
prices.key?(item)
は、ユーザーが入力した商品がハッシュ prices
に存在するかを確認します。存在する場合、次の処理に進みます。
数量の入力と計算
print "数量を入力してください: " quantity = gets.to_i total += prices[item] * quantity
gets.to_i
で数量を整数として取得し、total
にその商品の価格と数量を掛けた値を加算しています。これによって、商品ごとの部分合計が計算されます。
存在しない商品の処理
else puts "その商品は存在しません。"
もしユーザーが入力した商品が prices
ハッシュに存在しなければ、このエラーメッセージが表示されます。
合計金額の表示
puts "合計金額は#{total}円です。"
ループが終了した後、puts
メソッドを使って最終的な合計金額を表示します。
まとめ
このプログラムでは、ハッシュを使って商品とその価格を管理し、ユーザーの入力に基づいて合計金額を計算しています。
無限ループや条件分岐、ハッシュの使い方を学ぶのに最適な例です。
<<前の問題 |
問題集Top |
次の問題>> |
この問題への質問・コメント
この問題を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。