Just do IT

思うは招く

Ruby基礎問題100本ノック#8 華氏を摂氏に変換し、1度から100度まで温度を出力

お題

回答

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」になるのは予想していなかった。知らないことがまだまだたくさんある。

小数点を指定できる方法を知れてよかった。