Rheinwerk Computing < openbook >

 
Inhaltsverzeichnis
1 Einleitung
2 Die Programmiersprache Python
Teil I Einstieg in Python
3 Erste Schritte im interaktiven Modus
4 Der Weg zum ersten Programm
5 Kontrollstrukturen
6 Dateien
7 Das Laufzeitmodell
8 Funktionen, Methoden und Attribute
9 Informationsquellen zu Python
Teil II Datentypen
10 Das Nichts – NoneType
11 Operatoren
12 Numerische Datentypen
13 Sequenzielle Datentypen
14 Zuordnungen
15 Mengen
16 Collections
17 Datum und Zeit
18 Aufzählungstypen – Enum
Teil III Fortgeschrittene Programmiertechniken
19 Funktionen
20 Modularisierung
21 Objektorientierung
22 Ausnahmebehandlung
23 Iteratoren
24 Kontextobjekte
25 Manipulation von Funktionen und Methoden
Teil IV Die Standardbibliothek
26 Mathematik
27 Kryptografie
28 Reguläre Ausdrücke
29 Schnittstelle zu Betriebssystem und Laufzeitumgebung
30 Kommandozeilenparameter
31 Dateisystem
32 Parallele Programmierung
33 Datenspeicherung
34 Netzwerkkommunikation
35 Debugging und Qualitätssicherung
36 Dokumentation
Teil V Weiterführende Themen
37 Anbindung an andere Programmiersprachen
38 Distribution von Python-Projekten
39 Grafische Benutzeroberflächen
40 Python als serverseitige Programmiersprache im WWW – ein Einstieg in Django
41 Wissenschaftliches Rechnen
42 Insiderwissen
43 Von Python 2 nach Python 3
A Anhang
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 464 KB

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Python 3 von Johannes Ernesti, Peter Kaiser
Das umfassende Handbuch
Buch: Python 3

Python 3
Pfeil 26 Mathematik
Pfeil 26.1 Mathematische Funktionen – math, cmath
Pfeil 26.1.1 Zahlentheoretische Funktionen
Pfeil 26.1.2 Exponential- und Logarithmusfunktionen
Pfeil 26.1.3 Trigonometrische und hyperbolische Funktionen
Pfeil 26.1.4 Umrechnen von Winkeln
Pfeil 26.1.5 Darstellungsformen komplexer Zahlen
Pfeil 26.2 Zufallszahlengenerator – random
Pfeil 26.2.1 Den Status speichern und laden
Pfeil 26.2.2 Zufällige ganze Zahlen erzeugen
Pfeil 26.2.3 Zufällige Gleitkommazahlen erzeugen
Pfeil 26.2.4 Zufallsgesteuerte Operationen auf Sequenzen
Pfeil 26.2.5 SystemRandom([seed])
Pfeil 26.3 Präzise Dezimalzahlen – decimal
Pfeil 26.3.1 Verwendung des Datentyps
Pfeil 26.3.2 Nichtnumerische Werte
Pfeil 26.3.3 Das Context-Objekt
 
Zum Seitenanfang

26.2    Zufallszahlengenerator – random Zur vorigen ÜberschriftZur nächsten Überschrift

Das Modul random der Standardbibliothek erzeugt Pseudozufallszahlen und bietet zusätzliche Funktionen, um zufallsgesteuerte Operationen auf Basisdatentypen anzuwenden.

[»]  Hinweis

Das Modul random erzeugt keine echten Zufallszahlen, sondern sogenannte Pseudozufallszahlen. Echte Zufallszahlen sind für einen Computer nicht berechenbar. Ein Generator für Pseudozufallszahlen wird mit einer ganzen Zahl initialisiert und erzeugt aufgrund dieser Basis eine deterministische, aber scheinbar zufällige Abfolge von Pseudozufallszahlen. Diese Zahlenfolge wiederholt sich dabei nach einer gewissen Anzahl von erzeugten Zufallszahlen. Im Falle des in Python standardmäßig verwendeten Algorithmus beträgt diese Periode 219937–1 Zahlen.

