我正在使用securerandom
,问题是它包含数字"0"
,如0..56
和0..46
而不是1..56
,和1..46
(彩票不包括0位数)。 0可以在下面的第二个兆数输出中看到。我想我找到了一种方法,用0
,char1
排除下面的char2
,但我失败了。
当我使用rand(1..56)
一个包含范围时,它可以正常工作(但有几个帖子建议远离rand()
)。但是,当我尝试在char1
下使用char2
和securerandom
以下的包含范围时,它不起作用。
Error: [nil@nil lottery]$ ./mega_millions.rb /dev/null/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/securerandom.rb:216:in `<': comparison of Fixnum with Array failed (ArgumentError) from /dev/null/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/securerandom.rb:216:in `random_number' from ./mega_millions.rb:42:in `<main>'
我希望得到任何反馈并朝着正确的方向发展。
谢谢!
#!/usr/bin/env ruby
require 'rainbow.rb'
require 'securerandom'
quick_pick = 56
char1 = ('1'..'56').to_a
mega_num = 46
char2 = ('1'..'46').to_a
first = SecureRandom.random_number(quick_pick)
second = SecureRandom.random_number(quick_pick)
third = SecureRandom.random_number(quick_pick)
fourth = SecureRandom.random_number(quick_pick)
fifth = SecureRandom.random_number(quick_pick)
mega = SecureRandom.random_number(mega_num)
puts "#{first}, #{second}, #{third}, #{fourth}, #{fifth}, #{mega}"
[nil@nil lottery]$ ./mega_millions.rb
34, 38, 17, 24, 55, 14
[nil@nil lottery]$ ./mega_millions.rb
30, 26, 7, 4, 32, 0
答案 0 :(得分:1)
您可以简单地将1添加到随机数中,如下所示:
quick_pick = 55 # 56 - 1 to account for the offset in your range of numbers
SecureRandom.random_number(quick_pick) + 1
顺便说一下,更具惯用性,你可以多次运行:
numbers = 6.times.collect { SecureRandom.random_number(quick_pick) + 1 }
然后用
打印puts numbers.join(', ')
答案 1 :(得分:1)
SecureRandom州的文件:
如果给出正整数为n,则:random_number返回一个整数:0&lt; = :: random_number&lt; Ñ
因此,这应该可以解决问题:
first = SecureRandom.random_number(quick_pick) + 1
# And so forth...
这将导致1..quickpick
范围内的随机数,包括在内。
如果不添加1
,您最终会在0..(quickpick-1)
范围内,包括在内。
答案 2 :(得分:1)
真正的单行:
puts 6.times.collect{ SecureRandom.random_number(55) + 1 }.join(', ')
除非您在打印后因某些原因需要保留数字。
略微修改以产生数百万美元:
puts 5.times.collect{SecureRandom.random_number(55) + 1}.push(SecureRandom.random_number(45) + 1).join(', ')