Python
Inhaltsverzeichnis
Allgemeines
Die Sprache wurde Anfang der 1990er Jahre von Guido van Rossum am Centrum Wiskunde & Informatica in Amsterdam entwickelt.
shebang
Bei Ausführung auf der Shell/Kommandozeile verweist ein "shebang" am Anfang des Skripts auf die Datei, die das Skript ausführen soll. In Linux (Ubuntu) ist dies z. B.
#! /usr/bin/python3
Damit der "shebang" auf allen unixoiden System (z. B. auch Mac) funktioniert, empfiehlt sich die Schreibweise
#! /usr/bin/env python3
Gegebenenfalls muss das Skript vorher aufführbar gemacht werden:
chmod 0755 script.py
Unter Windows wird der "shebang" ignoriert.
IDLE
IDLE ist die IDE des Python-Projekts.
IDLE personalisieren
> Options, Configure IDLE
Verhalten bei F5
Die Aufforderung zu speichern bei der Ausführung einer noch nicht gesicherten Datei abschalten:
- Reiter General, At Start of Run (F5) > No Prompt
History in der IDLE-Shell aktivieren
- Reiter Keys > history-next > Get New Keys for Selection, 'Up Arrow und Down Arrow auswählen und speichern.
Kommandozeile beenden
Die Kommandozeile wird in IDLE, bash oder cmd folgendermaßen beendet:
exit()
oder
quit()
oder
Strg-D
Funktionen
Allgemeines
Funktionsadresse in Variablen speichern
Die Speicheradresse einer Funktion kann man einer Variablen zuweisen.
def zaehleBis10(): zahl = 1 while zahl <= 10: print(zahl) zahl += 1 neueFunktion = zaehleBis10 neueFunktion()
Vorbelegte Parameter
Parameter können vorbelegt und gegebenenfalls beim Funktionsaufruf geändert werden.
def aufsummieren(a = 10): summe = 0 for i in range(1,a + 1,1): summe += i print(summe) return summe aufsummieren(11)
Man kann einzelne Parameter vorbelegen und andere ohne Vorbelegung lassen. Allerdings müssen nach dem ersten vorbelegten Parameter alle weiteren auch vorbelegt sein.
Parameter anhand des Namens übergeben
Wenn man die Namen der Parametervariablen anspricht, braucht man nicht die vorgegebene Reihenfolge zu beachten. Unten stehende Funktionsaufrufe produzieren die gleiche Ausgabe:
def termin(tag, monat, jahr): print("Heute ist der "+str(tag)+"."+str(monat)+"."+str(jahr)) termin(2,11,2019) termin(jahr=2019,monat=11, tag=2) Ausgabe: Heute ist der 2.11.2019 Heute ist der 2.11.2019
Tupel als Parameter
Vor den Parameter wird ein Sternchen gesetzt. Mit Hilfe dieser Konstruktion kann man eine unbegrenzte Anzahl von Werten eingeben:
def aufsummieren(*twert): summe = 0 for i in twert: summe += i print(summe) return summe aufsummieren(2,3,10,9)
Dictionarys als Parameter
Es ist möglich, variable Parameter über Namenszuweisungen anzusprechen. Vor den Parameter werden zwei Sternchen gesetzt:
def dictAlsParameter(**woerterbuch): for wort in woerterbuch: print(wort,woerterbuch[wort]) dictAlsParameter(Name = "Jon",Nachname = "Doe",Wohnort = "Hollywood")
lambda-Funktionen
lambda-Funktionen können anonym sein. Sie enthalten eine implizite return-Anweisung und werden in einer Variablen gespeichert.
>>> rechnen = lambda a, b: a + b >>> rechnen(3,4) 7
format()
name = input("Wie heißt du? ") alter = int(input("Wie alt bist du? ")) print("Du heißt {} und bist {} Jahre alt.".format(name,alter))
[...] Ausgabe:
Du heißt Jon und bist 44 Jahre alt.
String
Ein String, oder Zeichenkette, kann man als eine Sequenz von einzelnen Zeichen sehen.[1]
Auslesen von Zeichen aus der Kette
Über die Indexnummern der Zeichenkette kann man einzelne Zeichen ausgeben lassen:
>>> meinString = "Zeichenkette" >>> print(meinString[0]) Z
Man kann die Indexnummern auch rückläufig verwenden, dann ist [-1] das letzte Zeichen der Kette:
>>> meinString = "Zeichenkette" >>> print(meinString[-2:]) te
>>> print(meinString[:-2]) Zeichenket
Länge des Strings
Die Funktion len gibt die Länge des Strings (Anzahl der Zeichen) zurück:
>>> meinString = "Zeichenkette" >>> len(meinString) 12
>>> len("aha") 3
upper case und lower case
Strings können in Groß- bzw. Kleinbuchstaben umgewandelt werden:
>>> string1 = "hallo" >>> string1 = string1.upper() >>> print(string1) HALLO
>>> string2 = "GUTEN TAG" >>> string2 = string2.lower() >>> print(string2) guten tag
Teilstrings ersetzen mit replace
>>> meinString = "Mein neues Programm" >>> meinString = meinString.replace("neues", "schönes") >>> print (meinString) Mein schönes Programm
Zahlen
Es gibt Ganzzahlen (int), Fließkommazahlen (float) und komplexe Zahlen (complex).
Funktion abs()
abs() liefert den absoluten Wert einer Zahl.
>>> x = -3.25 >>> y = abs(x) >>> print(y) 3.25
Funktion pow()
Diese Funktion berechnet die Potenz x hoch y:
>>> x = 3 >>> y = 4 >>> z = pow(x,y) >>> print(z) 81
Funktion round()
Diese Funktion rundet Dezimalzahlen auf bzw. ab:
>>> round(5.96734959002,2) 5.97
Die Zahl nach dem Komma bezeichnet die Anzahl der "Nachkommastellen")
Modul math
Für die Verwendung der math-Funktionen (ceil, floor, sqrt etc.) muss zuerst das Modul math importiert werden:
import math
bzw.
from math import *
Listen
Die Liste (list) ist ein sequentieller Datentyp. Was Python eine Liste nennt, würde in den meisten anderen Programmiersprachen als Array bezeichnet werden.[2]
extend()
Mit extend() hängt man eine bestehende Liste an eine andere bestehende Liste an:
# language list language = ['French', 'English', 'German'] # another list of language language1 = ['Spanish', 'Portuguese'] language.extend(language1) # Extended List print('Language List: ', language) [3]
Alternativ:
language = language + language1
append()
Mit append() hängt man an eine Liste an ein weiteres Element an:
language = ['French', 'English', 'German'] language.append("Italian")
insert()
insert() fügt mit Hilfe der Indexnummer ein weiteres Element in die Liste ein:
language = ['French', 'English', 'German'] language.insert(1,"Dutch")
Weitere häufig verwendete Listenfunktionen
- remove(x) entfernt das Element x aus der Liste.
- clear() leert die ganze Liste.
- pop() entfernt das letzte Element aus der Liste.
- index(x) sucht das Element x und gibt seine Indexnummer aus
- count(x) zählt, wie oft das Element x in der Liste vorkommt.
- sort() sortiert die Listenelemente.
- reverse() kehrt die Reihenfolge um.
- copy() erstellt einen Klon der Liste: list2 = list1.copy()
Listen sortieren
Funktion sort()
:
liste.sort()
Bubblesort
def bubblesort(x, Index) : for i in range(Index) : for j in range(Index-i-1) : if x[j] > x[j+1] : x[j], x[j+1] = exchange(x[j], x[j+1]);
Beispiel:
bubblesort(liste,6)
print(liste)
Tupel
Tupel (tuple') können so wie Listen über Indexnummern abgerufen werden. Allerdings sind Tupel unveränderlich.
>>> koordinaten = (2,3,4) >>> print (koordinaten[0]) 2
Listen von Tupeln:
>>> tupleListe = [koordinaten, (55,89), (23,9)] >>> tupleListe[0] (2, 3, 4) >>> tupleListe[0][1] 3
Dictionarys
Dictionarys enthalten Schlüssel-Werte-Paare.
>>> meinDict = {"schluessel1" : "wert1", "schluessel2" : "wert2", "schluessel3" : "wert3", "schluessel4" : "wert4", "schluessel5" : "wert5"} >>> print(meinDict["schluessel4"]) wert4 >>> print(meinDict.get("schluessel4")) wert4
Es können verschiedene Datentypen verwendet werden, z. B. auch Zahlen.
Verzweigungen (bedingte Anweisungen)
Bedingter Ausdruck / conditional expression
Man kann eine Bedingung in einer Zeile prüfen:
name = input("Is this a test? ") x = "YES" if name == "Test" else "NO" print(x)
Schleifen
while
x = 1000 while x > 100: print (x, end = ' ') x = x / 2
Ausgabe:
1000 500.0 250.0 125.0
for
>>> z = 1 >>> for i in 'Hallo': print (i * z) z = z + 1 H aa lll llll ooooo
continue
Die Schleife wird unterbrochen:
for i in 'Hello World': if i == 'o': continue print (i, end = ' ') H e l l W r l d
break
Die Schleife wird verlassen:
for i in 'Hello World': if i == 'e': break else: print ("Der Buchstabe 'x' kommt in diesem String nicht vor.")
Es erfolgt keine Ausgabe.
else
Für Kenner anderer Programmiersprachen kurios: Schleifen können mit else abgeschlossen werden. Die Anweisungen im else-Teil werden ausgeführt, sobald die Bedingung nicht mehr erfüllt ist
for i in 'Hello World': if i == 'x': break else: print ("Der Buchstabe 'x' kommt in diesem String nicht vor.")
Ausgabe:
Der Buchstabe 'x' kommt in diesem String nicht vor
Fehler und Ausnahmen
alter = input("Wie alt bist du? ") try: alter = int(alter) except: print("Falsche Eingabe!") else: print("Du bist", alter, "Jahre alt.") finally: print("Programmende")
Spezifizierung des Fehlers:
zahl1 = 150 zahl2 = input("Geben Sie den Divisor an: ") try: zahl2 = int(zahl2) print("Der Quotient ist {}".format(zahl1 / zahl2)) except ValueError: print("Sie müssen eine Zahl eingeben.") except ZeroDivisionError: print("Division durch 0 nicht möglich.") except: print("Ungültiger Wert!")
pyinstaller
Installation Windows
pip install pyinstaller
Installation Ubuntu
apt install python3-pip pip3 install pyinstaller
Bei Fehlermeldung "ModuleNotFoundError: No module named 'pip._internal'":
Kontrolle der Installation:
pip3 -V
Neuinstallation erzwingen:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3 get-pip.py --force-reinstall
Kontrolle der Installation:
pip3 -V
Jetzt funktioniert pip3 install pyinstaller. Sollte analog auch auf Mac funktionieren.
Typographie
>>> herz = u'\u2764' >>> print(herz) ❤
Formatierung
Formatierung von float-Zahlen ("Gleitkommazahlen") auf 2 Nachkommastellen: '%.2f' %
kapital = 22092.442508224092 print('%.2f' % kapital) >>> 22092.44
Kompilieren
Ubuntu
Das Programm pyinstaller muss installiert sein.
pyinstaller /pfadzumskript/skript.py'
pyinstaller -F
erzeugt ein Stand Alone Executable. Dieses liegt dann im Verzeichnis dist des Ordners, von dem aus in der Shell die Kompilierung gestartet wurde.
Windows
- Über cmd vom User-Verzeichnis in das Skript-Verzeichnis wechseln:
cd appdata\local\programs\python\python35\scripts
pip install pyinstaller
pyinstaller c:\pfadzumskript\skript.py
pyinstaller -F
erzeugt ein Stand Alone Executable. Dieses liegt dann im Python-Verzeichnis im Unterordner scripts\dist.
Troubleshooting
Deutsche Sonderzeichen lassen sich in IDLE nicht abspeichern
Entweder an den Anfang des Skripts folgende Zeile setzen:
# -*- coding: utf-8 -*-
bzw.
# -*- coding: cp1252 -*-
oder in IDLE (Shell-Menü) folgende Einstellung vornehmen: Options > Configure IDLE > General > Default Source Encoding > UTF-8
Code liegt in Python 2 vor
>> Umwandlung mit dem Skript 2to3.py. Das Skript liegt im Verzeichnis von Python 2.
Man kann sich 2to3.py natürlich auch in das lokale Verzeichnis legen. Umwandlung mit
python -w 2to3.py py2Datei.py
Links und Quellen
Youtube
Bücher
| |