お題
- 「Ruby基礎問題100本ノック#4 摂氏温度を華氏温度に変換する」とは逆に、華氏を摂氏に変換するメソッド
fahr_to_cels
を定義せよ - 摂氏1度から摂氏100度まで1度きざみに華氏温度との対応を出力すること
回答
def fahr_to_cels(fahr) (fahr - 32) / 1.8 end 1.upto(100) do |i| puts "華氏:#{i}度 → 摂氏:#{fahr_to_cels(i).floor(1).to_f}度" end
結果
華氏:1度 → 摂氏:-17.3度 華氏:2度 → 摂氏:-16.7度 華氏:3度 → 摂氏:-16.2度 〜〜〜
(華氏100度まで出力すると画面が足りないので省略)
解説
摂氏は次の公式で求められる。
摂氏 = (華氏 - 32) ÷ 1.8
よって、こうなる。
def fahr_to_cels(fahr) (fahr - 32) / 1.8 end
引数に華氏温度を渡し、計算する。
次に、繰り返しの処理を記述する。from.upto(to) { |i| 〜 }
で、fromからtoに達するまでiに1ずつ加算しながら繰り返す。
1.upto(100) do |i| puts "華氏:#{i}度 → 摂氏:#{fahr_to_cels(i).floor(1).to_f}度" end
数が決まった繰り返しというと、.times
が思い浮かんだ。
100.times do |i| puts "華氏:#{i}度 → 摂氏:#{fahr_to_cels(i).floor(1).to_f}度" end
ただしこれだと、100回は繰り返すのだが、「0から99度」の表示になる。
また、#{fahr_to_cels(i).floor(1).to_f}
で、.floor(1).to_f
をつけずに実行すると、小数点が表示される。
華氏:85度 → 摂氏:29.444444444444443度
これは邪魔くさい。なのでFloatクラスのfloorメソッドを使い、小数点第一位まで表示させることにした。
華氏:85度 → 摂氏:29.4度
反省
「決まった数字を繰り返す」と聞いてtimes
メソッドが最初に思い浮かんだが、表記が「0〜99」になるのは予想していなかった。知らないことがまだまだたくさんある。
小数点を指定できる方法を知れてよかった。