Der in random implementierte Generator für Pseudozufallszahlen lässt sich mithilfe der Funktion seed initialisieren:

>>> import random
>>> random.seed(12)

Wenn es sich bei der Seed um eine ganze Zahl handelt, wird der Zufallszahlengenerator direkt mit dieser Zahl, ansonsten mit dem Hash-Wert der übergebenen Instanz initialisiert. Wenn kein Parameter übergeben wird, wird der Zufallszahlengenerator mit der aktuellen Systemzeit initialisiert. Auf diese Weise können die erzeugten Zahlen als quasi-zufällig angesehen werden:

>>> random.seed()

Wird der Zufallszahlengenerator zu unterschiedlichen Zeiten mit demselben Wert initialisiert, erzeugt er jeweils dieselbe Zahlenfolge.

 
Zum Seitenanfang

26.2.1    Den Status speichern und laden Zur vorigen ÜberschriftZur nächsten Überschrift

Die Funktion getstate gibt ein Tupel zurück, das den aktuellen Status des Zufallszahlengenerators beschreibt. Mithilfe der Funktion setstate lässt sich damit der Status des Generators speichern und zu einem späteren Zeitpunkt, beispielsweise nach zwischenzeitlicher Neuinitialisierung, wiederherstellen:

>>> state = random.getstate()
>>> random.setstate(state)

Der Generator läuft dann so weiter, als hätte es die Unterbrechung nicht gegeben.

 
Zum Seitenanfang

26.2.2    Zufällige ganze Zahlen erzeugen Zur vorigen ÜberschriftZur nächsten Überschrift

Zur Erzeugung einer (pseudo-)zufälligen ganzen Zahl existiert die Funktion randint, der die gewünschten Intervallgrenzen übergeben werden können.

>>> random.randint(0, 10)
4

In diesem Fall werden zufällig ganze Zahlen zwischen 0 und 10 erzeugt, wobei die Intervallgrenzen 0 und 10 ebenfalls gültige Ergebnisse sein können.

Etwas mehr Kontrolle über die möglichen Ergebnisse erlaubt die Funktion randrange. Sie gibt ein zufällig gewähltes Element aus dem Zahlenraum zurück, den ein Aufruf der Built-in Function range mit den gleichen Parametern erzeugen würde:

>>> random.randrange(0, 50, 2)
40

In diesem Fall wurde eine zufällige gerade Zahl zwischen 0 und 50 erzeugt.

Eine weitere Möglichkeit zur Erzeugung zufälliger Zahlen ist die Funktion getrandbits, die eine zufällige Bit-Folge festgelegter Länge erzeugt und als ganze Zahl zurückgibt.

>>> random.getrandbits(8)
156

In diesem Fall wurde die Funktion getrandbits verwendet, um ein zufälliges Byte zu erzeugen.

 
Zum Seitenanfang

26.2.3    Zufällige Gleitkommazahlen erzeugen Zur vorigen ÜberschriftZur nächsten Überschrift

Das Modul random enthält einige Funktionen zur Erzeugung einer zufälligen Gleitkommazahl nach einer gewählten Wahrscheinlichkeitsverteilung. Die einfachste dieser Funktionen ist random, mit deren Hilfe eine gleich verteilte Zufallszahl zwischen 0 und 1 erzeugt wird:

>>> random.random()
0.6018018690250143

Die verwandte Funktion uniform erzeugt eine gleichverteilte Zufallszahl innerhalb der angegebenen Intervallgrenzen:

>>> random.uniform(0, 10)
5.044950881560962

Darüber hinaus enthält das Modul random eine Reihe weiterer Funktionen, die Zufallszahlen nach mehr oder weniger exotischen Wahrscheinlichkeitsverteilungen erzeugen. Die bekannteste dieser Verteilungen ist die Normal- oder Gauß-Verteilung. Eine normalverteilte Zufallszahl können Sie folgendermaßen erzeugen:

>>> random.gauss(0, 1)
1.4999823501567913

Dabei werden Erwartungswert (μ) und Standardabweichung (σ) als Parameter übergeben.

 
Zum Seitenanfang

