如果我运行这个
100.times do |i|
unless i == 0 || i.modulo(2) == 0
p "odd number #{i}"
end
end
我只得到奇数,这是它应该工作的方式。
如果我运行这个虽然
100.times do |i|
unless i == 0 || i.modulo(3) == 0
p "even number #{i}"
end
end
然后我得到一个混合的数字,其中一些是偶数。
也许是我,或者"除非"不是在这里使用的最佳控件。 有点奇怪,虽然那个给了我想要的结果,另一个没有。
i.modulo(3) == 0
不是奇数的测试;它是可被3整除的数字的测试。
回想一下偶数的定义可以被二(或x % 2 == 0
(整除,奇数是!even
。因此,只有偶数与奇数的模测试是 mod 2,结果为 0 或 1。
例:
100.times { |i|
p "even number #{i}" unless i % 2==1 # better as if i % 2==0
p "odd number #{i}" unless i % 2==0 # better as if i % 2==1
}
为了保持直截了当,您还可以使用.even?
和.odd?