如何在 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 个步骤可以修复它

  1. 删除第一个 if 语句,
  2. 您应该将此移动:elsif number % 3 == 0 && number % 5 == 0 到第 1 步
  3. 添加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 我们不需要再检查一次。

第二步: 例如,当我们检查 3elsif 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