使用 for 循环将数字相加

Using for-loop to add numbers together

如果我随机输入两个数字(第一个数字较小),如何使用 for 循环将所有数字与它本身相加?

例如: 第一个数字:3

第二个数:5

计算机应该给出“12”的答案。

我如何使用 for 循环来做到这一点?

在您定义的范围内进行简单的 for 循环:

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。此外,这假定第二个数字大于第一个数字。

我知道你说 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

在 Rails 中,或者在带有 ActiveSupport 的普通 Ruby 中,您可以做一些比 for 循环或其他人写的更简单的事情。

(first_num..second_num).sum

这是 shorthand Ruby 中的总和:

sum = 0
(first_num..second_num).each { |num| sum += num }

在 Ruby 中很少看到 for 循环。在这种情况下,更惯用的方法是 upto:

x = 3
y = 5
total = 0

x.upto(y) do |n|
  total += n
end

puts total
# => 12

另一种方法是使用 reduce:

total = x.upto(y).reduce do |sum, n|
  sum += n
end

...可以缩短为:

total = x.upto(y).reduce(&:+)
first, second = [3,5]
for x in (0..0) do
  p (first + second)*(second - first + 1) / 2
end

在 Ruby 中,我们 很少 使用 for 循环,因为它会留下垃圾。相反,您可以使用 inject:

非常简单地做您想做的事
(3..5).inject(:+) # => 12

这是使用了一些更深层次的 Ruby 魔法 (:+),它是 + 方法的符号,并被传递到 inject。它是如何工作的是一个不同的问题,是你以后需要学习的东西。

不要坚持使用你在另一种语言中学到的特定结构来用一种语言做某事。这通常会强制使用非惯用代码,并使您无法像使用该语言的其他程序员那样学习如何做。这会造成维护问题,并使您在工作场所不太受欢迎。

从 Ruby 2.4 开始,您可以直接在 Enumerable 上调用 sum

例如[1, 2, 3].sum #=> 6