我正在开展Ruby挑战工作,我无法创建一个工作方法。我尝试的每一种方法都会不断返回" nil"。
以下是问题:
创建一个将整数参数传递给单个参数的方法。如果整数大于0,则将整数中的数字打印为0.如果数字小于0,则只需打印整数。使用for循环,while循环或除非循环打印整数到0的数字范围。
例如:
sample(4) output = 3, 2, 1 sample(-1) output = -1
以下是我尝试使用的代码
def countdown(n)
loop do
n -= 1
print "#{n}"
break if n <= 0
end
countdown(4)
答案 0 :(得分:1)
没有必要print
在函数内部以及它之外 - 这将导致重复打印。此外,您在正数上调用print
,但如果它们为负数或零,则不会调用print
。此外,您使用的print "#{n}"
与print n
相同。
就问题的标题而言 - “不断返回零” - 您可以稍微改变一下方法,以便在函数外进行print
次调用。
def countdown(n)
n <= 1 ? [n] : (n-1).downto(1).to_a
end
print countdown(n).join(", ")
答案 1 :(得分:1)
方法返回最后执行的语句的结果。你的循环返回nil:
def countdown(n)
x = loop do
n -= 1
puts "#{n}"
break if n <= 0
end
x
end
countdown(4)
3
2
1
0
=> nil
现在让我们回复一下:
def countdown(n)
loop do
puts "#{n}"
break if n <= 0
n -= 1
end
"okay we're done"
end
countdown(4)
4
3
2
1
0
=> "okay we're done"
答案 2 :(得分:1)
试试这个:
def countdown(n)
n.downto(n > 0 ? 0 : n) { |i| puts i }
end
countdown(4)
# 4
# 3
# 2
# 1
# 0
countdown(-4)
# -4
countdown(0)
# 0
如果参数为零,你没有提到要做什么。我认为它被视为正数或负数。
不可否认,这是作弊,因为它没有&#34;使用for循环,while循环,或者除非循环...&#34;,但Ruby主要用于使用迭代器和块。这或类似的东西是要走的路。我只是想一想:把它作为一个建议,而不是一个要求。
顺便说一下,在循环中,没有提到Kernel#loop,这很奇怪,因为它非常有用。至于&#34; for循环&#34;谁使用它们?我从来没有,甚至没有。
如果必须使用循环,则可以执行以下操作。
def countdown(n)
while n > 0
puts n
n-= 1
end
puts n
end
countdown(4)
# 4
# 3
# 2
# 1
# 0
countdown(-4)
# -4
countdown(0)
# 0
答案 3 :(得分:0)
你可以试试这个......
def sample (a)
if a > 0
(1..a).to_a.reverse
else
a
end
end
希望这对你有用