到目前为止,我已经能够正确打印数字,但我不知道如何循环它们。
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
如何组合我的方法和循环?或者还有其他方法可以解决这个问题吗?但我更愿意,如果你使用我的代码解决它,如果它有任何好的过程,以便我能更好地理解它。
答案 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