为什么is_prime的值不随每个循环而变化?

时间:2012-11-01 14:35:18

标签: ruby boolean

以下是Codeacademy.com的一些代码。有些事情我不明白:为什么is_prime的值不会随着循环的每次迭代而改变?例如,测试数字8,可能是循环导致is_prime对于值2和3为false,但是对于4则变为false(因为您可以除以4)。然而,对于5,6和7,它再次成真。那么为什么在循环结束时,即使在5,6和7之后它仍然是真的,它仍然是假的?

def prime(n)
  puts "That's not an integer." unless n.is_a? Integer
  is_prime = true
  for i in 2..n-1
    if n % i == 0
      is_prime = false
    end
  end
  if is_prime
    puts "#{n} is prime!"
  else
    puts "#{n} is not prime."
  end
end

prime(2)
prime(9)
prime(11)
prime(51)
prime(97)

1 个答案:

答案 0 :(得分:3)

您所描述的行为如果是这样写的话会发生什么:

for i in 2..n-1
  if n % i == 0
    is_prime = false
  else
    is_prime = true
  end
end

但是在您的代码中没有else。如果数字不可分,则没有任何反应,因此变量保持不变。