Ruby- 质数唯一且重复
Ruby- prime number unique and duplicates
我只是在学习 Ruby :) 我正在尝试创建一个简单的素数程序,其中 所有 一个数的素数都被打印出来。
我遇到错误,其中 质数和非质数混淆了
(即:输入 9 将得到所有非质数)。
对于这样一个初学者的问题,我很抱歉 - 我很挣扎,需要一些帮助:)
puts "Enter a number please "
num = gets.chomp.to_i
i = 2
number = 2
while i < num
if number % i == 0
prime = false
end
i += 1
end
if prime == true
puts "#{number} is prime"
else
puts "#{number} is not prime"
end
number += 1
end
while i < num
if number % i == 0
prime = false
end
i += 1
end
# ...
看起来第一个 end
应该是 else
。
当您简化代码时,更容易捕捉到这些东西,例如此方法简化为(尽管它还有其他问题):
i = 2
number = 2
while i < num
(number % i).zero? ? prime = false : i += 1
puts "#{number} is #{'not ' unless prime}prime"
number += 1
end
结束错误是因为else
while i < num
if number % i == 0
prime = false
else
i += 1
end
如果你有一个简短的 If - neater 是这样写的:
if-condition ? 1 : 0
在你的情况下 while 是..不是最好的选择 - 你应该使用 range
(1...3).map{|x| puts(x) }
{} - 允许多行(do end end)
这会打印 [1,2]
(1..3).map{|x| x*2 }
将是 [2,4,9]
这应该足以说明如何在不破坏进程的情况下使用您的代码。
我只是在学习 Ruby :) 我正在尝试创建一个简单的素数程序,其中 所有 一个数的素数都被打印出来。
我遇到错误,其中 质数和非质数混淆了 (即:输入 9 将得到所有非质数)。
对于这样一个初学者的问题,我很抱歉 - 我很挣扎,需要一些帮助:)
puts "Enter a number please "
num = gets.chomp.to_i
i = 2
number = 2
while i < num
if number % i == 0
prime = false
end
i += 1
end
if prime == true
puts "#{number} is prime"
else
puts "#{number} is not prime"
end
number += 1
end
while i < num
if number % i == 0
prime = false
end
i += 1
end
# ...
看起来第一个 end
应该是 else
。
当您简化代码时,更容易捕捉到这些东西,例如此方法简化为(尽管它还有其他问题):
i = 2
number = 2
while i < num
(number % i).zero? ? prime = false : i += 1
puts "#{number} is #{'not ' unless prime}prime"
number += 1
end
结束错误是因为else
while i < num
if number % i == 0
prime = false
else
i += 1
end
如果你有一个简短的 If - neater 是这样写的:
if-condition ? 1 : 0
在你的情况下 while 是..不是最好的选择 - 你应该使用 range
(1...3).map{|x| puts(x) }
{} - 允许多行(do end end)
这会打印 [1,2]
(1..3).map{|x| x*2 }
将是 [2,4,9]
这应该足以说明如何在不破坏进程的情况下使用您的代码。