Wie erzeuge ich eine Zufallszahl zwischen 0
und n
?Wie bekomme ich eine Zufallszahl in Ruby
Antwort
Was ist los mit rand(range)
?
Von Ruby Random Numbers:
Wenn Sie eine Zufallszahl benötigt eine Rolle eines sechsseitigen Würfel zu simulieren, dann würden Sie verwenden:
1 + rand(6)
. Ein Wurf in Craps könnte mit2 + rand(6) + rand(6)
simuliert werden. Wenn Sie nur einen zufälligen Float benötigen, rufen Sie einfachrand
ohne Argumente an.
Wie Marc-André Lafortune erwähnt in his answer below (go upvote it), Ruby 1.9.2 has its own Random
class (das Marc-André selbst helped to debug, daher die 1.9.2 target für diese Funktion).
Zum Beispiel in diesem game where you need to guess 10 numbers, können Sie sie mit initialisieren:
10.times.map{ 20 + Random.rand(11) }
#=> [26, 26, 22, 20, 30, 26, 23, 23, 25, 22]
Hinweis:
Random.new.rand(20..30)
Verwendung (Random.new
Verwendung) in der Regel keine gute Idee wäre, wie erläutert in Detail (wieder) von Marc-André Lafortune, in his answer (wieder).Aber wenn Sie nicht
Random.new
verwenden, dann ist die class methodrand
dauert nur einenmax
Wert, keineRange
, wie banister (energetisch) weist im Kommentar (und wie in den docs forRandom
dokumentiert). Nur die instance method kann eineRange
nehmen, wie durch generate a random number with 7 digits veranschaulicht.
Aus diesem Grund ist das Äquivalent von Random.new.rand(20..30)
20 + Random.rand(11)
sein würde, da Random.rand(int)
returns „eine zufällige ganze Zahl größer oder gleich Null und weniger als das Argument.“ 20..30
30, ich brauche zu kommen mit eine zufällige Zahl zwischen 0 und 11, ausgenommen 11.
Nun, ich habe es herausgefunden. Offenbar gibt es eine eingebaute Funktion namens rand (?):
rand(n + 1)
Wenn jemand mit einer detaillierteren Antwort beantwortet, ich das als die richtige Antwort markieren werden.
Ja, es ist im Kernel-Modul eingebaut. –
Ahh, danke Chrisoph. –
Vergessen Sie nicht, den RNG mit srand() zuerst zu säen.
Was passiert, wenn Sie nicht srand() aufrufen? –
srand wird automatisch mit dem Seed aufgerufen von der gegenwärtigen Zeit zu sein, wenn es nicht bereits genannt wurde –
Während Sie rand(42-10) + 10
zu bekommen eine Zufallszahl zwischen 10
und 42
(wo einschließlich 10 ist und 42 exklusiv), gibt es eine bessere Art und Weise, da Ruby 1.9 verwenden können.3, wo Sie in der Lage zu nennen sind:
rand(10...42) # => 13
verfügbar für alle Versionen von Ruby von meinem backports
gem erfordern.
Rubin 1.9.2 führte auch die Random
Klasse, so dass Sie Ihre eigenen Zufallszahlengenerator Objekte erstellen und hat eine schöne API:
r = Random.new
r.rand(10...42) # => 22
r.bytes(3) # => "rnd"
Die Random
Klasse selbst fungiert als Zufallsgenerator, so dass Sie direkt anrufen :
Random.rand(10...42) # => same as rand(10...42)
Hinweise zu Random.new
In den meisten Fällen ist es am einfachsten, rand
oder Random.rand
zu verwenden. Erstellen Sie einen neuen Zufallsgenerator jedes Mal, wenn Sie eine Zufallszahl möchten, ist eine wirklich schlechte Idee. Wenn Sie dies tun, erhalten Sie die zufälligen Eigenschaften des ursprünglichen Seeding-Algorithmus, die im Vergleich zu den Eigenschaften der random generator itself grausam sind.
Wenn Sie Random.new
verwenden, sollten Sie so nennen es so selten wie möglich, zum Beispiel einmal als MyApp::Random = Random.new
und es überall benutzen.
Die Fälle, in denen Random.new
hilfreich ist, sind folgende:
- Sie ein Juwel schreiben und wollen nicht mit der Sequenz von
rand
/Random.rand
, die die wichtigsten Programme auf - könnte unter Berufung einzumischen Sie möchten separate reproduzierbare Folgen von Zufallszahlen (z. B. eine pro Thread)
- möchten Sie in der Lage sein, eine reproduzierbare Folge von Zufallszahlen zu speichern und wieder aufzunehmen (einfach wie
Random
Objekte gemarshallt werden können)
Ausgezeichnet! +1. Ich habe meine eigene Antwort abgeschlossen, um dieses neue fe zu reflektieren (und erwähnt Ihren Beitrag mit Bug # 3104;)). – VonC
Wie funktioniert das "backports" Juwel in großen Zügen? –
@yar: Mein 'Backports'-Juwel ist einfach eine Sammlung von Methoden, die neu in RUby 1.8.7, 1.9.1, 1.9.2 sind, aber in Ruby implementiert sind. Ich verwende RubySpec, um sicherzustellen, dass die Ergebnisse mit Ruby kompatibel sind. –
Was ist damit?
n = 3
(0..n).to_a.sample
Es sollte angemerkt werden, dass die Generierung einer Reihe von Zahlen wie diese Lösung hat eine schreckliche Leistung in großen Bereichen, wie es ist O (n), während "Rand" ist O (1). – Travis
Wenn Sie sich nicht nur für eine Reihe suchen, sondern auch hex oder uuid es wert ist zu erwähnen, dass das SecureRandom
Modul seinen Weg von ActiveSupport
zum Rubin Kern in 1.9.2+ gefunden. Also ohne die Notwendigkeit für einen ausgewachsenen Rahmen:
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"
Es dokumentiert ist: Ruby 1.9.3 - Module: SecureRandom (lib/securerandom.rb)
Was ist, wenn Sie 4 Ziffern Zufallszahl benötigen? – onurozgurozkan
onurozgurozkan Ich nehme an 'SecureRandom.random_number (1000..9999)' – JayTarka
'SecureRandom.random_number()' nimmt keinen Bereich, also nein. Sie möchten wahrscheinlich etwas wie 'SecureRandom.random_number (10_000)' (für 0-9999) oder 'SecureRandom.random_number (9_000) + 1_000' (für 1000-9999). – mwp
rand(6) #=> gives a random number between 0 and 6 inclusively
rand(1..6) #=> gives a random number between 1 and 6 inclusively
Beachten Sie, dass der Bereich Option in neueren nur verfügbar ist (1.9+ glaube ich) Versionen von Rubin.
Ich glaube, die Range-Option ist nur in 'Ruby 1.9.3 +' verfügbar. Es funktionierte nicht in '1.9.2', als ich es zumindest versuchte. – Batkins
Sie können eine Zufallszahl mit der Methode rand
generieren.Das Argument für die rand
Methode übergeben soll ein integer
oder ein range
und gibt eine entsprechende Zufallszahl innerhalb des Bereichs:
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
Es kann auch ein '' Float'' sein. '' rand (1.1..2.7) '' funktioniert. – pisaruk
Ich denke, mit Ihrem 'rand (1..6)' liest klarer als die Top-Antwort 'rand (6) + 1'. – isomorphismes
warum Rand ist keine Methode der Range .... –
Dieser Link hilfreich sein wird in Bezug auf diese;
http://ruby-doc.org/core-1.9.3/Random.html
Und einige mehr Klarheit unten über die Zufallszahlen in Rubin;
Generieren eine Zahl von 0 bis 10
puts (rand() * 10).to_i
Generieren eine Zahl von 0 bis 10 In einer lesbaren Weise
puts rand(10)
Generieren eine Zahl von 10 bis 15 darunter 15
puts rand(10..15)
Nicht Zufall Zufall Zahlen
Generieren Sie die gleiche Zahlenfolge jedes Mal das Programm ausgeführt wird
srand(5)
generieren 10 Zufallszahlen
puts (0..10).map{rand(0..10)}
Sie können auch folgen Sie diesem Blog für Schritt für Schritt sehr klares Bild über zufällige Nos in Ruby; http://www.sitepoint.com/tour-random-ruby/ –
Versuchen array#shuffle
Verfahren zur Randomisierung
array = (1..10).to_a
array.shuffle.first
Simplest Antwort auf die Frage:
rand(0..n)
Sie können rand (Bereich)
x = rand(1..5)
es Ihnen vielleicht helfen, tun. Ich benutze dies in meiner app
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
Es funktioniert gut für mich
Wie wäre es mit diesem?
num = Random.new
num.rand(1..n)
range = 10..50
rand (range)
oder
range.to_a.sample
oder
range.to_a.shuffle (dies wird das ganze Array mischen und Sie können eine zufällige Zahl nach dem ersten oder letzten oder aus diesem Array wählen, um zufällige auszuwählen)
Sie können einfach random_number
verwenden.
Wenn eine positive Ganzzahl als n angegeben wird, gibt random_number
eine ganze Zahl zurück: 0 = random_number
< n.
Benutzen Sie es wie folgt aus:
any_number = SecureRandom.random_number(100)
Der Ausgang wird eine beliebige Zahl zwischen 0 und 100.
einfache Möglichkeit, Zufallszahl zu erhalten in Ruby ist,
def random
(1..10).to_a.sample.to_s
end
- 1. Wie bekomme ich eine Zufallszahl in JSTL?
- 2. Wie bekomme ich eine Zufallszahl in FactoryGirl?
- 3. Wie bekomme ich eine Zufallszahl im Template Toolkit?
- 4. Wie generiere ich eine Zufallszahl in JavaScript?
- 5. Wählen Sie eine Zufallszahl Mal eine Zufallszahl, aber nie die gleiche Zufallszahl zweimal
- 6. eine Zufallszahl in Swift
- 7. Wie bekomme ich eine bestimmte Zufallszahl aus drei Zahlen in Android
- 8. Wie generiere ich eine Zufallszahl in einem Bereich im Makefile?
- 9. Wie kann ich in Rust 1.0 eine Zufallszahl erhalten?
- 10. Wie bekomme ich Fehlermeldungen von Ruby Threads
- 11. Wie generieren Sie eine Zufallszahl in C#?
- 12. Wie bekomme ich JSON-Antwort mit Ruby
- 13. Wie erstelle ich eine Zufallszahl und drucke eine andere Zahl?
- 14. Wie bekomme ich Daten von einer alten (nicht-Ruby) App in eine neue (Ruby) App?
- 15. Wie bekomme ich den Inhalt einer http-Anfrage in Ruby?
- 16. Wie bekomme ich ein lazy-Array in Ruby?
- 17. Wie bekomme ich Header aus einer CSV-Datei in Ruby
- 18. Wie bekomme ich die HTML-Quelle einer Webseite in Ruby
- 19. Wie bekomme ich das Maximum einer beliebigen Funktion in Ruby?
- 20. Wie erzeuge ich eine Zufallszahl mithilfe des funktionalen Status?
- 21. Wie generiert man eine Zufallszahl zwischen a und b in Ruby?
- 22. Wie kann ich die nächste Zufallszahl kennen?
- 23. Wie wähle ich eine Zufallszahl und speichere sie?
- 24. Wie bekomme ich Hash-Werte nach Position in Ruby?
- 25. Wie bekomme ich Schlüssel in Ruby auf Schienen. Each Schleife
- 26. Wie bekomme ich den Namen des aktuellen Verzeichnisses in Ruby?
- 27. Wie bekomme ich den spezifischen Fehler, wenn TCPServer.open in Ruby
- 28. Ruby - Wie bekomme ich einen Methodennamen in sich?
- 29. Wie bekomme ich die volle Befehlszeile in Ruby?
- 30. Wie bekomme ich die Breite des Terminalfensters in Ruby?
Ist das nicht schrecklich nicht-Rubin-ähnlich? Ich dachte, alles ist ein Objekt, wenig Überraschung und das ... –
@yar: Es ist ein bisschen "perlish". Jetzt hat Ruby seine Random-Klasse (siehe meine Antwort) –
@VonC: Es ist großartig, dass du deine Antwort editiert hast, um die neue 'Random' Klasse zu erwähnen, aber es ist eine schreckliche Idee,' Random.new' wie in deinem Beispiel zu nennen. Ich habe meine Antwort bearbeitet, um das zu sagen. –