我在简单的任务中遇到了问题,但是几个小时都无法弄清楚,也找不到任何示例。
我想做的事情 - Ruby 生成素数列表,用户输入一个数字(例如 - 5),Ruby 显示第 5 个素数是 11。
我有一个生成素数的代码-
def isPrime(n)
for i in 2...n
return false if (n%i) == 0
end
end
(2..1000).each { |x| puts x if isPrime(x) }
首先,您应该将素数保存到数组中:
@primes = []
(2..1000).each do |x|
@primes << x if isPrime(x)
end
或者使用短一点Enumerable#select
:
@primes = (2..1000).select { |x| isPrime(x) }
现在您可以处理用户输入:
loop do
print "enter a number: "
n = gets.to_i
puts @primes.fetch(n-1) { "unknown prime" }
end
Kernel#gets
从 STDIN 读取一行,String#to_i
将输入转换为整数(忽略末尾的换行符)并从数组Array#fetch
中获取索引n-1
处的素数或返回未知素数的消息(数组外)。
顺便说一句,您应该使用snake_case
方法名称:
def is_prime(n)
# ...
end
最好?
用于谓词方法:
def prime?(n)
# ...
end
用于gets
从命令行获取输入。
此外,Ruby 有一个Prime
您可能会觉得有用的库:
require 'prime'
puts "Which prime?"
x = gets.chomp.to_i
puts "Prime ##{x} is: #{Prime.first(x).last}"
跑步:
$红宝石素数.rb 哪个素数? 5 素数 #5 是:11
除了gets
,您可能还想添加某种计数器来达到您的解决方案。
例如,如果用户想要第五个素数,您可以让计数器从 0 开始。每次运行该方法后,计数器都会向上移动 +1,直到达到 5。
counter=0
counter+=1
until counter =userinput