Programmierpraktikum SoSe 2024, Bachelor Informatik, FU Berlin
ProPra2024 > Bibliotheken > Python-Standardbibliothek > m_random

random - Pseudo-Zufallsgenerator

Trial

Ziel

Ich weiß, wie man zufällige Zahlen generieren oder zufällige Elemente aus einer Menge wählen kann.

Hintergrund

Manche Algorithmen basieren auf zufälligen Eingaben (randomisierte Algorithmen). Aber auch für die Simulation oder die Generierung von Eingaben zu Testzwecke sind Zufallsgeneratoren nützlich. random bietet einen Zufallsgenerator, der für die Generierung zufälliger Floats, Integer oder die Wahl von Elementen aus Sequenzen verwendet werden kann.

random implementiert einen sogenannten Pseudo-Zufallsgenerator (PRNG). Diese basieren auf deterministischen, und damit vorhersehbaren Algorithmen. Für viele Anwendungsfälle ist das wünschenswert. In der Kryptografie und anderen sicherheitskritischen Anwendungen kann Vorhersehbarkeit aber ein Sicherheitsrisiko darstellen. Andere Bibliotheken (z.B. secrets) greifen auf echte Zufallsgeneratoren (TRNG) zurück, für die dedizierte Hardware notwendig ist.

Bei Interesse lesen Sie eine Einführung in das Thema Zufallsgeneratoren

Detailed

Arbeitsschritte

  • 1 Legen Sie die Datei m_random.py an und benutzen Sie diese Datei für den Rest der Aufgabe. Fügen Sie ihre Python-Kommandos skript-artig hintereinander in die Datei ein, mit Leerzeile getrennt.

Seed für Random festlegen

Ein Seed ist der "Startwert", mit dem der Zufallsgenerator anfängt, Zahlen zu generieren. Dadurch, dass wir einen Seed festlegen, erhalten wir beim Ausführen des gleichen Codes immer die gleichen Zufallszahlen und das Ergebnis wird reproduzierbar.

Wenn Sie keinen Seed angegeben, wird eine echte Zufallsvariable oder ein Timestamp als Seed verwendet. Sie erhalten also bei jeder Ausführung neue Zufallszahlen, was oft erwünscht ist.

  • 2 Importieren Sie das Modul random und legen Sie als Seed propra fest.

Zufallszahlen erzeugen

  • 3 Erzeugen Sie mithilfe von random eine Gleitkommazahl im Bereich von -10 bis 10. Geben Sie das Ergebnis mit print("[-10,10]:\t", ...) aus.
  • 4 Erzeugen Sie eine 4-elementige Liste von zufälligen ganzen Zahlen im Bereich von -1000 bis 1000. Geben Sie das Ergebnis mit print("-1000..1000:\t", ...) aus.
  • 5 Erzeugen Sie eine Liste von 5 normalverteilten Gleitkommazahlen mit Erwartungswert 10 und Standardabweichung 3. Geben Sie das Ergebnis mit print("normalverteilt:\t", ...) aus.

Auswahl aus Sequenzen

  • 6 Ordnen Sie ihre zuvor erzeugte Liste in einer zufälligen Reihenfolge. Geben Sie das Ergebnis mit print("permutiert:\t", ...) aus.
  • 7 Wählen Sie aus dieser Liste zufällig 2 verschiedene Elemente. Geben Sie das Ergebnis mit print("davon 2:\t", ...) aus.
  • 8 Schreiben Sie eine Funktion throw_dice(), die k Würfe eines n-seitigen, gleichverteilten "Würfels" simuliert. Als Ergebnis soll eine Liste mit den geworfenen Zahlen zurückgegeben werden. Verwenden Sie keine Schleife, sondern eine geeignete Funktion aus random.
  • 9 Simulieren Sie mit ihrer Funktion 10 Mal den Wurf eines 6-seitigen Würfels. Geben Sie das Ergebnis mit print("Würfeln:\t", ...) aus.

Programmlauf für die Abgabe

  • 1 Führen Sie das gesamte so erzeugte Programm m_random.py einmal aus.
Program

Abgabe

Geben Sie ein Kommandoprotokoll ab, das genau nur die Eingaben und Ausgaben der obigen Kommandos 1, 2, … enthält. Entfernen Sie vor Abgabe eventuelle Fehlversuche und sonstige zusätzliche Kommandos aus dem Protokoll.

Geben Sie den Quellcode ab, wie er am Ende der Aufgabe vorliegt.