Zum Hauptinhalt springen

Generieren von Zufallszahlen in Python ohne Verwendung des Random-Moduls

Viele angehende Programmierer, die die Python-Sprache lernen, stehen als erstes vor der Aufgabe, Zufallszahlen zu generieren. Dies wird normalerweise mit dem Random-Modul verwendet, das eine Reihe von Funktionen zum Arbeiten mit der Generierung von Zufallszahlen bereitstellt. Die Frage stellt sich jedoch: Ist es möglich, in Python einen Zufall zu erstellen, ohne das random-Modul zu verwenden? Die Antwort ist ja, es ist möglich!

Verschiedene Ansätze können verwendet werden, um Zufallszahlen ohne das random-Modul in Python zu erstellen. Sie können beispielsweise Systemfunktionen oder andere Python-Bibliotheken verwenden. Aber der einfachste und verständlichste Weg ist die Verwendung der hash() -Funktion.

Die Funktion hash() konvertiert das Argument in einen Hash-Wert, der eine ganze Zahl darstellt. Der einzige Nachteil dieses Ansatzes ist, dass die generierten Zahlen nicht vollständig zufällig sind. Sie sind jedoch für die meisten Aufgaben ziemlich zufällig.

Beispiel für die Verwendung der Funktion hash() zum Generieren von Zufallszahlen:

number = hash("seed")

In diesem Beispiel ist "seed" der Anfangswert (Seed), von dem die generierte Zahl abhängt. Bei jedem Aufruf der Funktion hash() mit demselben Anfangswert wird dieselbe Zahl erhalten. Daher muss der Anfangswert geändert werden, um jedes Mal eine neue Zufallszahl zu erhalten.

Wenn Sie also die hash() -Funktion in Python verwenden, können Sie es ohne das random-Modul zu einem Zufall machen. Obwohl die resultierenden Zahlen nicht perfekt zufällig sind, eignen sie sich durchaus für normale Aufgaben, bei denen Sie nur eine Zufallszahl erhalten müssen.

Generieren von Zufallszahlen ohne Verwendung des Random-Moduls in Python

Das Random-Modul in Python bietet viele Funktionen zum Generieren von Zufallszahlen. Wenn Sie jedoch einen Zufallszahlengenerator erstellen möchten, ohne dieses Modul zu verwenden, können Sie einige andere Methoden verwenden.

1. Verwenden der Systemzeit

Sie können die aktuellen Systemzeitwerte verwenden, um Pseudozufallszahlen zu erstellen. Dies kann beispielsweise mit der Funktion time() des time Moduls erfolgen:

import timedef generate_random_number():current_time = time.time()random_number = current_time * 1000 % 100return int(random_number)

Die Funktion time() gibt die Anzahl der Sekunden zurück, die seit Beginn der Epoche vergangen sind (normalerweise am 1. Januar 1970). Wenn Sie den Wert der aktuellen Zeit mit 1000 multiplizieren und den Rest von der Division durch 100 nehmen, wird sichergestellt, dass eine Zufallszahl zwischen 0 und 99 erhalten wird. Die Zahl wird dann in einen ganzzahligen Typ umgewandelt.

2. Verwenden von Hash-Funktionen

Eine andere Möglichkeit, eine Zufallszahl zu generieren, besteht darin, Hash-Funktionen zu verwenden. Zum Beispiel können Sie die sha256-Hash-Funktion aus dem Hashlib-Modul verwenden:

import hashlibdef generate_random_number():random_string = 'some_random_string'random_hash = hashlib.sha256(random_string.encode()).hexdigest()random_number = int(random_hash, 16) % 100return random_number

In diesem Beispiel erstellen Sie eine zufällige Zeichenfolge und berechnen ihren Hash mithilfe der sha256-Hash-Funktion. Der resultierende Hash wird dann in einen ganzzahligen Typ umgewandelt und der Rest der Division durch 100 wird übernommen. Das Ergebnis ist eine Zufallszahl zwischen 0 und 99.

