-4

我正在做一个 Ruby 练习,取一个数字并返回等效的单词。下面是我正在处理的带有 if 语句的函数的代码。我放置了不同的字符串来帮助我追踪我的错误在哪里。

前三个条件似乎按照我的意图发挥作用。然而,返回“puts The teens translate works”的条件在某种程度上是正确的,尽管它不符合我传入的数字的条件。

我已经包含了一些我一直传递的数字来说明我的意思。我的意图是如果数字大于 13 但小于 20,不能被 10 整除,也不能被 11、12、13 或 15 整除,则条件为真。例如,如果我传入 41,则条件似乎是正确,因为“青少年翻译工作”打印。我觉得我错过了一些简单的东西。

在此先感谢您的帮助!

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

5

而不是这个:

if @number == 11 || @number == 12 || @number == 13 || @number == 15

...你可以这样写:

if [11, 12, 13, 15].include? @number

而且,而不是这种混乱:

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

...你可以这样写:

elsif [14, 16, 17, 18, 19].include? @number

...或这个:

elsif @number == 14 or (16..19).include? @number

我的意图是如果数字大于 13 但小于 20,不能被 10 整除,则条件为真,

13 到 20 之间的哪些数可以被 10 整除?

于 2013-09-05T01:57:56.200 回答
0

首先,如果数字大于 13 小于 20,那么无论如何也不可能是 11、12 和 13(已经超过 13)。所以,你不必检查。

第二个问题是括号。

这:

((@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 的第一个条件,它将为假。但是,一旦它检查第二个条件 47 != 12 为真。因此,它将显示青少年翻译。

于 2013-09-05T01:56:07.000 回答