답변:
사용하다 rand(range)
에서 루비 임의의 번호 :
6면 주사위의 롤을 시뮬레이션하기 위해 임의의 정수가 필요한 경우 다음을 사용하십시오
1 + rand(6)
. 크랩 롤은로 시뮬레이션 할 수 있습니다2 + rand(6) + rand(6)
.마지막으로 임의의 부동 소수점이 필요한 경우
rand
인수없이 호출 하면됩니다.
으로 마크 - 앙드레 Lafortune는 에 언급 (그것을 upvote에 가서) 아래에 그의 대답 , 루비 1.9.2 자체가 Random
클래스 (마크 - 앙드레 자신이 있다는 디버그에 도움 , 따라서 1.9.2 대상 해당 기능을).
예를 들어, 10 개의 숫자를 추측해야하는 이 게임에서 다음을 사용하여 숫자 를 초기화 할 수 있습니다.
10.times.map{ 20 + Random.rand(11) }
#=> [26, 26, 22, 20, 30, 26, 23, 23, 25, 22]
노트 :
사용 Random.new.rand(20..30)
(사용 Random.new
에 의해 (다시) 자세히 설명 된 바와 같이, 좋은 생각되지 않을 것 일반적으로) 마크 - 앙드레 Lafortune 에, 그의 대답 (다시).
그러나 사용하지 않는 경우 Random.new
, 다음 수업 방법rand
만 소요 max
되지 값을, Range
로, 난간 (정력적) 주석에 지적 (과에서 설명하는대로 에 대한 문서Random
). 7 자리의 난수 를 생성하여 그림과 같이 인스턴스 메소드 만을 사용할 수 있습니다 .Range
의 상응하는 이유입니다 Random.new.rand(20..30)
것 20 + Random.rand(11)
때문에, Random.rand(int)
반환 "이 아닌 임의의 정수 크거나 제로에 동일 적은 인수보다 ." 20..30
30을 포함하면 11을 제외하고 0에서 11 사이의 임의의 숫자가 필요합니다.
Random
클래스 를 언급하기 위해 답변을 편집 한 것이 좋지만, Random.new
예와 같이 여러 번 호출하는 것은 끔찍한 아이디어 입니다. 그 대답을 편집했습니다.
Random.rand
않습니다 실제로 범위를 받아들입니다. (1.9.3부터 믿습니다.)
와 10 rand(42-10) + 10
사이의 임의의 숫자를 얻는 데 사용할 수 있지만 (10은 42와 독점은 42) 루비 1.9.3 이후에는 더 나은 방법으로 전화를 걸 수 있습니다.10
42
rand(10...42) # => 13
내 backports
gem 을 요구하여 모든 버전의 Ruby에서 사용할 수 있습니다.
Ruby 1.9.2는 Random
클래스를 도입 하여 자신 만의 난수 생성기 객체를 생성하고 멋진 API를 제공합니다.
r = Random.new
r.rand(10...42) # => 22
r.bytes(3) # => "rnd"
Random
직접 호출 할 수 있도록 클래스 자체는, 임의의 발전기 역할을합니다 :
Random.rand(10...42) # => same as rand(10...42)
에 대한 참고 사항 Random.new
대부분의 경우 가장 간단한 방법은 rand
또는 을 사용하는 것 Random.rand
입니다. 난수를 원할 때마다 새로운 난수 생성기를 생성하는 것은 정말 나쁜 생각 입니다. 이 작업을 수행하면 임의 생성기 자체 의 속성과 비교할 수있는 초기 시딩 알고리즘의 임의 속성을 얻게 됩니다 .
Random.new
따라서 사용하는 경우 가급적 드물게 ( 예 : 한 번만 호출) MyApp::Random = Random.new
다른 곳에서 사용해야합니다.
사례 Random.new
유용는 다음과 같다 :
rand
/ 시퀀스를 방해하고 싶지 않습니다 Random.rand
.Random
객체가 마샬링 될 수 있으므로 쉬움 )backports
gem은 단순히 RUby 1.8.7, 1.9.1, 1.9.2에 새로 도입되었지만 Ruby로 구현 된 메소드 모음입니다. RubySpec을 사용하여 결과가 Ruby와 호환되는지 확인합니다.
Random.rand(10..42)
작동하지 않습니다. Random.rand
클래스 메소드는 범위를 허용하지 않습니다. (Ruby 1.9.2p180)
숫자뿐만 아니라 16 진수 또는 uuid를 찾고 있다면 SecureRandom
모듈 ActiveSupport
이 1.9.2 이상에서 루비 코어로 길을 찾았다는 것을 언급 할 가치가 있습니다. 따라서 완전한 프레임 워크가 필요하지 않습니다.
require 'securerandom'
p SecureRandom.random_number(100) #=> 15
p SecureRandom.random_number(100) #=> 88
p SecureRandom.random_number #=> 0.596506046187744
p SecureRandom.random_number #=> 0.350621695741409
p SecureRandom.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"
여기에 문서화되어 있습니다 : Ruby 1.9.3-모듈 : SecureRandom (lib / securerandom.rb)
SecureRandom.random_number(1000..9999)
SecureRandom.random_number()
범위를 가지지 않으므로 아닙니다. 아마도 SecureRandom.random_number(10_000)
(0-9999의 경우) 또는 SecureRandom.random_number(9_000)+1_000
(1000-9999의 경우) 와 같은 것을 원할 것입니다 .
이 rand
방법 으로 난수를 생성 할 수 있습니다 . rand
메소드에 전달 된 인수는 integer
a 또는 a 이어야하며 range
범위 내의 해당 난수를 리턴합니다.
rand(9) # this generates a number between 0 to 8
rand(0 .. 9) # this generates a number between 0 to 9
rand(1 .. 50) # this generates a number between 1 to 50
#rand(m .. n) # m is the start of the number range, n is the end of number range
rand(1..6)
독서를 최고 답보다 명확하게 사용한다고 생각합니다 rand(6)+1
.
글쎄, 나는 알아 냈다. rand라는 내장 (?) 함수가 있습니다.
rand(n + 1)
누군가가 더 자세한 답변으로 대답하면 정답으로 표시합니다.
질문에 대한 가장 간단한 답변 :
rand(0..n)
이 링크는 이와 관련하여 도움이 될 것입니다.
http://ruby-doc.org/core-1.9.3/Random.html
그리고 루비의 난수보다 더 명확합니다.
0에서 10까지의 정수 생성
puts (rand() * 10).to_i
더 읽기 쉬운 방식으로 0에서 10까지의 숫자 생성
puts rand(10)
15를 포함하여 10에서 15까지의 숫자 생성
puts rand(10..15)
비 랜덤 난수
프로그램이 실행될 때마다 같은 숫자의 시퀀스를 생성
srand(5)
10 개의 난수 생성
puts (0..10).map{rand(0..10)}
아마 당신을 도울 것입니다. 내 앱에서 이것을 사용합니다.
https://github.com/rubyworks/facets
class String
# Create a random String of given length, using given character set
#
# Character set is an Array which can contain Ranges, Arrays, Characters
#
# Examples
#
# String.random
# => "D9DxFIaqR3dr8Ct1AfmFxHxqGsmA4Oz3"
#
# String.random(10)
# => "t8BIna341S"
#
# String.random(10, ['a'..'z'])
# => "nstpvixfri"
#
# String.random(10, ['0'..'9'] )
# => "0982541042"
#
# String.random(10, ['0'..'9','A'..'F'] )
# => "3EBF48AD3D"
#
# BASE64_CHAR_SET = ["A".."Z", "a".."z", "0".."9", '_', '-']
# String.random(10, BASE64_CHAR_SET)
# => "xM_1t3qcNn"
#
# SPECIAL_CHARS = ["!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+", "|", "/", "?", ".", ",", ";", ":", "~", "`", "[", "]", "{", "}", "<", ">"]
# BASE91_CHAR_SET = ["A".."Z", "a".."z", "0".."9", SPECIAL_CHARS]
# String.random(10, BASE91_CHAR_SET)
# => "S(Z]z,J{v;"
#
# CREDIT: Tilo Sloboda
#
# SEE: https://gist.github.com/tilo/3ee8d94871d30416feba
#
# TODO: Move to random.rb in standard library?
def self.random(len=32, character_set = ["A".."Z", "a".."z", "0".."9"])
chars = character_set.map{|x| x.is_a?(Range) ? x.to_a : x }.flatten
Array.new(len){ chars.sample }.join
end
end
그것은 나를 위해 잘 작동
시도 array#shuffle
무작위위한 방법을
array = (1..10).to_a
array.shuffle.first
.shuffle.first
와 함께 .sample
!
srand <some_number>
를 작성하기 전에 사용rand
하면 필요한 경우 결정적 (즉, 반복 가능한) 의사 랜덤 시퀀스가 제공됩니다. ruby-doc.org/core-2.5.6/Random.html#method-c-srand