-4

私はRubyの演習で数字を取り、同等の単語を返すことに取り組んでいます。以下は、私が取り組んでいる if ステートメントを含む関数のコードです。エラーの場所を追跡できるように、さまざまな文字列を配置しました。

最初の 3 つの条件は、意図したとおりに機能しているようです。ただし、「puts The teens translator works」を返す条件は、渡した数値の条件を満たしていないにもかかわらず、どういうわけか真です。

私が言いたいことを説明するために、私が渡してきた数字のいくつかを含めました。私の意図は、数値が 13 より大きいが 20 未満であり、10 で割り切れず、11、12、13、または 15 でない場合に条件が真になることです。たとえば、41 を渡すと、条件は次のようになります。 「The teens translator works」が出力されるため、true です。シンプルなものが欠けているような気がします。

よろしくお願いします。

def in_english
    if @number == 11 || @number == 12 || @number == 13 || @number == 15
        puts "The number is 11, 12, 13 or 15"
    elsif (@number >0 && @number < 10)
        puts "Hello I made it hear"
    elsif (@number >= 10 && @number < 100 && @number%10 == 0)
        puts "The number is greater than equal 10 & < 100 and divisible by 10"
    elsif ((@number > 13 && @number < 20 ) && @number%10 != 0 && @number != 11 ||    @number != 12 || @number != 13 || @number != 15)
        puts "The teens translator works"
    elsif (@number > 20)
        puts "Over twenty_trans"
    else
        puts "End of if block"
    end
end

Say.new(47).in_english
Say.new(41).in_english
Say.new(52).in_english
4

2 に答える 2

0

まず、数が 13 を超え 20 未満の場合、とにかく 11、12、13 にすることはできません (既に 13 を超えています)。したがって、チェックする必要はありません。

2番目の問題は括弧です。

これ:

((@number > 13 && @number < 20 ) && @number%10 != 0 && @number != 11 ||    @number != 12 || @number != 13 || @number != 15)

次の方法で評価されます。

(@number > 13 && @number < 20 ) && @number%10 != 0 && @number != 11

また

@number != 12

また

@number != 13

また

@number != 15

最初の条件として 41 をチェックし、false になります。ただし、2 番目の条件 47 != 12 をチェックするとすぐに true になります。そのため、10 代の翻訳者が表示されます。

于 2013-09-05T01:56:07.000 に答える