在Ruby中解决foobar?

时间:2015-10-04 01:21:04

标签: ruby math testing functional-programming division

到目前为止,我已经能够正确打印数字,但我不知道如何循环它们。

puts "Please enter a number"
val1 = gets.to_i
val2 = val1 % 3
val3 = val1 % 5


def ordinal(a,b,c)
    if b == 0 && c == 0
        return "foobar"
    elsif    b == 0
        return "foo"
    elsif c == 0
       return "bar"
    else
        return a
    end
end

val5 = ordinal(val1,val2,val3)
puts "#{val5}"

我还制作了一个有效的循环,但它无法识别字符串。

n = 0
x = gets.to_i
while n != x
  puts "#{n}"
  n = n + 1
end

如何组合我的方法和循环?或者还有其他方法可以解决这个问题吗?但我更愿意,如果你使用我的代码解决它,如果它有任何好的过程,以便我能更好地理解它。

2 个答案:

答案 0 :(得分:2)

与评论一样,在利用Integer#times时,循环部分很容易。

这就是你的选择:

puts "Please enter a number"
val1 = gets.to_i
val2 = val1 % 3
val3 = val1 % 5
def ordinal(a,b,c)
    if b == 0 && c == 0
      return "footer"
    elsif b == 0
      return "foo"
    elsif c == 0
      return "bar"
    else
      return a
    end
end
val5 = ordinal(val1,val2,val3)
puts "#{val5}"

现在你正在查看最终号码。尝试使用Integer#times运行循环到数字...:

puts "Please enter a number"
num = gets.to_i
num.times do |a|
    a += 1 # counting is done from 0 to n-1
    b = a % 3
    c = a % 5
    if b == 0 && c == 0
      print "foobar "
    elsif b == 0
      print "foo "
    elsif c == 0
      print "bar "
    else
      print "#{a} "
    end
end
print "\n"

就我个人而言,我可能会稍微改写一下,但我觉得这听起来不够。

我可能会写一些杂乱的东西,因为我讨厌很长时间......其他陈述......:

def foo_bar n
   n.times {|i| i+=1; print( (i%15==0 && "FooBar ") || (i%3==0 && "Foo ") || (i%5 ==0 && "Bar ") || ("#{i} ") ) }
   print "\n"
end
puts "Enter number:"
foo_bar gets.to_i

答案 1 :(得分:0)

您也可以这样做:

def foobar n
   n.times do |i|
      i += 1
      num = ""
      num << "Foo" if i % 3 == 0
      num << "Bar" if i % 5 == 0
      num = i.to_s if num == ""
      puts num
   end
end
foobar 15

逻辑比Myst简单 您不需要测试它是否为15 输出:

1  
2  
Foo  
4  
Bar  
Foo  
7  
8  
Foo  
Bar  
11  
Foo  
13  
14  
FooBar  
=> 15