解决 Ruby 中的 foobar?

Solving foobar in Ruby?

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

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

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

根据您的评论,循环部分在利用 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 到 运行 循环直到数字...:[=​​17=]

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"

就个人而言,我可能会写得有点不同,但我想这听起来足够了。

我可能会写一些乱七八糟的东西,因为我讨厌长长的 if...else 语句...:[=​​17=]

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

你也可以这样做:

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