Beide Methoden bieten die Möglichkeit, einen Pseudozufallszahlengenerator zu erstellen, ohne das random-Modul in Python zu verwenden. Beachten Sie jedoch, dass sie keine hohe Zufälligkeit aufweisen und nicht für kryptografische Zwecke geeignet sind. Wenn Sie Zufallszahlen mit einem hohen Grad an Zufälligkeit und Unvorhersehbarkeit erzeugen möchten, wird empfohlen, das Random-Modul zu verwenden.

Intro

Modul random in Python wird es häufig verwendet, um Zufallszahlen zu generieren. Es kann jedoch manchmal notwendig sein, einen Zufallszahlengenerator zu erstellen, ohne dieses Modul zu verwenden. In diesem Artikel werden einige Beispiele beschrieben, mit denen Sie einen Randomizer erstellen können, ohne das Modul zu verwenden random.

Methode 1: Verwenden der aktuellen Zeit als Samen

Um den aktuellen Zeitstempel in Python zu erhalten, können wir das Datetime-Modul verwenden. Wir erstellen ein Datetime-Objekt.eine datetime, die das aktuelle Datum und die aktuelle Uhrzeit darstellt. Dann können wir dieses Objekt verwenden, um den aktuellen Zeitstempel in Sekunden zu erhalten.

Eine Möglichkeit, eine Zufallszahl zu erhalten, besteht darin, den Rest der Division des aktuellen Zeitstempels durch den gewünschten Wertebereich zu verwenden. Wenn wir beispielsweise eine Zufallszahl zwischen 0 und 100 erhalten möchten, können wir den Rest der Division des aktuellen Zeitstempels durch 101 (100 + 1) nehmen.

current_time = datetime.datetime.now()
random_number = current_time.timestamp() % 101
print(random_number)

In diesem Beispiel verwenden wir das datetime-Modul, um den aktuellen Zeitstempel abzurufen. Dann verwenden wir die Methode timestamp(), die die Anzahl der Sekunden seit Beginn der Epoche (1. Januar 1970) zurückgibt. Wir nehmen den Rest, indem wir diesen Wert durch 101 dividieren, um eine Zufallszahl im Bereich von 0 bis 100 zu erhalten.

Diese Methode ist eine einfache Möglichkeit, Zufallszahlen zu erhalten, ohne das random-Modul zu verwenden, aber es hat einige Einschränkungen. Wenn wir zum Beispiel ein Programm mehrmals in derselben Sekunde ausführen, erhalten wir dieselbe Nummer. Darüber hinaus hängt die Zufälligkeit der mit dieser Methode erhaltenen Zahlen von der Genauigkeit der Systemzeit ab und kann in bestimmten Fällen vorhersehbar sein.

Methode 2: Verwenden von String-Hashing

Ein Beispiel für die Verwendung von String-Hashing könnte der folgende Code sein:

import hashlibimport timedef get_random_number(seed):# Получаем текущее время в виде строкиcurrent_time = str(time.time())# Конкатенируем строку времени и сидinput_string = current_time + str(seed)# Хэшируем полученную строкуhashed_string = hashlib.sha256(input_string.encode()).hexdigest()# Преобразуем хэш-код в целое число и возвращаем егоrandom_number = int(hashed_string, 16)return random_number

In diesem Beispiel nimmt die Funktion get_random_number einen SID- Wert an, der sich mit jedem Funktionsaufruf ändert. Innerhalb der Funktion erhalten wir die aktuelle Zeit, verketten sie mit dem Sid-Wert, hashenie die resultierende Zeichenfolge und konvertieren den Hash-Code in eine ganze Zahl.

Der auf diese Weise erhaltene Hash ist eine Pseudozufallszahl, die im Programm verwendet werden kann.

Es ist jedoch erwähnenswert, dass diese Methode keine vollständigen Zufallszahlen garantiert und keine gleichmäßige Verteilung der Werte gewährleistet. Wenn Sie also eine qualitativ hochwertige Zufallszahlengenerierung benötigen, wird empfohlen, das Random-Modul zu verwenden.