2016-07-11 36 views
0

Ich möchte mir einen "zufälligen" Zahlengenerator von ganzen Zahlen zwischen 2 Kanten erstellen. Darüber hinaus möchte ich das gleiche Ding aber mit float-Nummern zwischen zwei Kanten (wie der random.random, aber der Bereich, den ich will) erstellen.Erstellen Sie eine "zufällige" Zahl zwischen Bereich ohne Modul außer Zeit

Zeit ist für mich für Zeitstempel erforderlich.

Ich bin derzeit lernen die Art und Weise Zufallszahlen erzeugt werden (ich benutze diese Art und Weise mit dem Zeitstempel als Start).

a = int 
b = int 
m = int 
number = time.mktime (time.localtime()) 

for x in range (0, m): 
    number = (a*number + c) % m 
    print (number) 

(int kann eine beliebige ganze Zahl sein Es gibt mehrere Möglichkeiten, um die zurück optimieren Werte (zu lange, um hier zu erklären))

So habe ich gelernt, "zufällige" Ganzzahlen zu haben. Ich suche derzeit nach einem Weg, das obige Problem auf diese Weise zu lösen (wenn möglich). Irgendwelche Ideen?

+0

Verwenden Sie zwei int A und B und dann können Sie A + float ("0." + Str (B)) (ok es ist schmutzig, aber wie ein Zufallsgenerator mit Datum ...) – Benjamin

Antwort

1

Vorausgesetzt, Sie nehmen immer Ihre Nummer modulo m, m ist der maximale Wert des Ergebnisses. Auch das Auffinden einer Zufallszahl zwischen min und max ist dasselbe wie das Finden einer Zufallszahl zwischen 0 und max - min und das Hinzufügen von min zu diesem.

def rand_range(min, max, a, b, n): 
    m = max - min 
    number = time.mktime (time.localtime()) 

    for x in range (0, m): 
     number = (a*number + b) % m 

    return number + min 

Um eine Gleitkommazahl daraus herauskommen, können Sie die Funktion oben verwenden, um zu definieren:

def rand_range_float(min, max, density, a, b, n): 
    rand_int = rand_range(0, density, a, b, n) 
    return min + (float(rand_int)/density)*(max-min) 

In dieser Funktion density gibt an, wie viele mögliche Gleitkommawerte Sie wollen. Wenn Sie beispielsweise rand_range_float(0, 1, 2, a, b, c) aufrufen, könnte die Funktion 2 mögliche Werte zurückgeben; 0.0 oder 0.5

+0

Vielen Dank genau das, was ich brauchte! – Sionae

+0

Was nutzt die Variable n in den beiden Funktionen? – Sionae

+0

Oh, ich habe deine Frage falsch gelesen, und ich habe nur deinen Code für die Schleife vergessen. Ich dachte, es gäbe eine Variable "n", um die Anzahl der Iterationen zu definieren, aber Sie verwenden dort nur "m", so dass Sie das Argument "n" weglassen können. – bigblind