問題
以下の仕様を満たすアプリケーションを作成しましょう。また、注意書きを確認し、雛形を使用して実装してください。
仕様
・実行すると [1] : 点数を登録する, [2] : 点数を確認する, [3] : 終了する という選択肢を表示し、ユーザーに入力を求め、その入力に従い以下のような各処理を行う
・アプリケーションを終了するまで、処理を繰り返す
[1]の処理
・名前、年齢、国語・数学・英語の3教科の点数を入力させて、保存する
[2]の処理
・投稿された情報から番号と名前で一覧を表示し(例 1: yamada)、見たい個人の番号の入力を求める
・ 入力された個人の名前、年齢、国語・数学・英語の3教科の点数を表示する
[3]の処理
・アプリケーションを終了する
注意
・ 引数などは雛形で考慮していないため、必要に応じて引数を設定すること
def registration_student
# 生徒の名前と年齢を登録できるようにする
student = {}
puts '生徒名を入力してください'
puts '生徒の年齢を入力してください'
# 登録した生徒の国語、数学、英語の点数を登録できるようにする
puts "国語の得点は?"
puts "数学の得点は?"
puts "英語の得点は?"
end
def show_student_name
# 登録された生徒の名前を番号を振って表示する
puts '見たい生徒の番号を入力してください'
# 選択された生徒の名前、年齢、国語、数学、英語の点数を表示できるようにする
puts "名前:"
puts "年齢:"
puts "国語:"
puts "数学:"
puts "英語:"
end
students = []
while true
puts '行いたい項目を選択してください'
puts '[1]点数を登録する'
puts '[2]点数を確認する'
puts '[3]終了する'
input = gets.to_i
if input == 1
registration_student
elsif input == 2
show_student_name
elsif input == 3
exit
else
puts '無効な値です'
end
end
ヒント
registration_student メソッド
このメソッドで処理したい内容は下記の通りです。
・student というハッシュを定義する
・生徒名/生徒の年齢と国語/数学/英語を入力させ、student というハッシュに代入する
・students という配列に、先ほど定義した student というハッシュを追加する
必要な知識
・gets と chomp
・to_i
・ハッシュ
・配列と配列演算子(<<)
show_student_name メソッド
このメソッドで処理したい内容は下記の通りです。
・registration_student で追加した配列の中身を一覧表示する
・配列の要素であるハッシュの値を一覧表示させるために、要素番号を入力するように促し、対応する要素を取得する
・入力した要素番号のハッシュの値を一覧で表示する
必要な知識
・eachメソッド
私の回答
def registration_student
# 生徒の名前と年齢を登録できるようにする
student = {}
puts '生徒名を入力してください'
student[:name] = gets.chomp
puts '生徒の年齢を入力してください'
student[:age] = gets.chomp
# 登録した生徒の国語、数学、英語の点数を登録できるようにする
puts "国語の得点は?"
student[:japanese] = gets.to_i
puts "数学の得点は?"
student[:math] = gets.to_i
puts "英語の得点は?"
student[:english] = gets.to_i
students << student
end
def show_student_name #↓時間制限で回答できず!!
# 登録された生徒の名前を番号を振って表示する
puts '見たい生徒の番号を入力してください'
# 選択された生徒の名前、年齢、国語、数学、英語の点数を表示できるようにする
puts "名前:"
puts "年齢:"
puts "国語:"
puts "数学:"
puts "英語:"
end
students = []
while true
puts '行いたい項目を選択してください'
puts '[1]点数を登録する'
puts '[2]点数を確認する'
puts '[3]終了する'
input = gets.to_i
if input == 1
registration_student(students)
elsif input == 2
show_student_name(students)
elsif input == 3
exit
else
puts '無効な値です'
end
end
解説
gets.chompとgets.to_iを使い、空のハッシュに各項目を代入。
最後に入力されたハッシュ内項目を配列に代入。
一覧表示の処理の記述は時間制限のため回答できず。
模範回答
def registration_student(students)
# 生徒の名前と年齢を登録できるようにする
student = {}
puts '生徒名を入力してください'
student[:name] = gets.chomp
puts '生徒の年齢を入力してください'
student[:age] = gets.chomp
# 登録した生徒の国語、数学、英語の点数を登録できるようにする
puts "国語の得点は?"
student[:japanese] = gets.to_i
puts "数学の得点は?"
student[:math] = gets.to_i
puts "英語の得点は?"
student[:english] = gets.to_i
students << student
end
def show_student_name(students)
# 登録された生徒の名前を番号を振って表示する
i = 0
students.each do |student|
puts "#{i}: #{student[:name]}"
i += 1
end
puts '見たい生徒の番号を入力してください'
num = gets.to_i
student = students[num]
# 選択された生徒の名前、年齢、国語、数学、英語の点数を表示できるようにする
puts "名前: #{student[:name]}"
puts "年齢: #{student[:age]}"
puts "国語: #{student[:japanese]}"
puts "数学: #{student[:math]}"
puts "英語: #{student[:english]}"
end
students = []
while true
puts '行いたい項目を選択してください'
puts '[1]点数を登録する'
puts '[2]点数を確認する'
puts '[3]終了する'
input = gets.to_i
if input == 1
registration_student(students)
elsif input == 2
show_student_name(students)
elsif input == 3
exit
else
puts '無効な値です'
end
end
模範解説
それぞれを各パートに分けて解説します。
メソッド外の処理
students = []
while true
puts '行いたい項目を選択してください'
puts '[1]点数を登録する'
puts '[2]点数を確認する'
puts '[3]終了する'
input = gets.to_i
if input == 1
registration_student(students)
elsif input == 2
show_student_name(students)
elsif input == 3
exit
else
puts '無効な値です'
end
end
このコードで処理したい内容は下記の通りです。
・students という配列を定義する
・メニューを表示し、入力待ちにさせる
・入力した数値に対応するメソッドを実行する
・以上のメニュー画面の表示を繰り返す
registration_student メソッド
def registration_student(students)
# 生徒の名前と年齢を登録できるようにする
student = {}
puts '生徒名を入力してください'
student[:name] = gets.chomp
puts '生徒の年齢を入力してください'
student[:age] = gets.chomp
# 登録した生徒の国語、数学、英語の点数を登録できるようにする
puts "国語の得点は?"
student[:japanese] = gets.to_i
puts "数学の得点は?"
student[:math] = gets.to_i
puts "英語の得点は?"
student[:english] = gets.to_i
students << student
end
このメソッドで処理したい内容は下記の通りです。
・student というハッシュを定義する(3行目)
・生徒名/生徒の年齢と国語/数学/英語の点数を入力させ、student というハッシュに代入する(5~15行目)
・students という配列に、先ほど定義した student というハッシュを追加する(16行目)
show_student_name メソッド
def show_student_name(students)
# 登録された生徒の名前を番号を振って表示する
i = 0
students.each do |student|
puts "#{i}: #{student[:name]}"
i += 1
end
puts '見たい生徒の番号を入力してください'
num = gets.to_i
student = students[num]
# 選択された生徒の名前、年齢、国語、数学、英語の点数を表示できるようにする
puts "名前: #{student[:name]}"
puts "年齢: #{student[:age]}"
puts "国語: #{student[:japanese]}"
puts "数学: #{student[:math]}"
puts "英語: #{student[:english]}"
end
このメソッドで処理したい内容は下記の通りです。
・配列の情報のうち、登録されている生徒名を番号を添えて一覧表示する(3~7行目)
・配列の要素であるハッシュの値を一覧表示させるために、要素番号を入力するように促し、 対応する要素を取得する(8~11行目)
・指定された要素に含まれる各値を表示する (13~17行目)
感じたこと
1つ1つ順序を追いながら記述すればそれなりにはなりそうだが、
時間がかかりすぎる。基本的なメソッドの使い方は覚えたほうが良いと感じた。
またハッシュと配列を使った処理はRubyにおいてとても重要項目だと思うので、
復習しルールや決まりを覚え上手く使用できるよう精進していきたい。
アドバイスやご指摘等ございましたらぜひお願いします!!
以上