Python: Unterschied zwischen den Versionen
Flinh1 (Diskussion | Beiträge) (→Methode setdefault()) |
Flinh1 (Diskussion | Beiträge) (→Links und Quellen) |
||
Zeile 1.356: | Zeile 1.356: | ||
* https://docs.python-guide.org/ The Hitchhiker’s Guide to Python | * https://docs.python-guide.org/ The Hitchhiker’s Guide to Python | ||
+ | |||
+ | * http://www.miwilhelm.de/sprachen/python/ | ||
* http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html | * http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html |
Version vom 9. Dezember 2020, 07:15 Uhr
Inhaltsverzeichnis
- 1 Allgemeines
- 2 IDEs
- 3 Funktionen
- 3.1 Allgemeines
- 3.2 Funktionsadresse in Variablen speichern
- 3.3 Vorbelegte Parameter
- 3.4 Parameter anhand des Namens übergeben
- 3.5 Tupel als Parameter
- 3.6 Dictionarys als Parameter
- 3.7 lambda-Funktionen
- 3.8 Rekursion
- 3.9 input()
- 3.10 Umwandlung mit eval()
- 3.11 Mehrere Eingaben
- 3.12 format()
- 3.13 Currying
- 4 String
- 5 Zahlen
- 6 Listen
- 7 Tupel
- 8 Set
- 9 Dictionarys
- 10 Konstanten
- 11 Operatoren
- 12 Verzweigungen (bedingte Anweisungen)
- 13 Schleifen
- 14 Fehler und Ausnahmen / exception
- 15 Lesen und Schreiben von Dateien
- 16 pyinstaller
- 17 Typographie
- 18 Formatierung
- 19 pip
- 20 Kompilieren
- 21 Type Hints
- 22 Jupyter Notebook
- 23 Troubleshooting
- 24 Links und Quellen
- 25 Youtube
- 26 Bücher
Allgemeines
Die Sprache wurde Anfang der 1990er Jahre von Guido van Rossum am Centrum Wiskunde & Informatica in Amsterdam entwickelt.
Ein Online-Interpreter befindet sich auf
- repl.it
Hier kann man sich ein Login erstellen. Man kann auch ein anonymes repl aufrufen, z. B.
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.
IDEs
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
Thonny
Thonny ist eine minimalistische IDE, die nur die für Einsteiger notwendigen Grundfunktionen enthält. Thonny gibt es für Windows, Mac und Linux.
Installation auf Ubuntu:
apt install thonny
Auskommentieren mit Alt-3
Einkommentieren (Kommentierung entfernen) mit Alt-4
Pycharm
Pycharm hat einen wesentlich größeren Funktionsumfang als IDLE oder Thonny. Pycharm gibt es für Windows, Mac und Linux. Neben der Professional Edition gibt es auch eine kostenlose Community Edition.
Installation auf Ubuntu:[1]
snap install pycharm-community --classic
oder manuell Tarball.[2]
Visual Studio
Die Entwicklungsumgebung Visual Studio von Microsoft lässt sich auch um Funktionalitäten für Python erweitern.
Pyzo
Installation unter Ubuntu:
pip install pyzo --upgrade
Vorausgesetzt wird eine vorhandene Installation unter Ubuntu (apt-get install python3-pip python3-pyqt5)[3])
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
Rekursion
Eine rekursive Funktion ist eine Funktion, die sich selbst wieder aufruft:
# Fakultätsberechnung def fak (x): if x == 1: return 1 else: return(x*fak(x-1)) print(fak(5)) # Ergebnis: 120
Eventuell muss man eine Abbruchbedingung einbauen:
def rek (x): print(x) x += 1 if x < 100: rek(x) rek(1)
input()
input() hält das Programm an und wartet auf eine Tastatureingabe. Die Eingabe kann in einer Variablen gespeichert werden; diese hat den Dateityp string. Unter bestimmten Bedingungen kann der Dateityp umgewandelt werden, z. B. Ziffern können mit int() oder float() in Ganzzahlen bzw. Gleitkommazahlen konvertiert werden.
Umwandlung mit eval()
Strings, Tupel und Dictionarys werden mit eval() umgewandelt:
>>> a = input("Eingabe: ") Eingabe: ["Egon","Thea","Emma"] >>> a '["Egon","Thea","Emma"]' >>> b = list(a) >>> b ['[', '"', 'E', 'g', 'o', 'n', '"', ',', '"', 'T', 'h', 'e', 'a', '"', ',', '"', 'E', 'm', 'm', 'a', '"', ']'] >>> c = eval(a) >>> c ['Egon', 'Thea', 'Emma'] >>>
Mehrere Eingaben
>>> a,b,c = input("3 Eingaben, getrennt durch Leerzeichen: ").split() 3 Eingaben, getrennt durch Leerzeichen: Python, Perl, Javascript >>> a 'Python,' >>> b 'Perl,' >>> c 'Javascript'
format()
name = John alter = 44 print("Du heißt {} und bist {} Jahre alt.".format(name,alter))
[...] Ausgabe:
Du heißt John und bist 44 Jahre alt.
Textausrichtung:
print('{:<25}'.format(text)) # linksbündig print('{:>25}'.format(text)) # rechtsbündig print('{:^25}'.format(text)) # zentriert
Statt format() werden in neueren Python-Versionen formatierte Strings (f-strings) empfohlen:[4]
print(f"Du heißt {name} und bist {alter} Jahre alt.")
Currying
Currying ... ist die Umwandlung einer Funktion mit mehreren Argumenten in eine Sequenz von Funktionen mit jeweils einem Argument.[5]
def uncurried_add(x, y): return x + y def curried_add(x): return lambda y: x + y print(uncurried_add(3, 5)) # 8 print(curried_add(3)(5)) # 8 add_three = curried_add(3) print(add_three(5)) # 8 print(add_three(12)) # 15
String
Ein String, oder Zeichenkette, kann man als eine Sequenz von einzelnen Zeichen sehen.[6]
String-Formatierung
Eingebaute Funktion format
wert1 = 1.0 / 3.0 wert2 = 10.0 / 7.0 # Formatierte Ausgabe: print("Wert 1: {0:.2f}, Wert 2: {1:.4f}".format(wert1, wert2)) Ausgabe: Wert 1: 0.33, Wert 2: 1.4286
String-Literale / f-strings
wert1 = 1.0 / 3.0 wert2 = 10.0 / 7.0 # Formatierte Ausgabe mit String-Literal: print(f"Wert 1: {wert1:.2f}, Wert 2: {wert2:.4f}") Ausgabe: Wert 1: 0.33, Wert 2: 1.4286
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
String-Methoden
Liste eingebauter String-Methoden:
Prüfen auf Datentyp str
if isinstance(value, str):
ergibt True, wenn es sich um eine Variable vom Typ string handelt.
upper case / lower case / title
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
>>> string3 = "schmitz" >>> string3 = string3.title() >>> string3 'Schmitz'
Teilstrings ersetzen mit replace
>>> meinString = "Mein neues Programm" >>> meinString = meinString.replace("neues", "schönes") >>> print (meinString) Mein schönes Programm
Testen auf numerische Eingabe
Test, ob ein String in Integer oder Float umgewandelt werden kann:
str.isnumeric()
in-Operator
Der in-Operator gibt einen booleschen Wert zurück:
>>> sd = "Jason" >>> print("s" in sd) True
Backslash
Der Backslash hat folgende Funktionen:
Zahlen
Es gibt Ganzzahlen (int), Fließkommazahlen (float) und komplexe Zahlen (complex).
Ganzzahlen
dezimal | binär | octal | hexadezimal |
---|---|---|---|
31 | bin(31) = 0b11111 | oct(31) = 0o37 | hex(31) = 0x1f |
Die Verwandlung in dezimale Ganzzahlen erfolgt mit int()
: int(0b11111) == 31
Exponentialschreibweise
Es ist möglich, sehr große oder sehr kleine float-Zahlen mittels e oder E in Exponential-Schreibweise anzugeben. Die Zahl hinter dem e gibt dabei an, um wie viele Stellen der Dezimalpunkt innerhalb der Zahl verschoben wird.[8]
>>> 4.3e3 4300.0 >>> 7.92e-5 == 0.0000792 True >>>
Komplexe Zahlen
Python includes complex numbers as an official type. Complex numbers arise when taking the square roots of negative numbers. There is no real number whose square root is -9, so we say that it equals 3i where i represent the square root of -1. Another example of a complex number is 2i + 3. Python uses j instead of i.
You can take a look at the following code snippet to learn how to work with complex number types.
Divide 2 + 3j by 1 - 5j, enclosing both operations within parentheses:[9]
>>> (2 + 3j) / (1 - 5j) (-0.5+0.5j)
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.[10]
Listenelemente werden über einen 0-basierten Index angesprochen. Man kann auf Listen auch vom Ende her zugreifen. Dann ist -1 der Index für das letzte Element, -2 für das vorletzte usw.
Mit range Zahlenliste erstellen
Beispiel:
zahlenliste = list(range(1,11)) print(zahlenliste) # Ausgabe: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
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) # Ausgaben: Language List: ['French', 'English', 'German', 'Spanish', 'Portuguese'] [11]
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 ausgeben / print
>>> metres = [1, 4, 9, 16, 25, 36,'hallo'] >>> print(*metres) 1 4 9 16 25 36 hallo
Listenobjekte vertauschen
zahlenliste = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] zahlenliste.insert(2,zahlenliste.pop(3)) print(zahlenliste) #Ausgabe: [1, 2, 4, 3, 5, 6, 7, 8, 9, 10]
Liste in String umwandeln
Voraussetzung: Die Objekte in der Liste sind vom Ty str.
>>> li = ['h','a','l','l','o'] >>> li ['h', 'a', 'l', 'l', 'o'] >>> st = ''.join(li) >>> st 'hallo'
Listen sortieren
sort()
Funktion sort()
:
liste.sort()
cars = ['bmw', 'audi', 'toyota', 'subaru'] cars.sort()
Ausgabe: ['audi', 'bmw', 'subaru', 'toyota']
sorted()
cars = ['bmw', 'audi', 'toyota', 'subaru'] y = sorted(cars)
Ausgabe y: ['audi', 'bmw', 'subaru', 'toyota']
und rückwärts sortiert:
y = sorted(cars, reverse=True)
Ausgabe y: ['toyota', 'subaru', 'bmw', 'audi']
Bubblesort
def exchange(x1, x2) : Tausch = x1 x1 = x2 x2 = Tausch return x1, x2 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]); x = [14,6,44,89,26] Index = len(x) bubblesort(x,Index) print(x)
Ausgabe:
[6, 14, 26, 44, 89]
Quelle: [12], S. 105
Kürzere Version:
def bubbleSort(nlist): for passnum in range(len(nlist)-1,0,-1): for i in range(passnum): if nlist[i]>nlist[i+1]: temp = nlist[i] nlist[i] = nlist[i+1] nlist[i+1] = temp nlist = [14,46,43,27,57,41,45,21,70] bubbleSort(nlist) print(nlist) [13]
List Comprehension (Listen-Abstraktion, Listennotation
List comprehensions sind syntaktische Gefüge, die beschreiben, wie vorhandene Listen oder andere iterierbare Objekte verarbeitet werden, um aus ihnen neue Listen zu erstellen.[14]
>>> l1 = [0, 1, 2, 3, 4, 5] >>> l2 = [i*i for i in l1] >>> l2 [0, 1, 4, 9, 16, 25]
>>> liste = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> [i for i in liste if i % 2 == 0] [2, 4, 6, 8, 10] [15]
>>> abverkauf = 9 >>> auf_lager = [21, 7, 9, 11] >>> uebrig = [i - abverkauf for i in auf_lager if i > abverkauf] >>> uebrig [12, 2]
Inventarliste, die Paare als Tupel enthält absteigend nach Menge sortieren:
bestand = [("Äpfel", 22), ("Melonen", 4), ("Birnen", 18), ("Orangen", 76), ("Grapefruit", 51),] absteigend_sortiert = [(j, i) for i,j in bestand] absteigend_sortiert.sort(reverse=True) bestand = [(i, j) for j,i in absteigend_sortiert] print(bestand)
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
Set
Sammlung von Objekten, die durch Kommata voneinander getrennt werden und mit geschweiften Klammern umgeben sind.
a = {'i', 'e'}
In einem Set kann jeder Wert nur einmal vorkommen. Die Set-Datenstruktur ist für sehr schnelle Nachschlageoperationen optimiert.
>>> a = 'eieieieieieii' >>> a 'eieieieieieii' >>> a = list(a) >>> a ['e', 'i', 'e', 'i', 'e', 'i', 'e', 'i', 'e', 'i', 'e', 'i', 'i'] >>> a = set(a) >>> a {'i', 'e'} >>> a= list(a) >>> a ['i', 'e']
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.
get()
Bei Verwendung von get() können Default-Werte gesetzt werden:
monate = {1:"Januar",2:"Februar",3:"März",4:"April",5:"Mai",6:"Juni",12:"Dezember"} print(monate.get(12,"Schlüssel nicht zulässig"))
Ausgabe: Dezember
print(monate.get(13,"Schlüssel nicht zulässig"))
Ausgabe: Schlüssel nicht zulässig
Dictionarys verändern
Dictionarys verbinden:
>>> a = {"Name":"John Doe","Wohnort":"Hollywood"} >>> b = {"Alter":56,"Beruf":"Schauspieler"} >>> c = {**a, **b} >>> c {'Name': 'John Doe', 'Wohnort': 'Hollywood', 'Alter': 56, 'Beruf': 'Schauspieler'}
Dictionarys erweitern:
woerter = {} woerter["Denmark"] = "Dänemark" woerter["Poland"] = "Polen" print(woerter)
Ausgabe:
{'Denmark': 'Dänemark', 'Poland': 'Polen'}
Schlüssel überprüfen
Damit Skripte mit Dictionarys nicht auf Fehler laufen, überprüft man vorab, ob der jeweilige Schlüssel existiert.
Überprüfung mit den Operator in:
zaehler = dict() namen = ["Orga","Leos","Inter","Sovital","Algebraic"] for i in namen: if i not in zaehler: zaehler[i] = 1 else: zaehler[i] = zaehler[i] + 1 print(zaehler)
Überprüfung mit der Methode get():
zaehler.get("Imotech", 0) print(zaehler["Imotech"])
Ausgabe:
Zahl für Imotech: nicht vorhanden.
Mit existierendem Schlüssel:
zahl = zaehler.get("Leos", "nicht vorhanden") print(f"Zahl für Leos: {zahl}.")
Ausgabe:
Zahl für Leos: 1.
Für einen bisher nicht existierenden Wert Schlüssel-Wert-Paar erstellen:
zahl = zaehler.get("Imotech", 0) + 1 print(f"Zahl für Imotech: {zahl}.")
Ausgabe:
Zahl für Imotech: 1.
Methode items()
Die Methode items() ermöglicht die Verwendung zweier Durchlaufvariablen zur Abfrage von Schlüssel und Wert:
for a,b in zaehler.items(): print(a,b)
Alternativ:
for a in zaehler: print(a,zaehler[a])
Methode setdefault()
Wenn in einem Dictionary Schlüssel-Wert-Paare verarbeitet werden, so führen bei noch nicht vorhandenem Schlüssel Inkrementierungen zu "KeyError-Ausnahmen". Deshalb muss vorher ein Schlüssel initialisiert werden. Wenn noch kein Schlüssel vorhanden ist, setzt die Dictionary-Methode setdefault() eine Initialisierung.
dictionary.setdefault(key, 0) #
key ist hier der Schlüssel, nach dem gesucht wird und der im Dictionary noch nicht existiert.
default − ist der Wert, der gesetzt wird (z. B. 0). Wenn kein Default-Wert gesetzt wird, setzt Python den Wert None)
Beispiel:
woerterbuch = {} ... if key in woerterbuch: woerterbuch.setdefault(key, 0) # Initialisierung woerterbuch[key] += 1 # Ab jetzt kann inkrementiert werden
steht für
woerterbuch = {} ... if key not in woerterbuch: woerterbuch[key] = 0 # Initialisierung if key in woerterbuch: woerterbuch[key] += 1 # Ab jetzt kann inkrementiert werden
Dictionary als Schlüsselwort-Argument
>>> sw_arg = {"sep":" >> ", "end":" -\n"} >>> print("Das","ist","nur","ein","Beispiel",**sw_arg) Das >> ist >> nur >> ein >> Beispiel - >>>
Konstanten
Sonderzeichen:
import string string.punctuation '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>> import math >>> math.pi 3.141592653589793
Operatoren
+ - * ** / // % @ << >> & | ^ ~ := < > <= >= == != [16][17]
Verzweigungen (bedingte Anweisungen)
if-Anweisung
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
Beispiele:
>>> z = 1 >>> for i in 'Hallo': print (i * z) z = z + 1 H aa lll llll ooooo
a = [a+b for a in 'alles' if a != 's' for b in 'gut' if b != 'u'] print(a, end = " ")
Ausgabe:
['ag', 'at', 'lg', 'lt', 'lg', 'lt', 'eg', 'et']
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 / exception
unspezifisch
alter = input("Wie alt bist du? ") try: alter = int(alter) except: print("Falsche Eingabe!") else: print("Du bist", alter, "Jahre alt.") finally: print("Programmende")
else
wird nur aktiv, wenn keine Ausnahme ausgelöst wird. finally
wird sowohl bei Ausnahmen wie auch ohne Fehler aktiv.
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!")
Fehler in einer Variablen speichern
try: print(10/0) except ZeroDivisionError as err: print(err)
Ausgabe:
division by zero
Selbstdefinierte Ausnahmen mit raise
class OutOfRangeError(Exception): def __init__(self, wert): self.Wert = wert try: x = int(input("Geben Sie einen Wert zwischen 10 und 20 ein: ")) if x > 20 or x < 10: raise OutOfRangeError(x) print("Ergebnis:", 4/x) except OutOfRangeError as fehler: print("Die Zahl",fehler.Wert,"liegt nicht zwischen 10 und 20")
Lesen und Schreiben von Dateien
Lesen
Grundschema mit Ausgabe der Datei als String:
datei = open("../assets/python.txt", "r", encoding = "utf-8") inhalt = datei.read() print(inhalt) datei.close()
Ausgabe zeilenweise mit for-Schleife:
datei = open("../assets/python.txt", "r", encoding = "utf-8") for i in datei: print(i) datei.close()
Zeilenanfang ermitteln:
datei = open("../assets/python.txt", "r", encoding = "utf-8") for i in datei: if i.startswith('Zum'): print(i)
rstrip
entfernt Whitespace an der rechten Seite (hier die Leerzeile mit '\n').
Absolute Pfadnamen unter Windows
Achtung, hier müssen im Python-Skript 2 Backslashs gesetzt werden:
open('C:\\privat\\testdata\\beispiel.txt')
Man kann auch mit raw strings arbeiten:
filename = r'c:\abc\def\ghi.txt'[18]
Textanalyse: das häufigste Wort
dateiname = input("Geben Sie eine Datei an: ") datei = open(dateiname) woerterbuch = dict() for zeilen in datei: zeilen = zeilen.rstrip() woerter = zeilen.split() for wort in woerter: woerterbuch[wort] = woerterbuch.get(wort,0) + 1 maxSchluessel = None maxWert = -1 for schluessel,wert in woerterbuch.items(): if wert > maxWert: maxSchluessel = schluessel maxWert = wert print(f"Das häufigste Wort ist \"{maxSchluessel}\", es kommt {maxWert} Mal vor.")
Schreiben
Der Modus wird mit "a" angegeben (append):
datei = open("../assets/python.txt", "a", encoding = "utf-8") datei.write("Eine neue Zeile!") datei.write("\nNoch eine neue Zeile!") datei.close()
Das Escape-Zeichen \n verhindert, dass der folgenden Text in der selben Zeile angehängt wird.
Schreiben: mehrere Zeilen nacheinander
f = open("bestelle.txt", 'a') weiter = 'j' while weiter == 'j': bestnr = input("Bestellnummer: ") f.write("\n"+bestnr) weiter = input("Weiter mit mit j, Abbruch mit n: ") f.close()
Text komplett überschreiben
Der Modus wird mit "w" angegeben (write):
datei = open("../assets/python.txt", "w", encoding = "utf-8") datei.write(""" Python wurde mit dem Ziel größter Einfachheit und Übersichtlichkeit entworfen. Dies wird vor allem durch zwei Maßnahmen erreicht. Zum einen kommt die Sprache mit relativ wenigen Schlüsselwörtern aus.[13] Zum anderen ist die Syntax reduziert und auf Übersichtlichkeit optimiert. Dadurch lassen sich Python-basierte Skripte deutlich knapper formulieren als in anderen Sprachen. """) datei.close()
Wenn der Dateiname bisher nicht existierte, wird die Datei neu angelegt.
pyinstaller
PyInstaller freezes (packages) Python applications into stand-alone executables, under Windows, GNU/Linux, Mac OS X, FreeBSD, Solaris and AIX.[19]
Installation unter Windows
pip install pyinstaller
Installation unter 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
Als f-string:
print(f"{kapital:.2f}")
pip
pip bzw. pip3 ist ein Paketverwaltungsprogramm für Python.
Installation unter Ubuntu:
apt install python3-pip
Installation unter Mac:
- Download von http://bootstrap.pypa.io/get-pip.py
- Im Terminal cd Download
- sudo python3 get-pip.py ausführen.
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.
Type Hints
Python verwendet eine dynamische Typisierung, dies kann zu Problemen/Fehlern führen, die erst während der Laufzeit erkannt werden. Mit Type Hints soll dieses Problem behoben werden.[22] Beispiel:
def add(a: int, b: int) -> int: return a + b
Zur Analyse wird das Tool mypy benötigt:
python3 -m pip install mypy
Jupyter Notebook
Troubleshooting
Deutsche Sonderzeichen lassen sich in IDLE nicht abspeichern
An den Anfang des Skripts folgende Zeile setzen:
# -*- coding: utf-8 -*-
bzw.
# -*- coding: cp1252 -*-
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
Programm schließt sich sofort nach der Ausführung
In Windows: am Ende des Skripts folgende Zeile einfügen:
os.system("pause")
In Linux: am Ende des Skripts folgende Zeile einfügen:
input
Links und Quellen
- https://pynative.com/ Learn Python with Tutorials, Exercises, and Quizzes
- https://docs.python-guide.org/ The Hitchhiker’s Guide to Python
Youtube
Bücher
| |