26.2.4    Zufallsgesteuerte Operationen auf Sequenzen Zur vorigen ÜberschriftZur nächsten Überschrift

Das Modul random enthält einige Funktionen, die zufallsgesteuerte Operationen auf Sequenzen durchführen, darunter die Funktion choice, die ein zufälliges Element der übergebenen nicht-leeren Sequenz zurückgibt:

>>> random.choice([1,2,3,4,5])
5
>>> random.choice([1,2,3,4,5])
2
>>> random.choice(["A", "B", "C"])
'B'

Analog zu choice kann choices verwendet werden, um k zufällig gewählte Elemente aus der übergebenen Sequenz zu erhalten:

>>> random.choices(range(100), k=4)
[76, 41, 39, 5]

Die Funktion sample bekommt eine Sequenz population und eine ganze Zahl k als Parameter übergeben. Das Ergebnis ist eine neue Liste mit k zufällig gewählten Elementen aus population. Auf diese Weise könnte beispielsweise eine gewisse Anzahl von Gewinnern aus einer Liste von Lotterieteilnehmern gezogen werden. Beachten Sie, dass auch die Reihenfolge der erzeugten Liste zufällig ist und dass mehrfach in population vorkommende Werte auch mehrfach gezogen werden können.

>>> pop = [1,2,3,4,5,6,7,8,9,10]
>>> random.sample(pop, 3)
[7, 8, 5]
>>> random.sample(pop, 3)
[5, 9, 7]

Die Funktion sample kann insbesondere auch in Kombination mit der Built-in Function range verwendet werden:

>>> random.sample(range(10000000), 3)
[4571575, 2648561, 2009814]

Die Funktion shuffle bringt die Elemente der Sequenz x in eine zufällige Reihenfolge. Beachten Sie, dass diese Funktion nicht seiteneffektfrei ist, sondern die übergebene Sequenz verändert wird. Aus diesem Grund dürfen für x auch nur Instanzen veränderlicher sequenzieller Datentypen übergeben werden.

>>> l = [1,2,3,"A","B"]
>>> random.shuffle(l)
>>> l
[1, 'B', 2, 'A', 3]
 
Zum Seitenanfang

26.2.5    SystemRandom([seed]) Zur vorigen ÜberschriftZur nächsten Überschrift

Das Modul random enthält zusätzlich zu den oben erläuterten Funktionen eine Klasse namens SystemRandom, die es ermöglicht, den Zufallszahlengenerator des Betriebssystems anstelle des Python-eigenen zu verwenden. Diese Klasse existiert nicht auf allen, aber auf den gängigsten Betriebssystemen.

Beim Instanziieren der Klasse kann eine Zahl oder Instanz zur Initialisierung des Zufallszahlengenerators übergeben werden. Danach lässt sich die Klasse SystemRandom wie das Modul random verwenden, da sie die meisten im Modul enthaltenen Funktionen als Methode implementiert.

Beachten Sie jedoch, dass nicht der komplette Funktionsumfang von random in SystemRandom zur Verfügung steht. So wird ein Aufruf der Methode seed ignoriert, während Aufrufe der Methoden getstate und setstate eine NotImplementedError-Exception werfen.

>>> sr = random.SystemRandom()
>>> sr.randint(1, 10)
9

 


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Python 3 Python 3
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Einstieg in Python
Einstieg in Python


Zum Rheinwerk-Shop: Python. Der Grundkurs
Python. Der Grundkurs


Zum Rheinwerk-Shop: Algorithmen mit Python
Algorithmen mit Python


Zum Rheinwerk-Shop: Objektorientierte Programmierung
Objektorientierte Programmierung


Zum Rheinwerk-Shop: Raspberry Pi. Das umfassende Handbuch
Raspberry Pi. Das umfassende Handbuch


Zum Rheinwerk-Shop: Roboter-Autos mit dem Raspberry Pi
Roboter-Autos mit dem Raspberry Pi


Zum Rheinwerk-Shop: Neuronale Netze programmieren mit Python
Neuronale Netze programmieren mit Python


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2020
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern