Exkurs 1: Module importieren#

Bisher haben wir ausschließlich Code aus dem Basis-Python und nur sogenannte Built-in-Funktionen verwendet. Das ist der Python-Code, der uns unmittelbar mit jedem Python-Interpreter zur Verfügung steht. Allein damit kann man schon ziemlich viel machen. Man kann das Spektrum an verfügbaren Funktionen usw. aber noch enorm erweitern, wenn man sogenannte Module importiert. Module stellen uns weitere Objekte und Funktionen zur Verfügung, die wir (im aktuellen Programm) nicht selber geschrieben haben, aber anwenden können. Im einfachsten Fall ist ein Modul selbst wiederum ein Python-Skript, in dem jemand nützliche Funktionen definiert hat, sodass wir diese nicht mehr selbst schreiben müssen. Python verfügt über eine sogenannte Standardbibliothek, in der schon eine ganze Reihe nützliche Module vorhanden sind. Manche Module muss man aber auch extra installieren. Wie das funktioniert, schauen wir uns in einem der nächsten Kapitel an. Hier beschränken wir uns darauf, wie man bereits installierte Module aus der Python-Standard-Bibliothek nutzen kann.

Ist ein Modul installiert, heißt es noch nicht, dass es wir es benutzen können. Wir müssen es zunächst in unser Programm importieren. Im Folgenden importiere ich das Modul random:

import random

Alle von random mitgelieferten Objekte und Funktionen sind nun in Python bzw. in der aktuellen “Konsole” (genauer: dem Python-Kernel) geladen, sodass ich diese benutzen kann. Diesen Modul-Import macht man in der Regel zu Beginn eines Programms ganz oben im Skript.

Wir können natürlich auch mehrere Module importieren:

import random
import os

Aufgerufen werden modulspezifische Funktionen usw. indem deren Name hinten an den Modulnamen gehängt werden. Z.B. rufe ich im Folgenden die random-Funktion randint(), welche mir einen zufälligen Integer aus einem Zahlenintervall ausgibt, auf.

random.randint(0, 10)
6

Durch das anhängen der Funktionen usw. an die Modulnamen, bleibt kenntlich, woher diese Funktion ist und es besteht auch nicht die Gefahr, dass wir Funktionen mit demselben Namen beim Import des Moduls überschreiben. Manchmal kann es aber etwas nervig sein, immer den vollen Namen eines Moduls ausschreiben zu müssen. Daher gibt es die Option, Module unter einer (selbstgewählten) Kurzbezeichnung zu laden. Z.B. könnte ich das Modul random auch unter dem Namen rdm laden. Das macht man so:

import random as rdm

rdm.randint(0, 20)
9

Man kann natürlich auch einzelne oder alle Funktionen/Objekte eines Moduls ohne den Modulnamen laden. Das ist aber überhaupt nicht zu empfehlen. Eine spezielle Funktion/Objekt eines Moduls könnte man laden indem man allgemein schreibt from MODULE import OBJECT_NAME

from random import randint

randint(10, 100)
76

Zwei nützliche Funktionen des Moduls random#

Das Modul random ist insgesamt ein super praktisches Modul. Es liefert uns ein paar nützliche Funktionen, mit der wir Zufallszahlen generieren oder Zufallswahlen vollziehen können.

random.random()#

Eine oft gebrauchte Funktion ist die Funktion random(). Nicht verwirren lassen dadurch, dass die Funktion genauso wie das Modul heißt. Die Funktion random() liefert einen Zufalls-float zwischen 0 und 1.

import random

random.random()
0.27564418946799973

Das ist praktisch, wenn man an einer bestimmten Stelle im Programm etwas mit einer bestimmten Wahrscheinlichkeit machen möchte. Möchten wir z.B. mit einer Wahrscheinlichkeit von 0.3 den String "Du hast gewonnen!" printen, dann könnten wir das so machen:

if random.random() <= 0.3:
    print("Du hast gewonnen!")
else:
    print("Niete!")
Niete!

Da die Funtion random() eine (gleichverteilte) Zufallszahl zwischen 0 und 1 ausgibt, wird die von random.random() ausgegebene Zahl mit einer Wahrscheinlichkeit von 0.3 kleiner oder gleich dem Wert 0.3 sein. Wenn wir etwas mit der Wahrscheinlichkeit von 0.3 machen wollen, dann müssen wir also einfach mithilfe eines If-Statements sagen: Wenn der ausgegebene Zufallswert kleiner oder gleich 0.3 ist, dann mache das und das.

random.choice()#

Die Funktion choice() wurde oben schon kurz verwendet, aber nicht erläutert. Diese Funktion zieht ein Element zufällig aus einer Menge z.B. einer Liste. Das ist z.B. praktisch, wenn wir pro Zeiteinheit nur genau einen zufälligen Agenten handeln lassen wollen und daher einen Agenten zufällig aus der Populations-Liste ziehen wollen. Als Argument wird die Menge, aus der gezogen werden soll, in die Funktion choice() eingegeben. Ein Beispiel:

population = ["Agent1", "Agent2", "Agent3"]

agent = random.choice(population)

agent
'Agent2'