2016-05-21 2 views
0
puts "Enter a number" 
i = gets.chomp.to_i 

def ordinal(n) 
    last_number = n % 10 
    special_case = n.to_s 

    if special_case.include?("11") || special_case.include?("12") || special_case.include?("13") 
     return "th" 
    elseif last_number == 1 
     return "st" 
    elseif last_number == 2 
     return "nd" 
    elseif last_number == 3 
     return "rd" 
    else 
     return "th" 
    end 
end 

puts "That's the #{i}#{ordinal(i)} item!" 

各回答が"th"を返す理由を理解できません。どんな助けもありがとう。序数を変換して表示しようとしています

+1

'elseif' - >は'ファンタスティック – cremno

+0

をelsif' - ありがとうございました! – ballgame168

答えて

0

elseifではなくelseifです。あるケースでは文字列と比較し、もう一方の場合は数字で比較します。比較を行うために文字列に変換する必要はありません。

あなたの方法は、結果が正しい場合、私は知らないでしょう

def ordinal(n) 
    last_number = n % 10 
    if [11,12,13].include?last_number 
     return "th" 
    elsif last_number == 1 
     return "st" 
    elsif last_number == 2 
     return "nd" 
    elsif last_number == 3 
     return "rd" 
    else 
     return "th" 
    end 
end 

のようなものである必要があり、英語は私の母親の言語ではありません。

+0

それを指摘してくれてありがとう!コードを単純化するだけの方法ですか? – ballgame168

+0

「母親」または「母親」のいずれかである必要がありますが、後者は関連性がないようです。 :-) –

+0

@ ballgame168シンプル=短い=ミスのための変更が少ない=より多くのreadble =より良いプログラム=より速い=よりメンテナンス可能 – peter

0

elseifelsifに置き換えて、n = 21131とします。その後、

special_case = n.to_s 
    #=> "21131" 
special_case.include?("11") 
    #=> true 

あなたが望むものではありません。例えば、"23cats".to_i #=> 23、ので

def ordinal(n) 
    return "th" if (11..13).include? n%100 
    case n%10 
    when 1 then "st" 
    when 2 then "nd" 
    when 3 then "rd" 
    else  "th" 
    end 
end 

puts "Enter a number" 
n = gets.to_i 

chompが必要とされていません。

は、次のようにあなたの方法を書いて考えてみましょう。

n = 211 
That's the 211th item! 

n = 282 
puts "That's the #{n}#{ordinal(n)} item!" 
That's the 282nd item! 

n = 24733 
puts "That's the #{n}#{ordinal(n)} item!" 
That's the 24733rd item! 

問題があります。これらの最後の例は、「それは14000,7703アイテムです!」とする必要があります。この文字列を返すようにメソッドを変更することはできますが、これは問題の範囲を超えています。

0

caseステートメントを使用すると同じ結果が得られます。

puts "Enter a number" 
i = gets.chomp.to_i 

def ordinal(n) 
    last_number = n % 10 
    case 
    when last_number == 1 && n != 11 then return "st" 
    when last_number == 2 && n != 12 then return "nd" 
    when last_number == 3 && n != 13 then return "rd" 
    else return "th" 
    end 
end 

puts "That's the #{i}#{ordinal(i)} item!" 

・ホープ、このことができます:)

関連する問題