解决 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
到目前为止,我已经能够正确打印数字,但我不知道如何循环显示它们。
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