Python Zufallszahlen: So generierst du Zufallswerte in Python

von: Konstantin

aktualisiert: Feb. 26, 2025

Zufallszahlen sind in der Programmierung extrem nützlich. Egal, ob du ein Spiel entwickelst, Daten simulieren willst oder zufällige Items aus einer Liste ziehen musst – Python bietet dir viele Möglichkeiten. In diesem Artikel zeige ich dir, wie du Zufallszahlen in Python generierst und welche Methoden am besten geeignet sind.

1. Zufallszahlen in Python generieren

1.1 Zufallszahl zwischen 1 und 100

Die einfachste Methode ist random.randint(), um eine ganzzahlige Zufallszahl innerhalb eines Bereichs zu erzeugen:

import random

zufallszahl = random.randint(1, 100)

# Zahl zwischen 1 und 100:
print(zufallszahl)

Anwendungsfälle:

  • Würfeln in einem Spiel (1 bis 6)
  • Zufällige Auswahl eines Gewinners unter 100 Teilnehmern
  • Simulation von Sensorwerten innerhalb eines Bereichs

1.2 Zufallszahl zwischen 0 und 1

Wenn du eine Kommazahl (Float) zwischen 0 und 1 brauchst, dann nutze random.random():

import random

zufallszahl = random.random()

# Zahl zwischen 0.0 und 1.0:
print(zufallszahl)

Anwendungsfälle:

  • Wahrscheinlichkeitsberechnungen (z. B. eine 30%ige Chance auf ein Ereignis)
  • Skalierung von Daten in einen Wertebereich zwischen 0 und 1
  • Simulation von Rauschsignalen

1.3 Zufallszahl aus einer Liste wählen

Möchtest du ein zufälliges Element aus einer Liste auswählen? Dann hilft dir random.choice():

import random

farben = ["Rot", "Blau", "Grün", "Gelb"]
zufallsfarbe = random.choice(farben)

print(zufallsfarbe)

Anwendungsfälle:

  • Auswahl eines zufälligen Gewinnspielpreises
  • Zufällige Auswahl einer Übung aus einer Liste von Workouts
  • Automatische Empfehlung eines Filmes oder Songs

1.4 Zufallszahlen ohne Wiederholung

Falls du mehrere verschiedene Zahlen ohne Wiederholung brauchst, nutze random.sample():

import random

zahlen = random.sample(range(1, 100), 5)

# 5 verschiedene Zahlen zwischen 1 und 99:
print(zahlen)

Anwendungsfälle:

  • Generierung von Lottozahlen
  • Erstellen zufälliger Teams aus einer Teilnehmerliste
  • Verteilung zufälliger Aufgaben an Teammitglieder

1.5 Normalverteilte Zufallszahlen

Für Statistiken oder Simulationen sind normalverteilte Zufallszahlen wichtig. Das geht mit random.gauss():

import random

# Mittelwert 50, Standardabweichung 10:
zufallszahl = random.gauss(mu=50, sigma=10)

print(zufallszahl)

Anwendungsfälle:

  • Simulation von Notenverteilungen in einer Schulklasse
  • Modellierung von natürlichen Schwankungen (z. B. Körpergrößen)
  • Erstellen von realistischen Testdaten

1.6 Seed setzen: Reproduzierbare Zufallszahlen

Damit deine Zufallszahlen immer gleich bleiben (z. B. für Tests), kannst du einen Seed setzen:

import random

random.seed(42)

# immer dieselbe Zahl:
print(random.randint(1, 100))

Warum ist das wichtig?

  • Reproduzierbarkeit in wissenschaftlichen Experimenten
  • Gleiche Ergebnisse für Debugging und Tests
  • Vergleichbarkeit von Algorithmen in maschinellem Lernen

2. Performance: random vs. numpy

Wenn du mit großen Datenmengen arbeitest, ist numpy.random oft schneller als random:

import numpy as np

zahlen = np.random.randint(1, 100, 10)  

# 10 Zufallszahlen zwischen 1 und 99:
print(zahlen)

Den Unterschied kannst du mit dem Python Modul timeit messen. Die nötigen imports übergibst du als Parameter setup an timeit, das eigentliche Code-Snippet wird mit stmt übergeben und mit dem Parameter number bestimmst du die Anzahl an Durchläufen. 

import timeit

zeitmessung_np_import = "import numpy as np"
zeitmessung_np = "np.random.randint(1, 10000, 1000)"

print(timeit.timeit(setup=zeitmessung_np_import,
stmt=zeitmessung_np,
number=1000))
 			 						
# Ausgabe: 0.04300412500015227

zeitmessung_rand_import = "import random"
zeitmessung_rand = "random.sample(range(1, 10000), 1000)"

print(timeit.timeit(setup=zeitmessung_rand_import,
stmt=zeitmessung_rand,
number=1000))
  										
# Ausgabe: 0.4253459169999587 

Im Beispiel habe ich jeweils 1000 zufällige Zahlen zwischen 1 und 10000 gezogen und das 1000 mal wiederholt. Das Ergebnis überzeugt: numpy.random ist 10 mal schneller als random!

Warum ist NumPy schneller?

  • Vektorisierte Operationen optimiert für große Arrays
  • Direktes Arbeiten mit Arrays statt Schleifen
  • Effizientere Speichernutzung

Anwendungsfälle für NumPy-Zufallszahlen:

  • Generierung großer Simulationsdatensätze
  • Modellierung von Zufallsereignissen in wissenschaftlichen Berechnungen
  • Generierung von Testdaten für maschinelles Lernen

3. Fazit

Python bietet eine Vielzahl an Funktionen, um Zufallszahlen zu generieren – von einfachen Zufallswerten bis zu kryptografisch sicheren Zufallszahlen. Hier noch mal die wichtigsten Punkte:

  • random.randint(a, b): Ganze Zufallszahl zwischen a und b
  • random.random(): Zufallszahl zwischen 0 und 1
  • random.choice(liste): Zufälliges Element aus einer Liste
  • random.sample(liste, n): Mehrere zufällige Elemente ohne Wiederholung
  • random.gauss(mu, sigma): Normalverteilte Zufallszahl
  • random.seed(n): Reproduzierbare Zufallszahlen
  • secrets.randbelow(n): Sichere Zufallszahl unter n
  • secrets.choice(zeichen): Sicherer, zufälliger Zeichenstring
  • numpy.random.randint(a, b, size=n): Schnelle Zufallszahlen für große Arrays

Mit diesen Methoden bist du bestens ausgerüstet, um Zufallszahlen effizient zu nutzen!

Teilen: