mitmario.dev

import

Python Sandbox 4 Min Lesezeit 4 BeispieleLektion 1 von 7

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

Kleinbusse für den Ausflug
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

Aufrunden mit math
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

Nur ceil geholt
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

Zählen mit Counter
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, kostenlos

Zu 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.