コード
picass.rb
require 'date'
class Array
def average
self.inject(:+) / self.length
end
end
christian_name = "パブロ・ディエゴ・ホセ・フランシスコ・デ・パウラ・ファン・ネポムセーノ・マリア・デ・ロス・レメディオス・クリスピン・クリスピアーノ・デ・ラ・サンティシマ・トリニダード・ルイス・イ・ピカソ"
num = 1
results = []
while num <= 10 do
puts "#{num}回目:ピカソのフルネームを入力してください"
started_at = Time.now
christian_name_input = gets
while christian_name_input.chomp != christian_name do
puts "#{num}回目:間違ってます!きちんとピカソのフルネームを入力してください!"
christian_name_input = gets
end
finished_at = Time.now
puts "#{(finished_at - started_at).round(2)}"
results.push((finished_at - started_at).round(2))
num+=1
end
puts "---結果------------------"
results.each_with_index do |result, i|
puts "#{i+1}回目:#{result}秒"
end
average = results.average
puts "平均入力時間:#{average.round(2)}秒"
puts ""
puts "あの世のパブロからのコメント"
if average > 20
puts "「ナニ サイゴマデ ヤッテンダヨ。 ヒマカヨ、、」"
elsif average <= 20 && average >= 10
puts "「アンタ ダイブキモチワルイネ、、」"
elsif average <= 10
puts "「コピペデショ?、、チガウノ?ヒエッ、、」"
else
puts "「ナニカガ オカシイ」"
end
puts "------------------------"
書いて学んだこと
既存のクラスを任意の場所で開いて、メソッドの追加や修正が自由に行えます。
オープンクラスといいます。
class Array
def average
self.inject(:+) / self.lengt
end
end
それから、Arrayクラスのinjectメソッドは、演算子をsymbolで渡すことができます。
こんな感じでスッキリ書けます。
self.inject(:+) #全部足す
getsでキーボードから入力した値には改行が入ってきますが、chompで消せる。
また、数字を入力しても数値ではなく文字列として入ってくるので注意。
picass_input = gets
while picass_input.chomp != picass_fullname do
puts "#{num}回目:間違ってます!きちんとピカソのフルネームを入力してください!"
picass_input = gets
end
何らかの日時を代入する変数名を、今まではfinish_timeみたいにしてたが、finished_atのようにした方がかっこいい。
あと標準出力用のメソッドは色々あります。
[参考]https://qiita.com/naoge/items/f5d84581d3a301a9c22f
finished_at = Time.now # finish_timeはダサい
puts "#{(finished_at - started_at).round(2)}"
switch文のwhen節の条件を範囲にしたい場合は、こんな感じで範囲オブジェクトが使える。
score = 65
case score
when 0..59
puts "C"
when 60..79
puts "B"
else
puts "A"
end # B
今回は小数が入ってくるので、仕方なく関係演算子を使った。
(59.01だとelseに入ってしまうので)
if average > 20
puts "「ナニ サイゴマデ ヤッテンダヨ。 ヒマカヨ、、」"
elsif average <= 20 && average >= 10
puts "「アンタ ダイブキモチワルイネ、、」"
elsif average <= 10
puts "「コピペデショ?、、チガウノ?ヒエッ、、」"
else
puts "「ナニカガ オカシイ」"
end