22,99 €
Du bist neugierig aufs Programmieren und möchtest spannende Projekte mit Python umsetzen? Dann ist das Buch „Python-Projekte für die Praxis“ von Florian Dalwigk genau das Richtige für dich! Als erfolgreicher Content Creator mit über 100.000 Abonnenten auf YouTube und als Autor des Bestsellers „Python für Einsteiger“ weiß Florian Dalwigk, wie man komplexe Themen einfach und anschaulich erklärt. In diesem Buch lernst du alles, was du für den Einstieg in die Programmierung mit Python brauchst. Du entdeckst die Welt der GUI-Programmierung mit Tkinter, lernst, wie man mit APIs arbeitet, und erhältst eine Einführung ins Prompt-Engineering. Ein kleiner Python-Crashkurs hilft dir, die Grundlagen der Programmierung zu wiederholen, bevor es an die spannenden Projekte geht. Doch dieses Buch bietet mehr als nur Theorie. Florian Dalwigk legt großen Wert darauf, dass du das Gelernte direkt in die Praxis umsetzen kannst. Mit vielen abwechslungsreichen Projekten, Coding-Challenges und Aufgaben kannst du dein Wissen vertiefen und sofort anwenden. Programmieren lernt man am besten, indem man tatsächliche Probleme löst – und genau das erwartet dich hier. Ob du Webseiten, API-Anwendungen oder Programme fürs Büro programmieren möchtest, dieses Buch bietet dir die passenden Projekte. Ideal für Einsteiger: Dank vieler Schritt-für-Schritt-Anleitungen und einem kleinen Python-Crashkurs sind keine Vorkenntnisse nötig. Abwechslungsreicher Mix: Neben Textpassagen erwarten dich viele Code-Beispiele, Videos und Challenges. Praxisnah: Mit den zahlreichen Projekten und Aufgaben kannst du dein Wissen sofort anwenden und ein beeindruckendes Portfolio aufbauen. Interaktives Lernvergnügen: Die Projekte sind so gestaltet, dass sie Spaß machen und gleichzeitig deine Fähigkeiten erweitern. Community-Feedback: Dieses Buch ist das langersehnte Werk, das sich Florians Community gewünscht hat. Zögere nicht länger und starte deine Reise in die Welt der Programmierung! Bestell jetzt das Buch „Python-Projekte für Einsteiger“ und entdecke, wie viel Spaß und Erfolg du beim Programmieren haben kannst.
Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:
Veröffentlichungsjahr: 2024
© Florian André Dalwigk
Das Werk ist urheberrechtlich geschützt. Jede Verwendung bedarf der ausschließlichen Zustimmung des Autors. Dies gilt insbesondere für die Vervielfältigung, Verwertung, Übersetzung und die Einspeicherung und Verarbeitung in elektronischen Systemen.
Bibliografische Information der Deutschen Nationalbibliothek.
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.dnb.de abrufbar.
Für Fragen und Anregungen:
ISBN Softcover: 978-3-96967-470-3
ISBN E-Book: 978-3-96967-471-0
Originale Erstausgabe 2024 © by Eulogia Verlags GmbH
Eulogia Verlags GmbH Gerhofstraße 1–3
20354 Hamburg
Lektorat: Sandra PichlerSatz und Layout: Tomasz DębowskiCovergestaltung: Aleksandar Petrović
Alle Rechte vorbehalten. Vervielfältigung, auch auszugsweise, nur mit schriftlicher Genehmigung des Verlags.
1 Einführung
1.1 Willkommen
1.2 Warum Projekte?
1.3 Wie ist dieses Buch aufgebaut?
2 Python-Crashkurs für Einsteiger
2.1 Was ist Python?
2.2 Projekte in Python entwickeln
2.3 Installation von Python
2.4 Installation von pip unter Windows
2.5 Das erste Programm
2.6 Der interaktive Modus
2.7 Variablen und Datentypen
2.8 String-Operationen
2.9 Operatoren und Operatorrangfolge
2.9.1 Die vier Grundrechenarten
2.9.2 Potenzieren
2.9.3 Modulo (Teilen mit Rest)
2.9.4 Vergleichsoperatoren
2.9.5 Logische Operatoren
2.10 Zahlensysteme
2.10.1 Das Dezimalsystem
2.10.2 Stellenwertsysteme
2.10.3 Das Binärsystem
2.10.4 Das Hexadezimalsystem
2.10.5 Little Endian vs. Big Endian
2.11 Bitweise Operatoren
2.11.1 Binärzahlen darstellen
2.11.2 Bitweiseand-Verknüpfung(XZX)
2.11.3 Bitweiseor-Verknüpfung (|)
2.11.4 Bitweisexor-Verknüpfung (^)
2.11.5 Das Einerkomplement
2.11.6 Das Zweierkomplement
2.11.7 Bitweiser not-Operator (~)
2.11.8 Bit-Verschiebung (XZX und XZX)
2.11.9 Operatorrangfolge
2.12 Funktionen
2.12.1 Was sind Funktionen?
2.12.2 Definition von Funktionen
2.12.3 *args und **kwargs
2.12.5 eval
2.13 Interaktion mit dem Benutzer
2.14 Datenstrukturen
2.14.1 Listen
2.14.2 Tupel
2.14.3 Sets
2.14.4 Dictionaries
2.15 Kontrollstrukturen
2.15.1 if-Anweisung
2.15.2 for-Schleife
2.15.3 while-Schleife
2.16 Dateien lesen und schreiben
2.17 Bibliotheken
2.18 Objektorientierte Programmierung
2.18.1 Was ist objektorientierte Programmierung?
2.18.2 Klassen und Objekte
2.18.3 Methoden vs. Funktionen
2.18.4 Vererbung
2.19 Fehler und Ausnahmen
2.19.1 Warum müssen Fehler und Ausnahmen behandelt werden?
2.19.2 try und except
2.19.3 finally
3 Mit Tkinter GUIs bauen
3.1 Hallo Tkinter!
3.2 Widgets
3.2.1 Label
3.2.2 Buttons (Button)
3.2.3 Eingabefelder (Entry)
3.2.4 Textfelder (Text)
3.2.5 Checkboxen (Checkbutton)
3.2.6 Drop-downs (Combobox)
3.2.7 Frames
3.2.8 packvs. grid
3.3 Benachrichtigungsfenster
3.3.1 Infobox
3.3.2 Warn-Box
3.3.3 Error-Box
3.3.4 Entscheidungsbox
3.4 Filedialoge
3.4.1 Dateien öffnen
3.4.2 Dateispeicherort festlegen
4 API-Projekte
4.1 Was ist eine API?
4.2 HTTP
4.3 JSON
4.4 Wo ist die ISS? ★ ☆ ☆
4.5 NASA Astronomy Picture of the Day ★ ☆ ☆
4.6 Wie lautet deine IP-Adresse? ★ ★ ☆
4.7 Meme Me! ★ ☆ ☆
4.8 Give me a GIF! ★ ★ ☆
4.9 Süße Hunde! ★ ★☆
4.10 Chuck-Norris-Witze ★ ☆ ☆
4.11 Ein Chatbot mit ChatGPT ★ ★ ☆
4.12 Ein lokaler Chatbot OHNE ChatGPT ★☆☆
4.13 Speech to Text ★ ★ ☆
4.14 Bildgenerierung mit ChatGPT ★ ★ ☆
4.15 OpenPGP Keys herunterladen ★ ☆ ☆
5 Programme fürs Büro
5.1 Dein eigener Zufallszahlengenerator ★ ★ ☆
5.2 Urlaubsfotos skalieren ★ ☆ ☆
5.3 PDF-Merger ★ ☆ ☆
5.4 PDF-Remover ★ ★ ☆
5.5 QR-Code-Generator ★ ☆ ☆
5.6 WiFi per QR-Code ★ ★ ☆
5.7 Morsecode-Generator ★ ☆ ☆
5.8 Hörbarer Morsecode ★ ★ ☆
5.9 NATO-Alphabet ★ ★ ☆
5.10 Mouse Jiggler ★ ☆ ☆
5.11 E-Mail-Client ★ ★ ☆
5.12 Vergiss nicht zu trinken! ★ ☆ ☆
5.13 YouTube-Werbung überspringen ★ ★ ☆
6 Web-Projekte
6.1 Deine erste Webseite mit Flask ★ ★ ☆
6.2 Hidden Service im Dark Web ★ ★ ☆
6.3 TODO-Liste ★ ★ ☆
7 Gaming
7.1 Memory★ ★ ☆
7.2 Sudoku-Solver ★ ★☆
7.3 Sudoku-Generator ★ ★ ☆
7.4 Teste deine Reaktionsfähigkeit! ★ ☆ ☆
8 IT-Sicherheit
8.1 Passwort-Generator★ ★ ☆
8.2 PDF Protector ★ ★ ☆
8.3 Dein eigener Passwortmanager ★ ★ ★
8.4 Verschlüsselte E-Mails versenden ★ ★ ★
9 Prompt-Engineering
9.1 Code mit ChatGPT generieren
9.2 Was ist Prompt Engineering?
9.3 Anatomie eines Prompts
9.4 Custom Instructions
9.5 Prompts für verschiedene Use Cases
9.5.1 Beantworten von Fragen
9.5.2 Textzusammenfassung
9.5.3 Codegenerierung
9.6 Techniken des Prompt Engineerings
9.6.1 Zero-Shot Prompting
9.6.2 Few-Shot Prompting
9.6.3 Chain-of-Thought Prompting
9.6.4 Zero-Shot und Few-Shot Chain-of-Thought Prompting
9.7 Prompt-Engineering: Ein Anwendungsbeispiel
10. Sammle alle 120 Sterne!
Fußnoten
1.1 Willkommen
print("Hallo liebe Leserin, hallo lieber Leser!)
Vielen Dank, dass du dich für mein Buch „Python-Projekte für die Praxis“ entschieden hast, um dein Wissen in der Python-Programmierung zu festigen und spannende Projekte umzusetzen. Nach dem Erfolg meines Buchs „Python für Einsteiger“ haben sich viele (mich eingeschlossen) einen Nachfolger gewünscht. Aus dem Feedback, das mich u. a. per E-Mail ([email protected]) erreicht hat, ist ein Themenwunsch immer wieder aufgetaucht: grafische Benutzeroberflächen.
Das ist nicht wirklich überraschend, denn gerade als Einsteiger in die Programmierung möchte man schnell etwas „sehen“ und Ergebnisse vorzeigen können. Und das funktioniert nun einmal am besten, wenn man ein Programm startet und direkt mit einer grafischen Oberfläche wie der folgenden begrüßt wird:
Abbildung 1.1-1: Beispiel für eine grafische Oberfläche.
Das ist übrigens eine GUI, die wir im Rahmen des Projekts aus Kapitel 4.13 entwickeln werden. Apropos Projekte: Diese sind ein sehr wichtiger Bestandteil dieses Buchs. Damit für jeden etwas dabei ist, setze ich mit dir gemeinsam insgesamt über 35 Projekte aus fünf verschiedenen Themenbereichen um. Diese reichen von einfachen API-Projekten über Spiele bis hin zu Projekten aus dem Bereich der IT-Sicherheit.
1.2 Warum Projekte?
Das Erlernen bzw. Festigen einer Programmiersprache wie Python durch Projekte ist eine effektive Methode, um die vielen Bausteine wie Variablen (Kapitel 2.7), Listen (Kapitel 2.14.1) oder if-Anweisungen (Kapitel 2.15.1) zu einem Gesamtbild zu verknüpfen. Theorie ist wichtig, aber die praktische Anwendung des erlernten Wissens verankert die Konzepte viel besser im Gedächtnis. Durch Projekte wendest du das Gelernte an und siehst direkte Ergebnisse, was gerade für einen Einsteiger in die Python-Programmierung äußerst wichtig ist. Beim Arbeiten an Projekten stößt man früher oder später auch auf Probleme und muss dafür Lösungen finden. Das fördert die eigenen Problemlösungsfähigkeiten. Aus Erfahrung kann ich dir sagen: Programmieren lernt man am besten, indem man tatsächliche Probleme löst. Durch Projekte kann man sich außerdem ein Portfolio aufbauen, das potenziellen Arbeitgebern die eigenen Fähigkeiten und das erworbene Wissen demonstriert. Das sind nur einige der vielen Gründe, weshalb es sinnvoll ist, Programmieren durch Projekte zu lernen. Eine solide Basis ist aber trotzdem wichtig und deshalb erhältst du in Kapitel 2 einen kleinen Crashkurs in die Python-Programmierung. Der Fokus dieses Buchs liegt jedoch auf dem praktischen Teil in Form der bereits angesprochenen Programmierprojekte.
Alle Projekte in diesem Buch folgen einer bestimmten Struktur, die wir uns nun genauer anschauen werden, damit du einen Leitfaden hast, an den du dich halten kannst.
Jedes Projekt beginnt mit einer Box, in der du verschiedene Informationen findest:
Projektname: IPinfo
Schwierigkeit: ★ ★ ☆
Zielsetzung: Entwicklung eines grafischen Programms, mit dem man seine IP-Adresse abfragen und sich, basierend auf der IP-Adresse, den ungefähren Standort auf einer Karte ausgeben lassen kann.
Benötigte Bibliotheken: tkinter, requests, webbrowser, folium
Themen: Arbeiten mit APIs, Exception-Handling, Funktionen, GUI-Programmierung mit Tkinter
Code: /projekte/01_api/03_ipinfo.py
■ Projektname: Das ist der Name des Projekts. Dieser kann sich vom jeweiligen Kapitelnamen unterscheiden und ist als Arbeitstitel zu verstehen. Du kannst die Programme natürlich nach deinen persönlichen Vorlieben benennen. Der hier gezeigte Projektname lautet IPinfo.
■ Schwierigkeit: Dieses Feld gibt den Schwierigkeitsgrad an, den das Projekt hat. Insgesamt können drei Sterne vergeben werden:
☐ ★ ☆ ☆ meint einen leichten Schwierigkeitsgrad.
☐ ★ ★ ☆ meint einen mittleren Schwierigkeitsgrad.
☐ ★ ★ ★ meint einen hohen Schwierigkeitsgrad.
Das Projekt IPinfo hat also einen mittleren Schwierigkeitsgrad (★ ★ ☆).
■ Zielsetzung: In diesem Feld wird kurz beschrieben, was das Ziel des Projekts ist. In IPinfo geht es um die Entwicklung eines grafischen Programms, mit dem man seine IP-Adresse abfragen und sich, basierend auf der IP-Adresse, den ungefähren Standort auf einer Karte ausgeben lassen kann.
■ Benötigte Bibliotheken: Dieses Feld listet auf, welche Bibliotheken für die Umsetzung des jeweiligen Projekts erforderlich sind. Wenn ein Modul nicht zur Standardbibliothek von Python gehört, dann wird im Laufe des Projekts erklärt, wie man sich diese Bibliotheken mit pip (Kapitel 2.4) herunterladen und installieren kann. Für IPinfo werden die Bibliotheken tkinter, requests, webbrowser und folium benötigt.
■ Themen: In diesem Feld werden alle Themen aufgelistet, die man sich im Rahmen der Programmierung mit Python schon einmal angeschaut haben sollte bzw. um die es geht. Keine Sorge: Der gesamte Code eines jeden Projekts wird Zeile für Zeile erklärt, sodass du ihnen auch bei eventuellen Wissenslücken folgen kannst. Für IPinfo sind das die Arbeit mit APIs, Exception-Handling, Funktionen und die GUI-Programmierung mit Tkinter.
■ Code: In diesem Feld wird angegeben, wo du das Programm im .zip-Ordner zu diesem Buch (den Link findest du direkt im nächsten Kapitel 1.3) herunterladen kannst.
Nach diesen allgemeinen, kurz und knapp zusammengefassten Informationen folgt eine kleine Einführung ins Thema. Das kann von ein bisschen theoretischem Hintergrundwissen bis hin zu einer umfassenden Einführung reichen, wie es bspw. beim Erlernen des Morsecodes in Kapitel 5.7 der Fall ist.
Im Anschluss daran überlegen wir uns Schritt für Schritt, wie wir bei der Umsetzung des Projekts vorgehen. Wir definieren in einer Aufzählung,
1. für welche Bibliothek(en) wir uns bei der Umsetzung entscheiden,
2. wie wir algorithmisch vorgehen und
3. welche Funktionalitäten wir in unserem Programm wann umsetzen.
Falls im Rahmen des Projekts eine GUI entwickelt werden soll, wird diese direkt nach der Klärung der Vorgehensweise präsentiert und beschrieben.
Bevor es an die eigentliche Implementierung geht, stellen wir sicher, dass alle Bibliotheken installiert sind. In diesem Abschnitt erfährst du, welche Bibliotheken bereits zur Standardbibliothek gehören und welche nicht. Wenn du es dir einfach machen möchtest, kannst du die requirements.txt-Datei, die sich im .zip-Ordner zu diesem Buch unter /projekte/ befindet, verwenden, um dir alle Bibliotheken auf einmal zu installieren. Wie das geht, erfährst du am Ende von Kapitel 2.4.
Danach werden wir uns ausführlich mit dem Code beschäftigen. Jede Codezeile wird erklärt, damit am Ende hoffentlich keine Fragen mehr offenbleiben. Den Code zu allen Projekten findest du in dem bereits angesprochenen .zip-Ordner zu diesem Buch unter /projekte/.
Sobald das Programm fertigimplementiert ist, probieren wir es einmal aus. Dabei erfährst du, wie man das Programm startet und kannst überprüfen, ob es so funktioniert, wie du es dir vorgestellt hast.
Am Ende eines jeden Projekts wartet eine kleine Challenge auf dich, die du lösen kannst, um noch etwas mehr aus dem Projekt zu machen. Ich habe bewusst auf eine ausführliche Lösung für diese Challenges verzichtet, damit du dich selbst kreativ austoben kannst und nicht durch einen Blick in die Musterlösung zu stark inspiriert wirst. Es ist aber durchaus erlaubt (und auch gewollt), dass du dein Wissen aus Kapitel 9 zum Prompt-Engineering einsetzt.
1.3 Wie ist dieses Buch aufgebaut?
In diesem Kapitel schauen wir uns an, wie dieses Buch inhaltlich und strukturell aufgebaut ist. Anders als bei den meisten „gedruckten Tutorials“ erwartet dich hier ein abwechslungsreicher Mix aus Textpassagen, vielen (Code-)Beispielen, Videos und Challenges bzw. Projektideen. Aber alles der Reihe nach.
In den Textpassagen wird dir ein Sachverhalt mithilfe von Worten erklärt. Ein Buch, in dem es um die Entwicklung von Projekten in einer bestimmten Programmiersprache geht, unterscheidet sich jedoch in mehr als einer Hinsicht von klassischer Literatur. Deshalb ist es wichtig, sich diesen besonderen Anforderungen anzupassen. Dafür habe ich eine eigene Formatierung entworfen, die dir das Lesen erleichtern soll und die sich bereits in meinem Buch „Python für Einsteiger“ bewährt hat. Ein Kapitel wird fett gedruckt und unterstrichen. Dasselbe gilt auch für Beispiele. Die Nummern hinter Kapiteln und Beispielen helfen dir dabei, sie schnell im Buch nachzuschlagen. Auch Abbildungen und Tabellen werden nummeriert. Code und Sprachelemente von Python werden in einer Schriftart notiert, die wie Quellcode aussieht. Wenn also von dem Keyword and, im Code verwendeten Variablen oder einer if-Anweisung die Rede ist, dann findest du (auch im Fließtext) entsprechende Schriftartenwechsel. Apropos Code: Wenn etwas programmiert wird, dann findest du bei längeren Passagen entsprechende Zeilennummern am Anfang:
Diese werden, wenn es sich um zusammenhängende Codestücke handelt, auch über eingeschobene Textpassagen hinweg logisch fortgeführt:
3
print(f"Die Antwort lautet {number}!")
Wenn innerhalb des Textes auf eine Codezeile, z. B. die Variable number in Zeile2, hingewiesen wird, dann ist dieser Verweis fett gedruckt. Das hilft dir dabei, auf Anhieb die wichtigen Codezeilen in dem ganzen Geschreibsel zu finden. Wird in einer Code-Passage mal keine Zeilennummer angegeben, dann handelt es sich entweder um einen Befehl, der in die Eingabeaufforderung geschrieben wird, oder um eine Fehlermeldung.
Mit den Code-Schablonen werden dir im Python-Crashkurs (Kapitel 2) Werkzeuge an die Hand gegeben, die dich beim Programmieren unterstützen sollen. Dadurch bekommst du ein besseres Gespür dafür, wie ein neues Programmierkonzept, bspw. eine for-Schleife (Kapitel 2.15.2), umgesetzt wird. Das könnte dann folgendermaßen aussehen:
for <Variable> in <Sequenz>:
<Anweisung 1>
<Anweisung 2>
...
<Anweisung n>
Im Regelfall schließen daran Beispiele an, die dir zeigen, wie die Code-Schablone praktisch angewendet werden kann. Beispiel gefällig?
Beispiel 2.3.1: Um eine for-Schleife zu verwenden, ersetzt du <Variable> durch einen passenden Variablennamen und <Sequenz> durch eine Datenstruktur (Kapitel 2.14) oder einen Iterator. Dahinter werden dann einzelne <Anweisungen> eingerückt:
1
for number in range(10):
2
print(number)
Wenn es sich um ein zusammenhängendes Programm bzw. Projekt handelt, befindet sich rechts über der ersten Zeile der Name des Programms, wie hier im Folgenden z. B. programmname.py:
programmname.py
1
import tkinter as tk
Ein Bild sagt mehr als tausend Worte. Und ein Video mit 30 FPS1 sagt sogar noch dreißigmal mehr pro Sekunde aus. Deshalb habe ich dir für Sachverhalte, die sich in einer Animation leichter erklären lassen, Videos erstellt, die über einen QR-Code erreichbar sind:
https://florian-dalwigk.com/python-projekte/überraschungsvideo
Diesen QR-Code kannst du bspw. mit deinem Smartphone einscannen und gelangst entweder zu einem Video auf meinem YouTube-Kanal oder zu weiteren Ressourcen, die für dieses Buch sehr hilfreich sind. Ich weiß bspw. aus Erfahrung, wie nervig und zeitraubend es sein kann, Code-Beispiele und Projekte erst abtippen zu müssen. Das kostet nur deine wertvolle Zeit und bringt dich bedingt bis gar nicht weiter. Deshalb kannst du dir alle Beispiele, Projekte und Lösungen zu den Übungsaufgaben über den folgenden QR-Code herunterladen:
https://florian-dalwigk.com/python-projekte/python_code_download
Unter einem QR-Code befindet sich auch immer noch einmal der Link, über den du ebenfalls zu den Videos und Ressourcen gelangst. Das ist vor allem dann hilfreich, wenn du gerade keinen QR-Code-Scanner zur Hand hast oder dieses Buch auf deinem Smartphone liest.
So viel zur Typografie und den einzelnen Bausteinen, die dir die Arbeit mit diesem Buch erleichtern sollen. Dann kommen wir nun zu den Inhalten. Wie ist dieses Buch inhaltlich aufgebaut?
Wir beginnen in Kapitel 2 mit einem kleinen Python-Crashkurs, damit du noch einmal die wichtigsten Themen aus „Python für Einsteiger“ wiederholen kannst. Dieser Crashkurs ist aber auch für diejenigen geeignet, die bisher noch nicht so viel mit Python am Hut hatten und sich einen schnellen Einstieg wünschen.
Danach werden wir uns in Kapitel 3 mit einem der wohl wichtigsten Themen in diesem Buch beschäftigen, das bei der Umsetzung der einzelnen Projekte immer wieder auftaucht, nämlich die Entwicklung von GUIs mithilfe von Tkinter. Tkinter ist ein Toolkit, das für die Entwicklung grafischer Benutzeroberflächen in Python eingesetzt werden kann. Du bekommst in diesem Kapitel eine Einführung in die wichtigsten Elemente von Tkinter und wie man sie richtig einsetzt, damit du keine Probleme bei der Implementierung der Projekte bekommst.
In Kapitel 4 beschäftigen wir uns mit den ersten Projekten, die sich um APIs drehen. Dabei handelt es sich um Programmierschnittstellen, über die man Informationen abfragen kann, bspw. den aktuellen Standort der ISS (Kapitel 4.4) oder süße Hunde (Kapitel 4.9). In insgesamt zwölf API-Projekten lernst du verschiedene Aspekte und Techniken zur Arbeit mit APIs kennen.
Daran schließt Kapitel 5 an, in dem wir Programme fürs Büro entwickeln. Damit ist sowohl das Büro im Arbeitskontext als auch der eigene Rechner im Allgemeinen gemeint. In insgesamt 13 Projekten entwickeln wir u. a. einen eigenen Zufallszahlengenerator (Kapitel 5.1), einen QR-Code-Generator (Kapitel 5.5) und einen E-Mail-Client (Kapitel 5.11).
In Kapitel 6 dreht sich alles um die Entwicklung von (einfachen) Webseiten mit dem Python-Framework Flask. Neben einer kleinen Einführung in Flask (Kapitel 6.1) wirst du eine kleine Flask-Webseite als Hidden Service im Tor-Netzwerk bereitstellen (Kapitel 6.2) und eine TODO-App (Kapitel 6.3) bauen.
Nach den ganzen Anstrengungen ist es an der Zeit, dass du dir eine kleine Pause gönnst. Nutze dafür doch Kapitel 7 und programmiere ein paar Spiele, z. B. ein Memory-Spiel (Kapitel 7.1), einen Sudoku-Generator (Kapitel 7.3), oder teste deine Reaktionsfähigkeit (Kapitel 7.4). Insgesamt warten vier Spieleprojekte auf dich.
Wir schließen den Projektteil dieses Buchs mit Programmen aus dem Bereich der IT-Sicherheit (Kapitel 8). Dort wirst du u. a. einen grafischen Passwort-Generator (Kapitel 8.1) und einen eigenen Passwortmanager (Kapitel 8.3) entwickeln.
Da künstliche Intelligenz (KI) spätestens seit Ende 2022 ihren Weg in den Arbeitsalltag vieler Programmierer gefunden hat und Prompting-Skills immer wichtiger werden, beschäftigen wir uns in Kapitel 9 ausführlich mit dem Thema Prompt-Engineering. Du lernst, wie man „richtig“ promptet, um schnell an seine gewünschten Ergebnisse zu kommen. Am Ende dieses Kapitels bist du in der Lage, kleinere und größere Programmierprobleme effizient von ChatGPT lösen zu lassen und die Challenges, die am Ende eines jeden Projekts aus diesem Buch auf dich warten, KI-gestützt zu lösen.
Kapitel 10 bildet den Abschluss dieses Buchs. Dort erhältst du noch einmal einen Überblick über alle Projekte aus diesem Buch und kannst abhaken, welche du bereits abgeschlossen hast und welche noch auf deiner TODO-Liste stehen. Mit jedem gelösten Projekt erhältst du Sterne, die du dir ganz am Ende vergeben kannst. Insgesamt gibt es, wie in Super Mario 64, 120 Sterne zu sammeln.
Also, worauf wartest du noch? Stürze dich in dieses neue Coding-Abenteuer und sammle alle 120 Sterne!
Ich wünsche dir viel Spaß beim Lesen und Coden!
Für meine Robbe.
In diesem Kapitel bekommst du im Schnelldurchlauf die wichtigsten Konzepte der Programmiersprache Python erklärt. Fortgeschrittene Leser haben hier noch einmal die Möglichkeit, ihr Wissen aufzufrischen. Wenn du noch überhaupt keine Vorkenntnisse in der Programmierung hast, empfehle ich dir mein Buch „Python für Einsteiger“, in dem du alle Themen aus diesem Kapitel noch einmal ausführlich mit zahlreichen Beispielen und Übungsaufgaben erklärt bekommst. Wir werden in diesem Kapitel aber auch sehr viele neue Module und Programmierkonzepte kennenlernen, die in „Python für Einsteiger“ nicht behandelt wurden.
2.1 Was ist Python?
Python ist eine Skript-Programmiersprache, die interpretiert wird. Sie unterstützt die üblichen Programmierparadigmen wie bspw. die objektorientierte, die funktionale oder die prozedurale Programmierung. Nachdem Python Anfang der 1990er Jahre in der Version 1.0 erschienen ist, wurde im Jahr 2000 die Version 2.0 veröffentlicht und fortan kontinuierlich weiterentwickelt. Mit Python 3 sollten u. a. die Syntax weiter vereinfacht und Redundanzen bzw. Wiederholungen im Code verringert werden. Viele große Unternehmen wie Meta sind von Python 2 auf Python 3 umgestiegen. Bei der Plattform Instagram entschied man sich 2017 für einen nahezu vollständigen Wechsel auf Python 3. Ein Grund dafür war die Unterstützung der statischen Typisierung in Python 3.5, wodurch man einige Konflikte, die im Laufe der Entwicklung und auch beim Lernen einer Programmiersprache entstehen, vermeiden kann. Zudem wird mit jeder neuen Version die Laufzeitumgebung optimiert und auch die Community schwenkt immer mehr auf Python 3 um. Das liegt vor allem daran, dass die Python-Software Foundation, die hinter dem Open-Source-Projekt der Programmiersprache Python steht, seit dem 01.01.2020 keine Veränderungen mehr an Python 2 in seiner finalen Version 2.7 vornimmt.
Um möglichst nah am Zahn der Zeit zu operieren, arbeiten wir in diesem Buch mit Python 3. Die aktuelle Version ist Python 3.12.1. Diese kann möglicherweise zur Erstveröffentlichung dieses Buchs veraltet sein. Das macht aber nichts, denn die Installationsschritte aus Kapitel 2.3 bleiben die gleichen.
2.2 Projekte in Python entwickeln
Egal, ob Spieleentwicklung, Deep Learning oder Data-Science: Python findet man mittlerweile in sehr vielen Bereichen der Informatik. Python ist durch seine einfache Syntax und zahlreiche Bibliotheken hervorragend für die Entwicklung kleinerer Programme zur Automatisierung verschiedener Aufgaben geeignet. So lassen sich bspw. mit dem Modul requests innerhalb von wenigen Zeilen Code Anfragen an APIs (Kapitel 4.1) stellen und die Antworten ins JSON-Format (Kapitel 4.3) umwandeln. Das werden wir in Kapitel 4 anhand vieler Projekte ausführlich behandeln. Wenn wir uns mit der Entwicklung von Webseiten in dem schlanken Python-Webframework Flask beschäftigen, wirst du sehen, wie komfortabel die Arbeit mit einer Sprache ist, die so viele Bibliotheken kostenfrei zur Verfügung stellt und eine starke Community besitzt. Auch die Verschlüsselungsalgorithmen für die Projekte aus Kapitel 8 musst du nicht selbst entwickeln2, sondern kannst auf bereits fertige Lösungen aufsetzen. Und natürlich ist die Entwicklung einer grafischen Oberfläche (GUI) mit der in Python bereits vorhandenen Bibliothek Tkinter (Kapitel 3) sehr einfach, wenn man sich das modulare und logische Grundprinzip beim Bau der GUIs einmal vor Augen geführt hat.
2.3 Installation von Python
Lade dir zuerst den sogenannten Python-Interpreter herunter. Gehe dafür auf die Webseite
https://www.python.org/
Abbildung 2.3-1: https://www.python.org/.
Klicke auf den Reiter Downloads direkt zwischen den beiden Menüpunkten About und Documentation. Danach wird eine neue Seite geladen, auf der du den Button Download Python 3.12.1 findest. Die Zahl 3.12.1 ist die sogenannte Versionsnummer. Diese wird sich mit der Zeit ändern, weil kontinuierlich neue Python-Versionen herauskommen, in denen Fehler behoben und zusätzliche Features eingebaut werden. 3.12.1 ist die Version, mit der wir in diesem Buch arbeiten werden.
Abbildung 2.3-2: Download-Seite für Python unter Windows.
Klicke auf den Download-Button und warte, bis die .exe-Datei vollständig heruntergeladen wurde. Führe anschließend einen Doppelklick auf der Datei durch. Nach einer kurzen Wartezeit öffnet sich der folgende Installationsdialog:
Abbildung 2.3-3: Installationsdialog von Python.
Achte darauf, dass der Haken bei Add python.exe to PATH gesetzt ist. Dadurch wird der Pfad zum Python-Interpreter direkt der Systemumgebungsvariable PATH hinzugefügt. Was soll das denn bedeuten? Ganz einfach! Der Python-Interpreter ist im Endeffekt auch nur ein Programm, das auf deinem Rechner läuft. Damit du nicht jedes Mal in das Installationsverzeichnis wechseln musst, wenn du Python verwenden möchtest, ist es sinnvoll, den Pfad in die sogenannte Umgebungsvariable einzufügen. So kannst du den Python-Interpreter von überall aus aufrufen, indem du den Befehl python verwendest. Dazu später mehr. Klicke, wenn alles wie in Abbildung 2.3-3eingestellt ist, auf Install Now. Die Installation kann ein paar Minuten in Anspruch nehmen. Wenn alles geklappt hat, solltest du das folgende Fenster sehen:
Abbildung 2.3-4: Die Installation war erfolgreich.
Mit einem Klick auf den Button Close unten rechts kannst du den Installationsdialog schließen.
Jetzt testen wir, ob die Installation wirklich erfolgreich war und wir Python verwenden können. Klicke dafür gleichzeitig auf die Windowstaste und R. Dann erscheint das folgende Fenster:
Abbildung 2.3-5: AUSFÜHREN-Fenster
Hier gibst du cmd ein und klickst auf den Button OK. Auf deinem Rechner sollte jetzt ein schwarzes Fenster aufgegangen sein. Das ist die Eingabeaufforderung bzw. Command Prompt, in der bei mir bspw. Folgendes steht:
Microsoft Windows [Version 10.0.22621.1265]
(c) Microsoft Corporation. Alle Rechte vorbehalten.
C:\Users\flo>
In der ersten Zeile wird die genaue Versionsnummer deines Windows-Systems genannt und direkt darunter findet sich ein Copyright-Vermerk von Microsoft. Wichtig ist die unterste Zeile. Dort kannst du deinem Rechner Befehle geben, die dann ausgeführt werden. Tippe dort einfach mal
python -V
oder
python –version
ein und drücke die ENTER-Taste. Wenn die Installation erfolgreich war und der Speicherort des Python-Interpreters korrekt in die PATH-Variable eingebunden wurde, dann müsste dort jetzt die folgende Ausgabe erscheinen:
Python 3.12.1
Die Versionsnummer hinter der Ausgabe python kann bei dir anders sein. Es kommt darauf an, welche Python-Version du installiert hast.
Herzlichen Glückwunsch! Du bist jetzt startklar. Falls du dir die Installation noch einmal als Video anschauen willst, dann scanne diesen QR-Code:
https://florian-dalwigk.com/python-projekte/python_installation_windows
Wenn du die Fehlermeldung
Der Befehl "python" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
erhältst, dann hast du vermutlich vergessen, den Haken Add python.exe to PATH (Abbildung 2.3-3) zu setzen. Keine Sorge! Auch das bekommen wir gelöst. Schau dir dazu am besten das folgende Video an, in dem ich jeden Schritt vorführe, der zum manuellen Ändern der Umgebungsvariable PATH erforderlich ist:
https://florian-dalwigk.com/python-projekte/path_variable_manuell_anpassen
Damit wäre nun alles installiert, was du zum Programmieren mit Python benötigst. Aber wo wird der Python-Code reingeschrieben? Nun, dafür kannst du einen einfachen Texteditor verwenden, der unter Windows „Microsoft Editor“ bzw. „Notepad“ heißt. Um ihn aufzurufen, klickst du auf die Windows-Taste unten links am Bildschirm und tippst in das Suchfeld einfach das Wort editor ein. Dort findest du eine Anwendung mit dem Namen „Editor“, auf die du anschließend draufklickst.
Für die im Buch verlinkten Lernvideos verwende ich zum Programmieren den Editor Visual Studio Code, weil dort Syntax-Highlighting unterstützt wird, d. h., Keywords, Variablennamen, Funktionen etc. werden in unterschiedlichen Farben dargestellt, sodass man als Programmierer den Code besser lesen kann. In dem folgenden Video zeige ich dir Schritt für Schritt, wie du ihn dir unter Windows installieren kannst:
https://florian-dalwigk.com/python-projekte/visual_studio_code_installieren
2.4 Installation von pip unter Windows
In so ziemlich jeder Programmiersprache ist es erforderlich, Pakete zu installieren und zu verwalten. Python bildet da keine Ausnahme. Das Management dieser Pakete übernimmt in Python der Paketmanager pip. Dieser umfasst aktuell 380 000 Projekte, was man auf der offiziellen Webseite
https://pypi.org/
nachlesen kann. Der Name pip ist ein sogenanntes rekursives Akronym, da die Abkürzung selbst in der ausgeschriebenen Form auftaucht. pip steht nämlich für „pip installs packages“. Zu pip gibt es zwar Alternativen wie Conda oder Pipenv, doch da pip am weitesten verbreitet ist, verwenden wir ihn auch in diesem Buch.
Was passiert bei dir, wenn du unter Windows in der Eingabeaufforderung den Befehl pip eingibst? Erscheint dann zufälligerweise die folgende Meldung?
Der Befehl "pip" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Falls ja, musst du pip erst noch installieren. Dafür benötigst du das Programm get-pip.py. Dieses findest du unter der folgenden Adresse:
https://bootstrap.pypa.io/get-pip.py
Lade dir die Datei herunter und speichere sie bspw. auf dem Desktop oder dort, wo du Python installiert hast. Zur Installation von pip musst du das soeben heruntergeladene Programm ausführen. Öffne dafür die CMD und navigiere zu dem Ort, an dem du get-pip.py abgelegt hast. Dort angekommen, rufst du mit dem Befehl python den Python-Interpreter auf und schreibst dahinter den Namen des Programms, das du ausführen möchtest. Welches ist das? Natürlich get-pip.py, mit dem du später auf pip zugreifen kannst:
C:\Users\flo>python get-pip.py
Collecting pip
Downloading pip-22.1.2-py3-none-any.whl (2.1 MB)
---------------------------------------- 2.1/2.1 MB 2.7 MB/s eta 0:00:00
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 22.0.4
Uninstalling pip-22.0.4:
Successfully uninstalled pip-22.0.4
Successfully installed pip-22.1.2
Die Installation kann ein bisschen dauern. Um zu überprüfen, ob alles geklappt hat, öffnest du die Eingabeaufforderung und tippst dort den Befehl pip ein. Wenn du jetzt Informationen darüber erhältst, wie pip zu verwenden ist, dann bist du startklar:
C:\Users\flo>pip
Usage:
pip <command> [options]
Falls du dir die Installation von pip unter Windows noch einmal als Video anschauen willst, dann scanne diesen QR-Code:
https://florian-dalwigk.com/python-projekte/pip_unter_windows_installieren
Die Installation von Paketen mit pip ist denkbar einfach. Alles, was du tun musst, ist, in der CMD den Befehl
pip install <Paket>
einzugeben. Den Platzhalter <Paket> ersetzt du durch den Namen eines Pakets, das du installieren möchtest. Wenn du bspw. das unter Data Scientists sehr beliebte Paket NumPy installieren willst, dann tippst du den Befehl
pip install numpy
in die CMD ein, drückst die ENTER-Taste und schon wird NumPy, bei bestehender Internetverbindung, versteht sich, heruntergeladen und vollautomatisch installiert.
Wenn du dich doch dazu entscheiden solltest, dass NumPy nichts für dich ist, kannst du es jederzeit wieder deinstallieren. Auch das funktioniert über pip. Der Befehl lautet allgemein:
pip uninstall <Paket>
Wenn du NumPy wieder deinstallieren möchtest, gibst du also
pip uninstall NumPy
in die CMD ein. Auch pip selbst lässt sich mit pip deinstallieren:
pip uninstall pip
Davon würde ich dir allerdings dringend abraten, da du dir pip andernfalls neu installieren musst.
Neben NumPy ist im Data-Science-Umfeld auch das Paket Pandas interessant. Wenn du dir gleich beide Pakete holen möchtest, kannst du sie direkt mit Leerzeichen getrennt hinter dem Befehl pip notieren:
pip install numpy pandas
So lassen sich beliebig viele Pakete nacheinander mit nur einer Befehlszeile installieren. Das Hintereinanderschreiben mehrerer Pakete funktioniert natürlich auch analog für die Deinstallation von Paketen:
pip uninstall numpy pandas
Werden mehrere Pakete mit bestimmten Versionen benötigt, tippt man diese für gewöhnlich nicht nacheinander hinter dem Befehl pip ab. Stattdessen liest man eine Liste mit den gewünschten Paketen ein. Angenommen, wir haben eine Textdatei mit dem Namen requirements.txt3, in der die Pakete DateTime, numpy und pandas mit unterschiedlichen Versionen stehen:
requirements.txt
DateTime==4.4
numpy==1.22.4
pandas==1.4.2
Um diese Datei einzulesen und alle darin enthaltenen Pakete in den unterschiedlichen Versionen zu installieren, wird der Befehl
pip install -r requirements.txt
verwendet. Achte darauf, dass du dich mit der Eingabeaufforderung in demselben Verzeichnis befindest, in dem auch die Datei requirements.txt liegt, sonst erhältst du die folgende Fehlermeldung:
ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'
Das bedeutet einfach, dass keine Datei mit dem Namen requirements.txt gefunden wurde.
Wenn du dir anschauen möchtest, welche Pakete du alle via pip installiert hast, kannst du den Befehl
pip freeze
verwenden, der dir alle Pakete auf deinem Rechner untereinanderschreibt. Das sieht dann bspw. wie folgt aus:
C:\Users\flo>pip freeze
DateTime==4.4
numpy==1.22.4
pandas==1.4.2
Kommt dir das bekannt vor? Richtig, diese Pakete hast du vorhin schon in der Datei requirements.txt gesehen. Wenn du die Ausgabe von pip freeze nämlich mit einem > in eine Datei mit dem Namen requirements.txt umleitest, dann kann jeder, der dein Programm nachbauen möchte und dafür bestimmte Pakete benötigt, sich diese mit
pip install -r requirements.txt
automatisch installieren.
Im .zip-Ordner zu diesem Buch findest du unter /projekte/ auch eine requirements.txt, die alle Bibliotheken enthält, die du für die Umsetzung der Projekte aus diesem Buch benötigst. Wenn du alle Bibliotheken auf einmal installieren möchtest, kannst du das mit dem bereits bekannten Befehl
pip install -r requirements.txt
tun und bist dann direkt startklar.
Weitere Optionen, die in pip nutzbar sind, kannst du dir mit dem Befehl
pip -h
oder
pip --help
anzeigen lassen.
2.5 Das erste Programm
Dein erstes Programm, das du in Python schreibst, soll beim Aufruf einfach nur den Text Hallo Python! ausgeben. Dafür ist nur eine Zeile Code erforderlich, in der die Funktion print aufgerufen wird, der wir den Text Hallo Python! als Zeichenkette (String) übergeben:
print("Hallo Python!")
Um das Programm auszuführen, speicherst du den Quelltext in einer Datei mit dem Namen hallo.py ab und rufst es unter Windows über die CMD mit dem Befehl
python hallo.py
auf. Jetzt müsste der folgende Text erscheinen:
C:\Users\flo>python hallo.py
Hallo Python!
In dem folgenden Video kannst du dir alle Schritte, die für das Schreiben und Ausführen eines Python-Programms erforderlich sind, noch einmal anschauen:
https://florian-dalwigk.com/python-projekte/hallo_python_programm
Die Programme werden im Laufe der Zeit noch weitaus komplexer, was es erforderlich macht, seinen Code zu kommentieren. Du musst jetzt nicht anfangen, mit deinem Bildschirm zu reden und ihm zu sagen, wie toll du deinen Code findest. Nein, mit Kommentieren ist gemeint, dass du direkt in die .py-Datei reinschreibst, welche Aufgaben die darin enthaltenen Variablen, Funktionen etc. erfüllen. Kommentare werden mit einem Hashtag # eingeleitet und alles, was dahinter in derselben Zeile steht, wird vom Python-Interpreter ignoriert:
# Die print-Funktion gibt die Nachricht "Hallo Python!" aus.
print("Hallo Python!")
Python ignoriert alles, was hinter dem Hashtag # steht. Wäre das nicht so, dann hättest du beim Aufruf deines Programms den Hinweis bekommen, dass es Fehler enthält. Kommentare müssen nicht direkt über dem Code stehen, sondern können sich auch hinter den Anweisungen befinden:
print("Hallo Python!") # Ausgabe der Nachricht "Python!"
Wenn du drei Anführungszeichen """ notierst, leitest du einen mehrzeiligen Kommentar ein, der genauso beendet wird, wie du ihn begonnen hast, nämlich mit drei Anführungszeichen """:
"""
Dieses Programm begrüßt den Benutzer mit dem Text "Hallo Python!"
Zuerst wird die Funktion 'print' aufgerufen.
In die runden Klammern wird dann eingetragen, was ausgegeben werden soll.
"""
print("Hallo Python!")
2.6 Der interaktive Modus
Bisher haben wir den Quellcode für unsere Python-Programme in eigene Dateien geschrieben und diese über den Befehl python von der Konsole aus aufgerufen. Es gibt jedoch auch die Möglichkeit, den Quellcode direkt in den Interpreter zu schreiben. Diese Form der Ausführung wird „interaktiver Modus“ genannt.
Um in den interaktiven Modus zu gelangen, musst du den sogenannten Python-Prompt öffnen. Dazu gibst du den Befehl pythonohne den Pfad zu einer .py-Datei in der Konsole ein:
python
Schon startet der Python-Prompt. Unter Windows sieht die Ausgabe wie folgt aus:
Python 3.12.1 (tags/v3.12.1:a7a450f, Dec 6 2022, 19:58:39) [MSC v.1934 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Lasse dich von dieser Darstellung nicht abschrecken. Wichtig ist für dich nur die letzte Zeile, in der die drei >>> zu finden sind. Dahinter gibst du die Befehle ein, die direkt vom Python-Interpreter ausgeführt werden. In der ersten Zeile steht, welche Python-Version verwendet wird, hier also 3.12.1. Wenn du dir eine neuere oder ältere Version installierst, steht dort natürlich eine andere Zahl.
Das Programmbeispiel aus Kapitel 2.5 würde im interaktiven Modus wie folgt aussehen:
>>> print("Hallo Python!")
Hallo Python!
>>>
Direkt unter der Befehlszeile erscheint die Ausgabe und du kannst hinter den drei >>> gleich den nächsten Befehl eingeben. Wenn du nicht so gut im Kopfrechnen bist, könntest du dir bspw. 420+180 von Python ausrechnen lassen, indem du diese Addition direkt hinter die drei >>> schreibst:
>>> 420+180
600
>>>
Einfach, oder? Der Python-Prompt wird somit zu einem interaktiven Taschenrechner, mit dem du addieren (+), subtrahieren (-), multiplizieren (*) und dividieren (/) kannst:
>>> 12+30
42
>>> 50-8
42
>>> 6*7
42
>>> 420/10
42
>>>
Wie du siehst, gab es diesmal keine Ausgabe. Das liegt daran, dass im interaktiven Modus nur dann Werte notiert werden, wenn ein Zwischenergebnis berechnet wurde oder du etwas ausgibst. Wenn du nur das x hinter die drei >>> schreibst, wird das darin gespeicherte Zwischenergebnis ausgegeben:
>>> x
5
>>>
Du kannst nun weitere Variablen definieren, die sich Python zusammen mit den vorherigen merkt:
Jetzt können wir mit diesen beiden Variablen rechnen, so wie wir es vorhin mit den Zahlen getan haben:
>>> x + y
12
>>> x - y
-2
>>> x * y
35
>>> y / x
1.4
>>>
Beenden kannst du den interaktiven Modus, indem du die Funktion exit() aufrufst, die Tastenkombination STRG+Z und dann ENTER drückst oder direkt das gesamte Fenster schließt.
2.7 Variablen und Datentypen
Variablen sind ein wichtiger Bestandteil von Programmen. Ohne sie wäre Programmieren sehr langweilig, da man nichts speichern könnte und daher sehr viel tippen müsste. Variablen dienen also als Datenspeicher und werden auf deinem Rechner während der Programmausführung im sogenannten Arbeitsspeicher (RAM4) abgelegt.
Die Leerzeichen können dabei weggelassen werden, allerdings sorgen sie möglicherweise für eine bessere Lesbarkeit des Codes.
Du kannst eine Variable kopieren, indem du sie als <Wert> auf die rechte Seite einer anderen Variablenzuweisung schreibst.
In der Variable mr_robot steht jetzt der Wert der Variable name, also der StringElliot.
Du kannst mehreren Variablen innerhalb einer Zeile Werte zuweisen, indem du sie mit Kommata getrennt hintereinander notierst. Die folgende Code-Schablone zeigt, wie es geht:
Wenn du die Variablenzuweisungen x=2, y=1 und z=3 in einer Zeile vornehmen willst, kannst du das wie folgt erledigen:
Um die Werte zweier Variablen zu vertauschen, kannst du die Variablenzuweisung in einer Zeile verwenden:
Bei der Benennung von Variablen hast du in Python zwar sehr viele Freiheiten, doch es gibt auch hier Regeln, an die du dich halten musst:
■ Am Anfang eines Variablennamens steht entweder ein Buchstabe oder ein Unterstrich. Dahinter kannst du eine beliebige Kombination von Buchstaben, Zahlen und Unterstrichen anhängen.
■ Es dürfen ausschließlich Buchstaben, Zahlen und Unterstriche in Variablennamen verwendet werden. Sonderzeichen sind nicht erlaubt. Dazu zählt auch das Leerzeichen.
■ Keywords dürfen nicht als Variablenname verwendet werden. In Python 3.12 gibt es die folgenden Keywords: 'False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
Auf Basis dieser Regeln sind die folgenden Variablennamen gültig:
h4cker
rockyou
_exploit
p
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
Bei den folgenden Variablennamen gibt es allerdings Probleme:
hacker man # Leerzeichen im Variablennamen
0x42424242 # Die Variable beginnt mit einer Zahl
exploit-dev # In der Mitte befindet sich ein Sonderzeichen
def # Hierbei handelt es sich um ein Python-Keyword
Im Mathematikunterricht lernt man früher oder später verschiedene Zahlentypen kennen. Da gibt es bspw. die natürlichen Zahlen ℕ, die ganzen Zahlen ℤ, die rationalen Zahlen ℚ und die reellen Zahlen ℝ. Im Studium lernt man dann noch die komplexen Zahlen ℂ kennen. Diesem Vorbild folgend gibt es auch in Programmiersprachen verschiedene Datentypen, die eine Variable haben kann. Das hat unter anderem den Hintergrund, dass man mit Zahlen bspw. nicht dasselbe wie mit Zeichenketten machen kann. In Tabelle 2.7-1 werden vier wichtige Datentypen aufgeführt, die man in Python verwenden kann:
Datentyp
Name in Python
Bedeutung
Beispiele
Integer
int
Ganzzahlen
-5, -2, 0, 7, 42
Float
float
Fließkommazahlen
-1.25, -1.0, 0.0, 3.1415926
String
str
Zeichenketten
"Flo", "abc123", "N", "0.5",
'Flo', 'abc123', 'N', '0.5'
Boolean
bool
Wahrheitswerte
True, False
Tabelle 2.7-1: Wichtige Datentypen in Python.
Gegeben seien die folgenden Variablen:
Um herauszufinden, welchen Datentyp eine Variable hat, kannst du die Funktion type verwenden:
5
type(name) # <class 'str'>, also String
6
type(age) # <class 'int'>, also Integer
7
type(weight) # <class 'float'>, also Float
8
type(programmer) # <class 'bool'>, also Boolean
9
type("Flo") # <class 'str'>, also String
Um die Lesbarkeit langer Integer-Werte zu verbessern, kann man Unterstriche _ verwenden:
1
1_000 # Statt 1000
2
42_500 # Statt 42500
3
125_000 # Statt 125000
4
2_350_000 # Statt 2350000
Der Wert eines Integers ändert sich durch die Unterstriche nicht.
2.8 String-Operationen
Da Strings einen sehr komplexen Datentyp darstellen, stellt dir Python eine Vielzahl von Methoden zur Verfügung, die dir das Arbeiten mit ihnen erleichtern. Eine Besonderheit in der Informatik und der Programmierung ist, dass wir stets bei 0 zu zählen beginnen und nicht bei 1. Das hat Auswirkungen auf die Ergebnisse der String-Operationen in diesem Kapitel.
Die folgende Abbildung zeigt, an welchen Positionen sich die einzelnen Zeichen im StringHACKER befinden:
Abbildung 2.8-1: Position der Zeichen im String HACKER
Obwohl der String aus sechs Zeichen besteht, ist die Position des letzten Zeichens (R) 5 und nicht6. Das liegt daran, dass sich das erste Zeichen (H) an der Position 0 und nicht 1 befindet. Statt „Position“ kann man auch „Index“ sagen. Die Mehrzahl von „Index“ ist „Indizes“. Wir werden diese beiden Begriffe fortan synonym verwenden.
Wir schauen uns nun einmal an, wie man einzelne Bestandteile eines Strings, sogenannte „Substrings“, auslesen kann. Dafür verwendest du eckige Klammern [], die du direkt hinter den String schreibst. Um ein einzelnes Zeichen aus einem String auszulesen, schreibst du einfach seine Position in die eckigen Klammern.
"Hackerangriff"[4] # e
In diesem Beispiel wurde der 5. Buchstabe am Index 4 im StringHackerangriff ausgelesen, nämlich das e. Alle String-Operationen lassen sich selbstverständlich auch auf in Variablen gespeicherte Strings anwenden:
Wenn du das i auslesen willst, verwendest du statt der 4 die 10 als Index:
"Hackerangriff"[10] # i
Der Zugriff
"Hackerangriff"[15]
führt zu der folgenden Fehlermeldung:
IndexError: string index out of range
Das liegt daran, dass der StringHackerangriff aus 13 Buchstaben besteht und der Index 15nicht angesprochen werden kann, da er nicht existiert.
Man ist aber nicht nur auf positive Indizes beschränkt, sondern kann auch negative Indizes verwenden. Was passiert dann? Nun, dann wird ganz hinten bei der höchsten Position angefangen und nach vorne durchgezählt:
Abbildung 2.8-2: Indizes der Zeichen im String HACKER (positiv und negativ)
Wenn du also das Zeichen K auslesen möchtest, dann geht das auf zwei verschiedene Arten:
1
"HACKER"[3]
2
"HACKER"[-3]
Neben einzelnen Zeichen ist es auch möglich, zusammenhängende Teile eines Strings mithilfe der eckigen Klammern [] auszuschneiden. Diesen Vorgang bezeichnet man auch als Slicing. Dazu gibst du zwei Indizes an, nämlich einen, bei dem der String startet (Startindex), und einen, vor dem er endet (Endindex). Moment, „vor“ dem er endet? Richtig gelesen! Das Zeichen am Endindex wird nicht mitberücksichtigt. Die beiden Indizes werden innerhalb der eckigen Klammern [] mit einem Doppelpunkt getrennt: [start:ende]
Wenn wir den SubstringACK aus dem StringHACKER ausschneiden wollen, dann ist der Startindex 1 und der Endindex 4 und nicht die 3, weil das Zeichen am Endindex nicht mitzählt:
"HACKER"[1:4]
Das Ergebnis kannst du in einer Variable speichern:
Wenn du an dem SubstringHACK interessiert bist, dann ist der Startindex 0 und der Endindex wieder die 4:
"HACKER"[0:4]
Ein Startindex mit dem Wert 0 muss Python nicht explizit mit angegeben und kann weggelassen werden:
"HACKER"[:4]
Es ist aber nicht falsch, wenn du den Startindex 0 doch hinschreibst. Das Gleiche gilt auch für den Endindex. Wenn der Endindex am Ende des Strings liegt, kann er weggelassen werden. Mit
"HACKER"[1:]
schneidest du den Substring ACKER aus. Wenn du den Start- und den Endindex weglässt, wird das gesamte Wort „ausgeschnitten“:
Um einen Zeilenumbruch bei der Ausgabe eines Strings zu erzeugen, verwendet man \n. Das n steht für newline („neue Zeile“) und der Backslash \ ist ein sogenanntes Maskierungszeichen. Die Anweisung
print("Hallo\nPython!")
liefert
Hallo
Python!
als Ausgabe. Beachte, dass direkt hinter dem \n weitergeschrieben wird, um kein zusätzliches Leerzeichen in den String bzw. die Ausgabe einzubauen. Das bereits erwähnte Maskierungszeichen \ kann auch dazu eingesetzt werden, um Zeichen in einem String zu verwenden, die sonst zu Syntaxfehlern führen würden:
"Das Passwort "abc123" ist nicht gültig."
Dieser Code führt zu der folgenden Fehlermeldung:
SyntaxError: invalid syntax
Das liegt daran, dass mit dem zweiten Anführungszeichen " der StringDas Passwort beendet wird. Darauf folgt für Python direkt eine „in der Luft schwebende“ Variable abc123, die nicht konkateniert wird. Mit dem Maskierungszeichen \ kannst du Anführungszeichen innerhalb eines Strings verwenden:
"Das Passwort \"abc123\" ist nicht gültig."
Um die Länge eines Strings zu ermitteln, kannst du die Funktion len verwenden. Der String wird in die runden Klammern geschrieben, die direkt hinter dem Funktionsnamen len stehen.
len("HACKER") # Ergebnis: 5
Du kannst mit len natürlich auch die Länge einer String-Variable bestimmen und das Ergebnis wiederum in einer Variable speichern:
Wenn du in Erfahrung bringen möchtest, an welcher Position (Index) in einem String ein bestimmtes Zeichen erstmals auftaucht, kannst du die Methode index verwenden. In die runden Klammern der Methode schreibst du dann den Buchstaben, von dem du die Position wissen möchtest.
Beachte, dass es bei der Methode index auf die Groß- und Kleinschreibung ankommt:
"HACKER".index('a')
Da der Buchstabe anicht in HACKER auftaucht, erhält man die folgende Fehlermeldung:
ValueError: substring not found
Weitere String-Funktionen kannst du in der offiziellen Dokumentation nachlesen: https://docs.python.org/3/library/string.html. Wird im Laufe dieses Buchs eine bestimmte String-Funktion benötigt, erkläre ich dir natürlich, wie sie zu verwenden ist.
2.9 Operatoren und Operatorrangfolge
2.9.1 Die vier Grundrechenarten
Wie du bereits in Kapitel 2.7 gesehen hast, kann man Variablen miteinander verrechnen. Insbesondere bei numerischen Datentypen wie Integern und Floats läuft das sehr intuitiv ab. Die vier Grundrechenarten Plus, Minus, Mal und Geteilt gibt es auch in Python.
Die folgende Tabelle gibt Aufschluss darüber, welches Zeichen für die jeweilige Rechenart als Operator verwendet wird.
Rechenoperation
Zeichen in der Mathematik
Zeichen in Python
Addition
+
+
Subtraktion
-
-
Multiplikation
•
*
Division
÷ oder :
/
Tabelle 2.9-1: Vergleich der Zeichen für die Grundrechenarten in der Mathematik und in Python
Die Operatoren +, -, * und / zählen zu den sogenannten arithmetischen Operatoren. Diese können auf Zahlen bzw. numerische Datentypen angewendet werden, für die es in Python bspw. Integer (Ganzzahlen) und Float (Fließkommazahlen) gibt.
Die folgende Code-Schablone zeigt, wie die einzelnen Operatoren syntaktisch zu verwenden sind:
<Summand 1> + <Summand 2>
<Minuend> - <Subtrahend>
<Faktor 1> * <Faktor 2>
<Dividend> / <Divisor>
Die Anwendung der einzelnen Operatoren funktioniert in Python syntaktisch und semantisch wie in der Mathematik.
1
10 + 20 # Das Ergebnis ist 30
2
15 – 5 # Das Ergebnis ist 10
3
80 * 20 # Das Ergebnis ist 1600
4
60 / 10 # Das Ergebnis ist 6.0 (Bei / kommt immer ein Float raus)
5
2.2 + 3.8 # Das Ergebnis ist 6.0
6
4.5 – 1.5 # Das Ergebnis ist 3.0
7
4 * 2.5 # Das Ergebnis ist 10.0
Anstelle von „nackten“ Zahlenwerten kann man auch Variablen verwenden.
Beim Dividieren kann es passieren, dass man von Python sehr viele Nachkommastellen angegeben bekommt, die man eigentlich nicht benötigt. Die Funktion round schafft da Abhilfe. In runden Klammern wird eingetragen, welche Zahl gerundet werden soll, und dahinter, mit einem Komma getrennt, auf wie viele Nachkommastellen zu runden ist.
Führt man die Division 3.5/1.2 in Python durch, dann erhält man das folgende Ergebnis:
2.916666666666667
Um das Ergebnis auf zwei Nachkommastellen zu runden, kann die Funktion round genutzt werden:
round(3.5/1.2, 2) # Ergibt 2.92
Wenn du eine Variable um den Wert 1 erhöhen bzw. verringern möchtest, bezeichnet man das in der Fachsprache auch als Inkrementieren bzw. Dekrementieren. In anderen Programmiersprachen gibt es dafür die Operatoren ++ und --, die direkt hinter den Variablennamen geschrieben werden. In Python gibt es das nicht. Hier musst du etwas machen, das in der Mathematik definitiv falsch aussieht.
Gegeben sei eine Variable a, die den Wert 42 zugewiesen bekommt:
Um die Variable um 1 zu erhöhen, geht man folgendermaßen vor:
Anstelle von
kann man in Python auch
a += 1
schreiben. Analog wird aus
der Ausdruck
a -= 1
Statt 1 kann man auch jeden beliebigen anderen Zahlenwert verwenden. Diese Schreibweise ist auf alle arithmetischen Operatoren übertragbar.
Zwei der arithmetischen Operationen, die du bisher kennengelernt hast, können neben Integern und Floats auch auf Strings angewendet werden, nämlich die Addition + und die Multiplikation *. Zwei Strings können durch ein + miteinander verknüpft werden. Statt Addition sagt man dazu dann Konkatenation. Die Konkatenation ist wirklich so einfach, wie man sie sich vorstellt: Man hat zwei oder mehrere Strings, die einfach direkt hintereinandergeschrieben werden und dadurch einen neuen String ergeben.
1
"hacker" + "man" # Ergibt "hackerman"
2
"s" + "s" + "h" # Ergibt "ssh"
3
"s" + "ftp" # Ergibt "sftp"
Man kann die Strings selbstverständlich auch in Variablen speichern und diese dann konkatenieren.
Beachte, dass du Strings und Zahlen bei der Verwendung des Operators +nicht miteinander mischen darfst, weil du ansonsten die folgende Fehlermeldung erhältst:
TypeError: can only concatenate str (not "int") to str
Wie kann der Operator * bei Strings verwendet werden? Hier ist Vorsicht geboten! Man kann nämlich nicht zwei Strings miteinander multiplizieren, sondern lediglich einen String und einen Integer. Ansonsten erhältst du die folgende Fehlermeldung:
"hallo" * "welt"
>> TypeError: can't multiply sequence by non-int of type 'str'
Der Integer gibt dabei an, wie oft derselbe String hintereinandergeschrieben werden soll.
Gegeben sei die Zeichenkette hacker. Diese kann durch die Multiplikation mit einer Zahl mehrfach hintereinandergeschrieben werden:
1
"hacker" * 3 # Ergibt "hackerhackerhacker"
2
2 * "hacker" # Ergibt "hackerhacker"
Obwohl es in manchen Fällen sinnvoll sein könnte, ist es nicht möglich, Strings zu subtrahieren.5 Auch eine Division ist für Stringsnicht definiert.
2.9.2 Potenzieren
In diesem Kapitel lernst du einen weiteren arithmetischen Operator kennen, nämlich die doppelten Sterne **. Diese stehen für das Potenzieren. Unter Potenzieren versteht man eine mathematische Operation, bei der eine Zahl n-mal mit sich selbst multipliziert wird. Notiert wird das folgendermaßen:
a ist die sogenannte Basis und n der Exponent. Der Exponent gibt an, wie oft die Basis a mit sich selbst multipliziert wird. Die folgende Code-Schablone zeigt, wie man diesen Operator in Python richtig verwendet:
<Basis>**<Exponent>
Natürlich muss man auch hier nicht nur mit „nackten“ Zahlen arbeiten, sondern kann auch Variablen verwenden:
Einen Sonderfall, der direkt aus der Mathematik entspringt, möchte ich an dieser Stelle noch erwähnen. Man kann die Quadratwurzel einer Zahl a auch durch Potenzieren berechnen. Dabei gilt:
Das lässt sich mit dem Operator ** genauso auch in Python umsetzen. Andernfalls müsstest du die Funktion sqrt verwenden, die Teil der Bibliothek math ist.
Wir wollen ohne die Funktion sqrt des Pakets math die Quadratwurzel aus der Zahl 16 ziehen. In Python verwenden wir dazu den Potenz-Operator mit 0.5 im Exponenten:
25**0.5 # Ergibt 5.0
Theoretisch gibt es zwei Lösungen, nämlich -5.0, und 5.0. Python gibt uns die positive Lösung aus.
2.9.3 Modulo (Teilen mit Rest)
Eine mathematische Operation, die vor allem im Bereich der Kryptografie sehr wichtig ist, ist das Teilen mit Rest. Im Fachjargon bezeichnet man das als „Modulo-Rechnung“, die in Python mit einem %-Zeichen realisiert wird. Bei der Integer-Division hast du als Ergebnis der Division nur den Vorkommateil erhalten und es wurde nicht gerundet. Bei der Modulo-Operation interessieren wir uns nur für den Rest r, der bei der ganzzahligen Division von a durch b entsteht.
Die folgende Code-Schablone zeigt, wie der Modulo-Operator % syntaktisch genutzt wird:
<Zahl> % <Modulus>
Schauen wir uns dazu ein paar Beispiele an:
2.9.4 Vergleichsoperatoren
Eine weitere Klasse an Operatoren stellen die sogenannten Vergleichsoperatoren dar. Wie der Name bereits vermuten lässt, werden mit ihnen Werte bzw. Objekte verglichen. In der folgenden Tabelle sind alle Vergleichsoperatoren aufgeführt, die in Python verwendet werden können:
Tabelle 2.9-2: Vergleichsoperatoren in Python.
Das Ergebnis eines Vergleichs ist ein Wahrheitswert vom Datentyp bool, also entweder True oder False. Diese kann man Variablen zuweisen oder sie direkt ausgeben. Die folgende Code-Schablone zeigt, wie man Vergleiche syntaktisch notiert:
<Operand 1> <Vergleichsoperator> <Operand 2>
Schauen wir uns dazu ein paar Beispiele an:
Es soll überprüft werden, ob die beiden Namen "Flo" und "Pam" gleich sind. Was jeder mit einem geschulten Auge sieht, kann man in Python folgendermaßen überprüfen:
2.9.5 Logische Operatoren
Die dritte Klasse von Operatoren in Python sind die logischen Operatoren. Mit ihnen ist es möglich, Wahrheitswerte zu verknüpfen bzw. zu vergleichen. Diese können entweder direkt als Werte (True und False) oder als Ergebnis einer Vergleichsoperation vorliegen. Die Code-Schablone für logische Operatoren sieht folgendermaßen aus:
<Aussage 1> <Logischer Operator> <Aussage 2>
Die logischen Operatoren in Python sind direkt der Aussagenlogik entnommen.
Beginnen wir gleich mit der and-Verknüpfung. Werden zwei Wahrheitswerte a und b mit einem and verknüpft, dann ist das Ergebnis genau dann True, wenn a und b beide True sind. Die folgende Tabelle zeigt, welche Wahrheitswerte in welchen Fällen herauskommen:
and
True
False
True
True
False
False
False
False
Tabelle 2.9-3: Logische Verknüpfungstabelle für die and-Operation.
Beim or-Operator werden zwei Wahrheitswerte a und b mit einem or verknüpft. Das Ergebnis ist genau dann True, wenn a oder bTrue sind. Die folgende Tabelle zeigt, welche Wahrheitswerte in welchen Fällen herauskommen:
or
True
False
True
True
True
False
True
False
Tabelle 2.9-4: Logische Verknüpfungstabelle für die or Operation.
Der nächste logische Operator stellt eine Ausnahme zur bisherigen Operatorverwendung dar, weil hier nur ein Operand benötigt wird. Es handelt sich dabei um den not-Operator, der einen sogenannten unären Operator darstellt. Mit not kann ein Wahrheitswert negiert (also umgekehrt) werden. Die folgende Tabelle zeigt, welche Wahrheitswerte in welchen Fällen herauskommen:
not
True
False
False
True
Tabelle 2.9-5: Logische Verknüpfungstabelle für die not-Operation.
Bei dem nächsten logischen Operator handelt es sich um eine Abwandlung des bereits bekannten or-Operators. Das dahintersteckende Oder kann man auch als Milch-oder-Zucker-Oder bezeichnen. Wenn du nämlich in einem Restaurant einen Kaffee bestellst und dich der Kellner fragt, ob du Milch oder Zucker dazuhaben möchtest, dann hast du auch die Option, beides zu nehmen. Bei dem sogenannten Exklusiv-Oder, um das es jetzt geht, musst du dich für eine Option entscheiden. Im Deutschen würde man von einem Entweder-Oder sprechen: Du kannst entweder die Milch oder den Zucker haben, doch beides gleichzeitig geht nicht (oder nur gegen einen Aufpreis). Das Exklusiv-Oder kennt man in der Programmierung auch unter der Bezeichnung XOR.6 In Python wird dafür ein Zirkumflex ^ verwendet. Die folgende Tabelle zeigt, welche Wahrheitswerte in welchen Fällen herauskommen:
^
True
False
True
False
True
False
True
False
Tabelle 2.9-6: Logische Verknüpfungstabelle für die ^-Operation.
Wie du siehst, funktioniert der ^-Operator fast genauso wie der or-Operator. Der einzige Unterschied besteht in dem Fall True ^ True. Hier greift die Exklusivität und es darf nur einer der beiden Wahrheitswerte True sein, damit die Gesamtaussage True wird. Die XOR-Operation ist insbesondere im Bereich der Kryptografie fundamental wichtig, weil darauf viele Verschlüsselungstechniken fußen.
Schauen wir uns zu den verschiedenen logischen Operatoren mal ein paar Beispiele an:
Eine ausführliche Einführung in das Thema Aussagenlogik kannst du dir in dem folgenden Video anschauen:
https://florian-dalwigk.com/python-projekte/aussagenlogik
2.10 Zahlensysteme
2.10.1 Das Dezimalsystem
Beginnen wir mit den Zahlen, die wir für gewöhnlich in unserem Alltag verwenden, nämlich die sogenannten Dezimalzahlen. Sie sind Teil des Dezimalsystems. Hierbei handelt es sich um ein Zahlensystem zur Basis 10. Wir betrachten die Zahl 42. Diese lässt sich folgendermaßen mithilfe von Zehnerpotenzen ausdrücken:
Die Zahl 123 lässt sich wie folgt mit Zehnerpotenzen schreiben:
Und wie lässt sich die Zahl 1337 mit Zehnerpotenzen ausdrücken?
Erkennst du bereits ein Muster? Eine Dezimalzahl ist die Summe der Produkte von Ziffern und ihren entsprechenden Zehnerpotenzen. Betrachten wir als Beispiel noch einmal die Zahl 123:
102
101
100
1
2
3
2.10.2 Stellenwertsysteme
Wenn wir dieses Prinzip abstrahieren, gelangen wir zu dem Begriff des Stellenwertsystems. Ein Stellenwertsystem ist ein Zahlensystem, bei dem die Bedeutung einer Ziffer xi von ihrer Position i innerhalb der Zahlenfolge xn xn – 1 ... x1 x0 abhängt. Der Zahlenwert ergibt sich durch die Summe der Produkte der Ziffern mit der Potenz der Basis g des Zahlensystems an der entsprechenden Position. Die einzelnen Ziffern können Werte von 0 bis g – 1 annehmen.
Wer es mathematisch ganz besonders abstrakt haben möchte, kann die Summennotation verwenden, um Stellenwertsysteme zu beschreiben:
Für die Darstellung der Dezimalzahl 123 würde sich nach dieser Schreibweise Folgendes ergeben:
Die umgekehrte Reihenfolge der Summanden ändert an dem Ergebnis nichts, da es egal ist, ob du 100 + 20 +3 oder 3 + 20 +100 rechnest. In beiden Fällen kommt 123 heraus. Wenn du die Anordnung der Ziffern in der Zahlenfolge xn xn – 1 ... x1 x0 betrachtest, erkennst du, dass die Theorie zu Stellenwertsystemen schlüssig ist. Merke: Kenntnisse im Bereich der Mathematik sind auch für „Hacker“ wichtig.
2.10.3 Das Binärsystem
Wir betrachten die Bitfolge bzw. Binärzahl 101. Welchen Wert hätte diese Binärzahl im Dezimalsystem? Statt Zehner- verwenden wir diesmal Zweierpotenzen:
Die Binärzahl 1001 besitzt im Dezimalsystem den folgenden Wert:
Wie sieht es mit der Binärzahl 11011 aus?
Das Muster kommt dir bekannt vor, oder? Betrachten wir als Beispiel noch einmal die Binärzahl 101, die wir ins Dezimalsystem überführen wollen:
22
21
20
1
0
1
Für die Umwandlung einer Zahl vom Dezimal- ins Binärsystem gibt es einen einfachen Algorithmus. Als Eingabe erhält er eine Dezimalzahl und als Ausgabe ihre Binärdarstellung.
1. Die Dezimalzahl wird durch 2 geteilt und der Rest notiert.
2. Das Ergebnis aus Schritt 1 wird erneut durch 2 geteilt und der Rest wie in Schritt 1 notiert.
3. Schritt 2 wird so lange wiederholt, bis als Ergebnis 0 herauskommt.
4. Die Reste werden von „unten“ nach „oben“ hintereinandergeschrieben und ergeben somit die Binärdarstellung der eingegebenen Dezimalzahl.
Angenommen, wir wollen die Dezimalzahl 21 ins Binärsystem überführen.
■ Wir teilen 21 durch 2 und erhalten 10 Rest 1.
■ Wir teilen 10 durch 2 und erhalten 15 Rest 0.
■ Wir teilen 5 durch 2 und erhalten 2 Rest 1.
■ Wir teilen 2 durch 2 und erhalten 1 Rest 0.
■ Wir teilen 1 durch 2 und erhalten 2 Rest 1.
Da wir in diesem Schritt als Ergebnis 2
