我正在进行一个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
答案 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就是真的。所以,它会显示青少年翻译。