Ruby if块逻辑返回意外结果

时间:2013-09-05 01:47:03

标签: ruby if-statement

我正在进行一个Ruby练习,取一个数字并返回等价​​的单词。下面是我正在处理的带有if语句的函数的代码。我用不同的字符串来帮助我追踪我的错误。

前三个条件似乎按照我的意图运作。然而,尽管不符合我传递的数字的条件,但是返回'使青少年翻译工作'的条件在某种程度上是正确的。

我已经包含了一些我去过的数字来说明我的意思。我的意图是,如果数字大于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

2 个答案:

答案 0 :(得分: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整除?

答案 1 :(得分: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

OR

@number != 12

OR

@number != 13

OR

@number != 15

检查41是否为第一个条件,它将为false。但是,只要它检查第二个条件47!= 12就是真的。所以,它会显示青少年翻译。