如何在 ruby 中创建可整除的方法
how to create a divisible by method in ruby
我目前正在学习 ruby,非常感谢您的帮助。
我正在尝试在我的终端中显示以下结果:
1
2
3 i am divisible by 3
4
5 i am divisible by 5
6 i am divisible by 3
7
8
9 i am divisible by 3
10 i am divisible by 5
11
12 i am divisible by 3
13
14
15 i am divisible by 3 and 5
16
17
18 i am divisible by 3
19
20 i am divisible by 5
我不确定该怎么做。我在 divisible.rb:
中写了下面的代码
def count
numbers = (1..20)
numbers.each do |number|
if number % 1 == 1
puts "#{number}"
elsif number % 3 == 0
puts "#{number} i am divisible by 3"
elsif number % 5 == 0
puts "#{number} i am divisible by 5"
elsif number % 3 == 0 && number % 5 == 0
puts "#{number} i am divisible by 3 & 5"
end
end
end
但它在终端中输出以下内容:
irb(main):001:0> count
3 i am divisible by 3
5 i am divisible by 5
6 i am divisible by 3
9 i am divisible by 3
10 i am divisible by 5
12 i am divisible by 3
15 i am divisible by 3
18 i am divisible by 3
20 i am divisible by 5
=> 1..20
请教我正确的道路
有 3 个步骤可以修复它
- 删除第一个 if 语句,
- 您应该将此移动:
elsif number % 3 == 0 && number % 5 == 0
到第 1 步
- 添加
else puts number
它应该看起来像:
def count
numbers = (1..20)
numbers.each do |number|
if number % 3 == 0 && number % 5 == 0
puts "#{number} i am divisible by 3 & 5"
elsif number % 3 == 0
puts "#{number} i am divisible by 3"
elsif number % 5 == 0
puts "#{number} i am divisible by 5"
else
puts number
end
end
end
UPD
让我们对这些步骤进行解释:
第一步和第三步:
除以 1 结果总是 return 0,所以第一个原因是逻辑错误,第二个原因是现在我们知道它总是 0 我们不需要再检查一次。
第二步:
例如,当我们检查 3
和 elsif number % 3 == 0
时,它将 return 为真,因此不会检查下一个 if 语句,要修复它,我们应该首先添加对 number % 3 == 0 && number % 5 == 0
的检查
感谢@3limin4t0r,你是对的,解释总是更好。
只是为了好玩,您可以使用标准库中的 Prime class,这样:
require 'prime'
(0..30).each do |number|
if [0, 1].include? number
puts number
next
end
if Prime.prime?(number)
puts "#{number} is prime"
else
divisors = Prime.prime_division(number).map(&:first)
puts "#{number} is divisible by " + divisors.join(" and ") if divisors.size > 1
end
end
我目前正在学习 ruby,非常感谢您的帮助。
我正在尝试在我的终端中显示以下结果:
1
2
3 i am divisible by 3
4
5 i am divisible by 5
6 i am divisible by 3
7
8
9 i am divisible by 3
10 i am divisible by 5
11
12 i am divisible by 3
13
14
15 i am divisible by 3 and 5
16
17
18 i am divisible by 3
19
20 i am divisible by 5
我不确定该怎么做。我在 divisible.rb:
中写了下面的代码def count
numbers = (1..20)
numbers.each do |number|
if number % 1 == 1
puts "#{number}"
elsif number % 3 == 0
puts "#{number} i am divisible by 3"
elsif number % 5 == 0
puts "#{number} i am divisible by 5"
elsif number % 3 == 0 && number % 5 == 0
puts "#{number} i am divisible by 3 & 5"
end
end
end
但它在终端中输出以下内容:
irb(main):001:0> count
3 i am divisible by 3
5 i am divisible by 5
6 i am divisible by 3
9 i am divisible by 3
10 i am divisible by 5
12 i am divisible by 3
15 i am divisible by 3
18 i am divisible by 3
20 i am divisible by 5
=> 1..20
请教我正确的道路
有 3 个步骤可以修复它
- 删除第一个 if 语句,
- 您应该将此移动:
elsif number % 3 == 0 && number % 5 == 0
到第 1 步 - 添加
else puts number
它应该看起来像:
def count
numbers = (1..20)
numbers.each do |number|
if number % 3 == 0 && number % 5 == 0
puts "#{number} i am divisible by 3 & 5"
elsif number % 3 == 0
puts "#{number} i am divisible by 3"
elsif number % 5 == 0
puts "#{number} i am divisible by 5"
else
puts number
end
end
end
UPD
让我们对这些步骤进行解释:
第一步和第三步: 除以 1 结果总是 return 0,所以第一个原因是逻辑错误,第二个原因是现在我们知道它总是 0 我们不需要再检查一次。
第二步:
例如,当我们检查 3
和 elsif number % 3 == 0
时,它将 return 为真,因此不会检查下一个 if 语句,要修复它,我们应该首先添加对 number % 3 == 0 && number % 5 == 0
的检查
感谢@3limin4t0r,你是对的,解释总是更好。
只是为了好玩,您可以使用标准库中的 Prime class,这样:
require 'prime'
(0..30).each do |number|
if [0, 1].include? number
puts number
next
end
if Prime.prime?(number)
puts "#{number} is prime"
else
divisors = Prime.prime_division(number).map(&:first)
puts "#{number} is divisible by " + divisors.join(" and ") if divisors.size > 1
end
end