我在简单的任务中遇到了问题,但无法弄清楚数小时,也无法找到任何示例。
我想做的事 - 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) }
答案 0 :(得分:1)
首先,您应该将素数保存到数组中:
@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
答案 1 :(得分:0)
使用gets
从命令行获取输入。
此外,Ruby有一个你可能会觉得有用的Prime
库:
require 'prime'
puts "Which prime?"
x = gets.chomp.to_i
puts "Prime ##{x} is: #{Prime.first(x).last}"
运行:
$ ruby prime.rb Which prime? 5 Prime #5 is: 11
答案 2 :(得分:0)
除了gets
之外,您可能还希望添加某种计数器来达到您的解决方案。
例如,如果用户想要第五个素数,则计数器将从0开始。每次运行该方法后,计数器会向上移动+1,直到达到5。
counter=0
counter+=1
until counter =userinput