如果我随机输入两个数字(第一个数字较小),我如何使用for-loop添加和之间的所有数字?
例如: 第一个数字:3
第二个数字:5
计算机应该给出答案' 12'
如何使用for-loop做到这一点?
答案 0 :(得分:3)
在Ruby中,我们很少使用for
循环,因为它会留下垃圾。相反,您可以使用inject
:
(3..5).inject(:+) # => 12
这是使用一些更深层的Ruby魔法(:+
),它是+
方法的符号,并传递给inject
。它是如何工作的是一个不同的问题,是你以后需要学习的东西。
不要坚持使用您用其他语言学习的特定结构用语言做某事。这通常会强制使用非惯用代码,并且会阻止您学习如何使用该语言,因为该语言的其他程序员会这样做。这会造成维护问题,并使您在工作场所不那么受欢迎。
答案 1 :(得分:2)
在您定义的范围内循环简单:
puts "Enter first number: "
first = gets.to_i
puts "Enter second number: "
second = gets.to_i
total = 0
for i in (first..second) do
total += i
end
puts total
请注意,如果您没有输入有效数字,它将转换为0.此外,这还假设第二个数字大于第一个数字。
答案 2 :(得分:2)
在Rails中,或者在带有ActiveSupport的普通Ruby中,你可以做一些比for循环更简单的事情,或者比其他人写的更简单。
(first_num..second_num).sum
这是Ruby中总结的简写:
sum = 0
(first_num..second_num).each { |num| sum += num }
答案 3 :(得分:2)
first, second = [3,5]
for x in (0..0) do
p (first + second)*(second - first + 1) / 2
end
答案 4 :(得分:1)
我知道你说for
循环,但为什么不使用Ruby给你的东西?
> a = 3
> b = 5
> a.upto(b).inject(0) {|m,o| m += o}
=> 12
如果你坚持for
循环......
> m = 0
=> 0
> for i in 3..5
* m += i
* end
=> 3..5
> m
=> 12
答案 5 :(得分:1)
从Ruby 2.4开始,你直接在Enumerable上调用SELECT CAST(
CASE WHEN EXISTS(
SELECT 1
FROM Customers
WHERE PostalCode%2 = 0
AND Country IN ('France', 'Germany')
) THEN 1 ELSE 0 END AS BIT)
。
例如sum
答案 6 :(得分:0)
在Ruby中,很少见到block in <top (required)>'
from C:/Program Files (x86)/Heroku/ruby-1.9.3/lib/ruby/gems/1.9.1/gems/test-kitchen-1.4.0/lib/kitchen/errors.rb:154:in
循环。在这种情况下,更惯用的方法是upto
:
<top (required)>'
from C:/Program Files (x86)/Heroku/ruby-1.9.3/bin/kitchen:23:in
另一种方法是使用reduce
:
for
......可以缩短到这个:
x = 3
y = 5
total = 0
x.upto(y) do |n|
total += n
end
puts total
# => 12