Abschnitt 10 · Lektion 1
import
Der Verein fährt mit 47 Leuten zum Ausflug. In einen Kleinbus passen 9, und mit round() kommen 5
Busse heraus. Python hat das passende Werkzeug dabei, nur ist es nicht von Anfang an geladen. Es
steckt in einem Modul, und ein Modul kommt mit einer Zeile import ins Programm. So eine Zeile
stand schon über manchen Aufgaben. In diesem Abschnitt folgen ein paar Werkzeuge, an denen im Alltag
fast jedes Programm hängt.
Wenn Runden nicht reicht
leute = 47
plaetze = 9
print(leute / plaetze)
print(round(leute / plaetze))
print(int(leute / plaetze)) 47 durch 9 sind genau 5.222…, und weder round() noch int() helfen hier weiter. Bei beiden kommt
5 heraus. Mit fünf Bussen bleiben aber zwei Leute auf dem Parkplatz stehen. Es braucht einen
sechsten, auch wenn der fast leer fährt. Aufrunden, sobald etwas übrig bleibt, kann keine der beiden
Funktionen.
So etwas kommt öfter vor, als man denkt. Kartons für einen Umzug, Seiten für einen Ausdruck, Pakete mit Fliesen für ein Bad. Überall gibt es nur ganze Stücke, und ein angefangenes zählt mit.
import
import math
leute = 47
plaetze = 9
print(math.ceil(leute / plaetze))
print(math.ceil(45 / plaetze)) import math holt das Modul (module) math ins Programm. Ein Modul ist eine Sammlung von
Funktionen und Werten zu einem Thema, und math ist die zum Rechnen. Nach dieser Zeile gibt es den
Namen math. Alles darin erreichst du mit einem Punkt dahinter, so wie die Methoden einer Liste.
math.ceil ist also die Funktion ceil aus dem Modul math. Der Name kommt von ceiling, der
Zimmerdecke, weil sie nach oben rundet. 47 durch 9 ergibt damit 6 Busse.
In der zweiten Zeile siehst du, dass sie nur aufrundet, wenn wirklich etwas übrig ist. 45 Leute
passen in genau 5 Busse, und math.ceil(5.0) bleibt 5.
math gehört zur Standardbibliothek (standard library). Das sind die Module, die mit Python
ausgeliefert werden, fast zweihundert Stück, für Datum und Uhrzeit, Zufall, Dateien, Tabellen und
das Netz. Installieren musst du nichts, nur importieren. Was es alles gibt, steht in der
Dokumentation unter docs.python.org, auf Englisch. Meistens kommt man dort schneller ans Ziel, wenn
man nicht nach dem Modul sucht, sondern nach dem, was man tun will. Also „round up“.
Die Zeile mit import steht oben in der Datei, vor allem anderen. Weiter unten ginge sie auch,
solange sie vor der ersten Stelle steht, an der man den Namen braucht. Oben sieht man aber auf einen
Blick, was ein Programm von außen benutzt. Im ersten Abschnitt stand so schon import platform über
dem Code.
Ohne Punkt mit from … import
from math import ceil
print(ceil(47 / 9))
print(math.ceil(47 / 9)) from math import ceil holt nur die eine Funktion, und zwar unter ihrem eigenen Namen. Danach
schreibst du ceil(47 / 9) ohne Modul davor. So steht auch from pathlib import Path aus Lektion
5.3 über vielen Aufgaben. Deshalb heißt es dort Path("ausgaben.txt") und nicht pathlib.Path(…).
Auch pruefen.py fängt in vielen Aufgaben über Funktionen mit einem from … import an.
Den Namen math gibt es danach allerdings nicht. Die zweite Zeile endet mit
NameError: name 'math' is not defined. Did you forget to import 'math'?. Seit Python 3.12 weiß
Python sogar, dass es ein Modul mit diesem Namen gibt, und fragt nach dem fehlenden import.
Passieren tut das fast immer beim Umbauen. Oben stellt man von einer Form auf die andere um und vergisst dann eine Stelle weiter unten.
Welche Form du nimmst, ist Geschmackssache. Wenn du mehrere Dinge aus einem Modul brauchst, liest
sich import math gut, weil man an jeder Stelle sieht, woher sie kommen. from … import passt zu
dem einen Werkzeug, das ständig vorkommt, wie Path. In fremdem Code sieht man auch
import datetime as dt. Mit as bekommt das Modul einen kürzeren Namen, und danach heißt es
überall dt.
Ein Werkzeug fürs Zählen
from collections import Counter
bestellungen = ["Kaffee", "Tee", "Kaffee", "Kakao", "Kaffee", "Tee"]
zaehler = Counter(bestellungen)
print(zaehler)
print(zaehler["Kaffee"], zaehler["Wasser"])
print(zaehler.most_common(2)) In Lektion 7.3 wurde mit einem Dictionary gezählt, wie oft jedes Getränk bestellt wurde, mit einer
Schleife und get(getraenk, 0) + 1. Im Modul collections (Sammlungen) gibt es dafür ein fertiges
Werkzeug. Counter (Zähler) bekommt eine Liste und zählt sie in einer Zeile durch.
Heraus kommt ein Dictionary mit ein paar Extras. Wenn du nach einem Getränk fragst, das niemand
bestellt hat, gibt es 0 statt eines KeyError. Und most_common(2) liefert die zwei häufigsten als
Liste von Paaren.
Im Grunde macht Counter nichts anderes als die Zählschleife von damals. Deshalb lohnt es sich, die
Schleife einmal selbst geschrieben zu haben. Dann weißt du, was in der einen Zeile passiert, und
kannst sie ohne schlechtes Gewissen benutzen.
Was die Aufgabe will
Für eine Renovierung rechnet ein Programm aus, wie viel Farbe jedes Zimmer braucht. Die Wandfläche
stimmt schon. Nur bei den Eimern kommt eine Kommazahl heraus, und Eimer gibt es im Baumarkt nur
ganz. Mit einem Werkzeug aus math stimmt die Zahl.
Zum Mitnehmen
Ein Modul aus der Standardbibliothek kommt mit import ins Programm, etwa math, und seine Funktionen erreichst du dann über einen Punkt. math.ceil(5.2) ergibt aufgerundet 6. Mit from math import ceil fällt der Punkt weg, dafür ist math selbst dann kein bekannter Name mehr.
Jetzt du
Basis Konto, kostenlosZu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.
Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.
In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.
Was in dieser Lektion steckt
-
Artikel mit 4 Beispielen zum Ausprobieren
Steht hier, ohne Konto lesbar.
-
Aufgabe, dein Code läuft auf einem Server
Öffnet sich mit dem Basis Konto.