Grundkonzepte der wissenschaftlichen Programmierung mit Python - Syntax und Programme PDF

Summary

Diese Notizblätter bieten eine Einführung in die Grundkonzepte der wissenschaftlichen Programmierung in Python, einschließlich Syntax, Kommentaren und Variablen. Die Materialien sind als Unterstützung für das Master-Programm MedTech an der Fachhochschule Wiener Neustadt ( Österreich ) konzipiert.

Full Transcript

EDV in der Radiologietechnologie ILV SS Michael Rauter Master Program MedTech – functional imaging, conventional and ion radiotherapy https://www.python.org/community/logos/ Grundkonzepte der wissenschaftlichen Programmierung mit Python – Syntax und Prog...

EDV in der Radiologietechnologie ILV SS Michael Rauter Master Program MedTech – functional imaging, conventional and ion radiotherapy https://www.python.org/community/logos/ Grundkonzepte der wissenschaftlichen Programmierung mit Python – Syntax und Programme Überblick Überblick über die Themen dieser Einheit Themen Einführung in die Syntax von Python (im Grunde, Durcharbeiten der Tutorials von w3school - https://www.w3schools.com/python/default.asp) einfach Praktische Programm-Beispiele zur Vertiefung der Konzepte 3 Python Syntax Einrückungen in Python (indentation) Einrückungen (Indentation) Bezieht sich auf die Leerzeichen am Zeilenbeginn einer Codezeile Anders als in vielen anderen Programmiersprachen sind Einrückungen in Python notwendig, da sie verwendet werden, um Blöcke von Code zu kennzeichnen, die zusammengehörige Programm-Teile beim Programmablauf darstellen Beispiel: hier wird der Befehl für die Ausgabe dann ausgeführt (und nur dann), wenn die Bedingung (“5 > 2”) erfüllt ist if 5 > 2: print("Five is greater than two!") Beispiel einer ungültigen Einrückung: (resultiert in einem Syntax-Fehler, da eine if-Anweisung einen zugehörigen eingerückten Codeblock erwartet, im Beispiel ist dieser aber nicht eingerückt (womit der Python Interpreter nicht weiß, welche Codezeilen dazu gehören) if 5 > 2: print("Five is greater than two!") 4 Python Syntax Einrückungen in Python (indentation) Einrückungen (Indentation) Die Anzahl der Leerzeichen (Leertaste bei Tastatur) bleibt einem als Programmierer überlassen, aber mind. 1 Man muss die gleiche Anzahl an führenden Leerzeichen für zusammengehörige Codeblock-Zeilen verwenden (sonst erhält man eine Python-Fehlermeldung) Beispiel: if 5 > 2: print("Five is greater than two!") if 5 > 2: print("Five is greater than two!") Beispiel einer ungültigen Einrückung: (liefert uns einen Syntax-Fehler) if 5 > 2: print("Five is greater than two!") print("Five is greater than two!") 5 Python Syntax Kommentare Python Kommentare Kommentare beginnen mit #, Python wird alles ignorieren, das nach dem # in der gleichen Zeile steht Kommentare können und sollen verwendet werden, um den geschriebenen Python Code zu erklären Richtig verwendet, machen Kommentare den Code besser lesbar/nachvollziehbar Kommentare können sogar als Hilfe bei der Entwicklung verwendet werden, um z.B. die Ausführung von bestimmten Code-Zeilen zu verhindern, wenn man das Programm testet Beispiele: #This is a comment print("Hello, World!") print("Hello, World!") #This is another comment after a statement #print("Hello, World!") (Das letzte Kommentar wird verwendet, um die Ausführung des Python Statements zu verhindern) 6 Python Syntax Variablen Python Variablen Variablen sind Behälter zum Speichern von Datenwerten Python hat kein Kommando, um Variable zu deklarieren (anders als viele andere Programmiersprachen) eine Variable wird in dem Moment erzeugt, in dem ihr zum ersten Mal ein Wert zugeordnet wird Variablen-Namen kann man selbst wählen, sind case-sensitive und müssen einige Regeln befolgen (nächste Folie) der Datentyp der Variable wird von Python automatisch bestimmt (mehr über Datentypen gleich) man kann Datentypen erzwingen mit sgn. casting operations (mehr dazu später) #examples: x = 5 # a variable with name “x” is created by assigning a numeric integer value of 5 to it y = "John" # a variable with name “y” is created of type string with value John print(x) # the print function is called which prints the value of “x” to the console print(y) # the print function is called which prints the value of “y” to the console 7 Python Syntax Variablen Regeln für Variablennamen Ein Variablenname muss mit einem Buchstaben oder Unterstrich Zeichen (underscore character) starten Ein Variablenname dürfen nicht mit einer Ziffer starten Ein Variablenname darf nur alpha-numerische Zeichen und Unterstrich verwenden (A-z, 0-9, and _) Variablennamen sind case-sensitive (age, Age and AGE bezeichnen 3 verschiedene Variablen) Variablennamen dürfen nicht gleich einem Python Schlüsselwort sein, z.B. nicht erlaubt: if, else, while, def, … # legal variable names: # variable names with more than one word can be difficult to read, therefore: myvar = "John" my_var = "John" # Camel Case - Each word, except the first, starts with a capital letter: _my_var = "John" myVariableName = "John" myVar = "John" MYVAR = "John" # Pascal Case - Each word starts with a capital letter: myvar2 = "John" MyVariableName = "John" # illegal variable names: 2myvar = "John" # Snake Case - Each word is separated by an underscore character: my-var = "John" my_variable_name = "John" my var = "John" 8 def = "John" Python Syntax Datentypen Die eingebauten (built-in) Python Datatypen Datentypen sind ein wichtiges Konzept in der Programmierung Variablen können Daten unterschiedlicher Typen speichern, verschiedene Typen → verschiedene Funktionalität Python hat folgende Datentypen standardmäßig eingebaut (unterteilt in die jeweiligen Kategorien): Text Type: str Numeric Types: int, float, complex # Example code for getting the data type: Sequence Types: list, tuple, range # (you can get the data type of any object Mapping Type: dict # by using the type function) x = 5 Set Types: set, frozenset print(type(x)) Boolean Type: bool Binary Types: bytes, bytearray, memoryview 9 Python Syntax Datentypen Implizites Setzen von Datentypen (Erzeugen von Variablen mit bestimmtem Datentyp) in Python In Python wird der Datentyp festgelegt, wenn ein Wert einer Variablen zugewiesen wird: Example Data Type x = "Hello World" str x = 20 int x = 20.5 float x = 1j complex x = ["apple", "banana", "cherry"] list x = ("apple", "banana", "cherry") tuple x = range(6) Range x = {"name" : "John", "age" : 36} dict x = {"apple", "banana", "cherry"} set 10 x = True bool Python Syntax Datentypen Explizites Setzen von Datentypen (Erzeugen von Variablen mit bestimmtem Datentyp) in Python Wenn man den Datentyp spezifizieren will, kann man die folgenden Konstruktor-Funktionen verwenden: Example Data Type x = str("Hello World") str x = int(20) int x = float(20.5) float x = complex(1j) complex x = list(("apple", "banana", "cherry")) list x = tuple(("apple", "banana", "cherry")) tuple x = range(6) Range x = dict(name="John", age=36) dict x = set(("apple", "banana", "cherry")) set 11 x = bool(1) bool Python Syntax Variablen Python Variablen (Fortsetzung) Variablen können ihren bisherigen Wert und Datentyp ändern, indem sie neu gesetzt werden - Beispiel: x = 4 # x is of type int x = "Sally" # x is now of type str print(x) Wenn man den Datentyp einer Variable festlegen will, kann man dies mit sgn. casting erreichen - Beispiel: x = str(3) # x will be '3' y = int(x) # y will be 3 z = float(x) # z will be 3.0 Man kann den Datentyp einer Variable mit der Funktion type() ermitteln - Beispiel : x = 5 y = "John" print(type(x)) print(type(y)) 12 Python Syntax Numerische Datentypen im Detail Dies ist ein eklatanter Unterschied zu den meisten anderen Programmiersprachen, wo integer Datentypen immer eine minimale/maximale Größe haben Es gibt in Python drei eingebaute numerische Datentypen: int (steht für „integer”), ist eine ganze Zahl, positiv oder negativ, ohne Dezimalstellen, unlimitierte Größe float (steht für "floating point number“), eine Dezimalzahl mit Vorzeichen codiert als 64-bit Fließkommazahl # note: floats can also be scientific numbers # with an "e" to indicate the power of 10: x = -0.0877 y = -87.7e-3 print(x) print(y) print(type(x)) x = 4+2j print(type(y)) y = complex(-3-6j) print(x) print(y) complex (komplexe Zahl) werden geschrieben mit einem "j" als Imaginäranteil print(type(x)) print(type(y)) 13 Python Syntax Python Casts Mit Casting können wir Datentypen konvertieren/erzwingen: Casting wird in Python mit Konstruktor-Funktionen realisiert: ❖ int() - erzeugt einen integer aus einem Integer-Literal, einem float (durch Verwerfen aller Dezimalstellen) oder einem String (vorausgesetzt der String repräsentiert eine ganze Zahl) ❖ float() - erzeugt eine Fließpunktzahl aus einem Integer, einem float-Literal oder einem String (vorausgesetzt der String repräsentiert eine Fließpunktzahl oder eine ganze Zahl) ❖ str() - erzeugt einen String aus einer breiten Palette von Datentypen, mitunter Strings-Literals, Integer-Zahlen und Fließkommazahlen # int() example: # float() example: # str() example: x = int(1) # x will be 1 x = float(1) # x will be 1.0 x = str("s1") # x will be 's1' y = int(2.8) # y will be 2 y = float(2.8) # y will be 2.8 y = str(2) # y will be '2' z = int("3") # z will be 3 z = float("3") # z will be 3.0 z = str(3.0) # z will be '3.0' w = float("4.2") # w will be 4.2 14 Python Syntax Python Strings Strings Strings werden in Python in Anführungszeichen eingeschlossen, entweder in einfache oder doppelte. 'hello‘ repräsentiert den selben String wie "hello" Man kann String-Literale sowie String-Variablen mit der print() Funktion in der Konsole ausgeben Multi-line Strings definiert man mit öffnenden und schließenden Dreifach-Quotes: """ , ' ' ' (nicht mischen) # string example 1: # string example 2: # Multi-line string example: print("Hello") a = "Hello" a = """This is a multi-line string – print('Hello') print(a) please note the opening and closing triple-quotes which are necessary.""" print(a) Wir werden etwas später in den Folien Strings vertiefen (und sehen, was man mit ihnen alles tun kann) 15 Python Syntax Python Booleans Boolean-Variables und Werte Booleans repräsentieren immer einen von zwei möglichen Werten: True oder False Der Datentyp in Python heißt bool Jede Bedingung (e.g., x > 3) wird zu einem Boolean Wert ausgewertet # Boolean example 1: # Boolean example 2 (print message depending on condition): print(10 > 9) a = 200 print(10 == 9) b = 33 print(10 < 9) if b > a: print("b is greater than a") else: print("b is not greater than a") 16 Python Syntax Operatoren Python Operatoren Operatoren (operators) werden verwendet um Operationen mit Variablen und Werten durchzuführen z.B. können wir den + Operator nutzen, um 2 Werte zu addieren: print(10 + 5) Python unterteilt die Operatoren in diese Gruppen (wir werden mit den ersten 4 Gruppen zu tun bekommen): ❖ Arithmetische Operatoren: +, -, *, /, % (Modulo-Operation), ** (Potenzieren), // (Integer-Division) ❖ Zuweisungs-Operatoren: z.B., =, +=, -=, *=, /=, … e.g., x += 4 is the same as x = x + 4 ❖ Vergleichs-Operatoren: ==, != (ungleich-Operator), , = ❖ Logische Operatoren: and, or, not – mehrere Bedingungen in eine kombinieren x > 7 and x < 9 ❖ Identitäts-Operatoren: is, is not (teste ob 2 Objekte dasselbe Objekt sind, nicht nur gleicher Wert) ❖ Membership-Operatoren: in, not in ❖ Bitweise Operatoren: &, |, ^, ~, (Bit-Manipulation von binaren Zahlen) 17 Python Syntax Funktionen Python Funktionen Eine Funktion ist ein Code-Block, der nur dann ausgeführt wird, wenn die Funktion explizit aufgerufen wird Man kann Daten über Variablen an/in die Funktion übergeben, auch Funktionsparameter genannt Eine Funktion kann Rückgabe-Wert(e) haben, die als Resultat des Funktionsaufrufes zurückgeben werden Funktionen werden in Python mit dem Schlüsselwort def definiert: def my_function(): print("Hello from a function") Beispiel einer Funktion ohne Parameter und ohne Rückgabewerte Eine Funktion mit Parametern und Rückgabewert sieht so aus und rechts sieht man den Aufrufmechanismus: def my_multiplication(a,b): an anderer Stelle im Code: result = my_multiplication(4,7) return a * b print(result) die Signatur einer Funktion definiert, wie sie aufzurufen ist - sie ist die Kombination des Funktionsnamen und der benötigten Parameter, um sie aufzurufen, und ist definiert durch die Zeile mit dem def Schlüsselwort 18 Python Syntax Funktionen Python Funktionen (Fortsetzung) Der Begriff Funktionrumpf (function body) beschreibt den (eingerückten) Code-Block, der nach der Codezeile mit dem def Schlüsselwort kommt weiteres Beispiel einer Funktion (function signature + body) gefolgt vom dreimaligen Aufruf dieser Funktion (Anmerkung: der Funktionsrumpf wird nur ausgeführt, wenn die Funktion vom Code aufgerufen wird – wenn das Programm abläuft, wird die Funktion das erste Mal ausgeführt, wenn die Zeile mit dem ersten Aufruf der print() Funktion ausgeführt wird und somit die my_test() Funktion ausgewertet (und damit aufgerufen) werden muss): def my_test(a,b): if a < b: return a else: return b print(my_test(4,5)) print(my_test(7,2)) print(my_test(-3,3)) 19 Python Syntax Funktionen Python Funktionen (Fortsetzung) Es ist möglich Standardwerte für Funktions-Parameter zu definieren, auf diese Art ist es möglich, dass man beim späteren Aufruf der Funktion, diesen Parameter nicht zwingend übergeben muss (falls der Parameter von außen nicht übergeben wurde, wird dann der Standardwert verwendet): def my_function(country = "Austria"): print("I am from " + country) my_function("Sweden") my_function("India") my_function() my_function("Norway") 20 Python Syntax Funktionen Python Funktionen (Fortsetzung) In Python sind sogar mehrere Ergebniswerte möglich, eine Art dies zu bewerkstelligen sieht so aus: def func_with_several_return_values(): x = 1.0 y = 0.0 z = 0.0 return x,y,z v = func_with_several_return_values() print(type(v)) print(v) das zurückgegebene (retournierte) Objekt ist ein Objekt vom Typ tuple (Folien über tuple folgen noch) 21 Python Syntax Funktionen Python Funktionen (Fortsetzung) Funktionen können auch als Klassen-(Mitglieds-)Funktionen/Methoden (class member functions/methods) definiert werden (mehr dazu später) – aber wir werden bald mit solchen Funktionen zu tun haben, wenn wir member functions von Klassen aufrufen müssen – wenn wir ein Objekt/eine Variable sehen, wo nach dem Namen direkt ein “.”-Zeichen folgt und darauf direkt ein Funktionsname/-aufruf folgt. z.B.: Ermittlung der Anzahl der Zeichen eines Strings auf 2 verschiedene Arten (ein Beispiel für den Aufruf einer Klassenfunktion sieht man in der 5ten Zeile (die Klasse ist in diesem Fall die string Klasse): name = "John" print(type(name)) numChars = len(name) print(numChars) numChars = name.__len__() print(numChars) 22 Python Syntax Geltungsbereich (scope) von Variablen Geltungsbereich (scope) Eine Variable ist nur innerhalb der Code-Region verfügbar, in der sie erzeugt wurde. Dies wird scope genannt. Local scope – Eine (lokale) Variable, ist eine, die innerhalb einer Funktion erzeugt wurde, gehört dem lokalen Geltungsbereich dieser Funktion an und kann nur innerhalb der Funktion genutzt werden (ist nur dort bekannt) Global scope – Eine (globale) Variable, ist eine, die im Haupt-Code (main body) des Python-Codes erzeugt wurde, und hat globalen Geltungsbereich. Sie ist in jedem scope (lokal und global) bekannt und verfügbar. # Local scope example # Global scope example # local vs global variable same name: def myfunc(): x = 300 x = 300 x = 300 print(x) def myfunc(): def myfunc(): print(x) x = 200 myfunc() print(x) print(x) # results in error myfunc() print(x) myfunc() print(x) 23 Python Syntax Listen in Python Listen in Python (lists) werden verwendet, um mehrere Werte in einer einzelnen Variable zu speichern, eine Liste der Werte einer von 4 in Python eingebauten Standard-Typen, welche verwendet werden, um Sammlungen von Daten zu speichern, die anderen 3 sind: tuple, set, dictionary – jeweils verschiedenen Eigenschaften, Einsatzgebiete Verwendung von eckigen Klammern erzeugt Liste (list), die einzelnen Einträge werden list items genannt: # List example 1 # List example 2 # List example 3 mylist = ["apple", "banana", "cherry"] mylist = [2.3, 7.6, 28.2, 2.3] mylist = [19, "many", -4.4] print(mylist) print(mylist) print(mylist) List Items Reihenfolge wohldefiniert Sind geordnet (nicht sortiert!), veränderbar, und doppelte Einträge sind erlaubt. # List indexing example mylist = [2, 3, 4] indizierbar, das erste Element hat Index , das zweite hat Index , etc. print(mylist) 24 Python Syntax Listen in Python Zugriff auf Elemente der Liste (Zugriff auf list items) # Accessing 2nd element of a list Zugreifen auf Elemente: list items sind indexiert und man mylist = [2, 3, 4] kann zugreifen, indem man sich auf die Index-Nummer bezieht: print(mylist) Negative Indizierung - Negative indexing bedeutet man startet # Print the last item of a list: mylist = [2, 3, 4] vom Ende der Liste (wie weit will man vom Ende zurückgehen): print(mylist[-1]) Zugriff über Indexbereich (range of indices) – Indexbereich definiert auf welche Elemente zugegriffen wird (auch slicing genannt). Das Rückgabe-Objekt ist dann eine neue Liste mit den angefragten Elementen: (Indizes starten in Python immer bei 0, d.h. das erste Element ist # Return the third, fourth, and fifth item: an Indexposition 0, das zweite an Position 1, …) aList = ["a", "b", "c", "d", "e", "f", "g"] (siehe Details zu ranges auf späterer Folie zu ranges) print(aList[2:5]) # By leaving out the start value, the range # By leaving out the end value, the range # will start at the first item: # will go on to the end of the list: aList = ["a", "b", "c", "d", "e", "f", "g"] aList = ["a", "b", "c", "d", "e", "f", "g"] 25 print(aList[:5]) print(aList[2:]) Python Syntax Listen in Python Ändern von list items # Change the second item: mylist = [2, 3, 4] Um den Wert eines bestimmten Elements der Liste zu ändern, mylist = 7 bezieht man sich auf das Element mit seiner Index-Nummer: print(mylist) Um die Werte von mehreren Elementen zu ändern, bezieht # Change the values "b" and "c" with the man sich auf eine range: man definiert eine Liste mit den # values "m" and "n": gewünschten neuen Werten und spezifiziert die range aList = ["a", "b", "c", "d", "e", "f", "g"] aList[1:3] = ["m", "n"] an Indizes, welche die neuen Werte erhalten sollen: print(aList) Wenn man mehr Elemente einfügt als man zum Ersetzen # Change the second value by replacing it ausgewählt hat, werden die überzähligen Elemente auch # with two new values: aList = ["a", "b", "c", "d", "e", "f", "g"] eingefügt, und die durch die range nicht spezifizierten aList[1:2] = ["m", "n"] print(aList) restlichen Elemente werden verschoben: 26 Python Syntax Listen in Python Einfügen von Elementen die insert() Methode fügt ein item an einem spezifizierten Index ein (ohne Ersetzen von anderen items): # Insert " m" as the third item: aList = ["a", "b", "c", "d", "e", "f", "g"] aList.insert(2,"m") print(aList) um ein Element am Ende der Liste hinzuzufügen, verwendet man die append() Methode: # Using the append() method to append an item: aList = ["a", "b", "c", "d", "e", "f", "g"] aList.append("m") print(aList) um am Ende einer Liste Elemente einer anderen Liste hinzuzufügen: z.B. extend() Methode verwenden: # Add the elements of anotherList to aList: # ALTERNATIVE – join lists: aList = ["a", "b", "c", "d", "e", "f", "g"] aList = ["a", "b", "c", "d", "e", "f", "g"] anotherList = ["m", "n"] anotherList = ["m", "n"] aList.extend(anotherList) finalList = aList + anotherList print(aList) print(finalList) 27 Python Syntax Listen in Python Entfernen von Elementen die remove() Methode entfernt ein spezifiziertes Element: # Using the remove() method to remove an item: aList = ["a", "b", "c", "d", "e", "f", "g"] aList.remove("d") print(aList) die pop() Methode entfernt das item mit gewünschtem Index oder das letzte item (falls kein Index spezifiziert): #Using pop() method to remove an item (by index): # Using pop() method to remove the last item: aList = ["a", "b", "c", "d", "e", "f", "g"] aList = ["a", "b", "c", "d", "e", "f", "g"] aList.pop(3) aList.pop() print(aList) print(aList) das del Schlüsselwort kann auch verwendet werden, um ein Element mit gegebenem Index zu entfernen: # Remove the 4th item using the del keyword: aList = ["a", "b", "c", "d", "e", "f", "g"] del aList print(aList) 28 Python Syntax Listen in Python Entfernen von Elementen (Fortsetzung) die clear() Methode leert eine Liste. Die Liste existiert weiter, ist aber leer (hat keine Elemente): # Clear the list content: aList = ["a", "b", "c", "d", "e", "f", "g"] aList.clear() print(aList) das del Schlüsselwort kann auch die Liste selbst löschen (Hinweis: del kann verschiedenste Objekte löschen): # Delete the entire list: aList = ["a", "b", "c", "d", "e", "f", "g"] del aList 29 Python Syntax Listen in Python Anzahl der Elemente einer Liste bestimmen die len() Funktion kann verwendet werden, um die Anzahl der Elemente einer Liste zu ermitteln: # Get number of elements (length) of a list: aList = ["a", "b", "c", "d", "e", "f", "g"] numEntries = len(aList) print(numEntries) die __len__() class member Methode der list Klasse liefert auch die Anzahl der Elemente einer Liste: # Get number of elements (length) of a list – alternative way: aList = ["a", "b", "c", "d", "e", "f", "g"] numEntries = aList.__len__() print(numEntries) 30 Python Syntax Python Strings (Fortsetzung) Strings sind eine Liste von Zeichen Strings werden in Python als Liste von Zeichen (characters) repräsentiert. Python hat keinen speziellen Datentyp für Zeichen; ein einzelnes Zeichen ist einfach ein String mit Länge 1. Eckige Klammern können verwendet werden, um auf die Elemente eines Strings zuzugreifen. da Strings eine Liste von Zeichen sind, bedeutet das: ❖ Die Anzahl der Zeichen eines Strings wird auf dieselbe Art bestimmt wie die Anzahl der Elemente einer Liste (siehe vorige Folie bzw. frühere Folie über Python Funktion mit Beispiel zur String-Länge) ❖ Listen-Funktionen/Operationen darauf können auf Strings angewendet werden, e.g.: # Get the 2nd character of a string (index position 1): a = "Hello, World!" print(a) 31 Python Syntax Python Strings (Fortsetzung) String slicing (Aufsplitten von Strings in Teilstrings) So wie man slicing auf Listen anwenden kann, kann es auch auf Strings angewendet werden, z.B.: # Get the characters from index 2 to index 5 (not included): myString = "Hello, World!" print(myString[2:5]) # Get the characters from the start to index 5 (not included): myString = "Hello, World!" print(myString[:5]) # Get the characters from index 2 to the end: myString = "Hello, World!" print(myString[2:]) # Even negative indices are possible: myString = "Hello, World!" print(myString[-5:-2]) 32 Python Syntax Python Strings (Fortsetzung) Escape Zeichen Kann verwendet werden, um Zeichen einem String hinzuzufügen, die sonst ungültig/nicht erlaubt wären. Ein Escape-Zeichen besteht aus einem Backslash „\“ gefolgt von einem Spezialzeichen/-sequenz Beispiel für ein ungültiges Zeichen: Anführungszeichen innerhalb eines Strings definiert mit gleichem Zeichen: # The escape character allows you to use double quotes when you normally would not be allowed: myString = "Hello \"programming\" world!" print(myString) Liste mit weiteren Escape Zeichen: https://www.w3schools.com/python/python_strings_escape.asp 33 Python Syntax tuples tuples (Tupel) tuple werden verwendet, um mehrere Wertkombinationen in einer einzigen Variable zu speichern. ein tuple ist eine geordnete (nicht zwingend sortiert), nicht änderbare Sammlung von Werten. tuple werden mit runden Klammern definiert/bzw. sind daran erkennbar). # tuple example: atuple = ("Alice", "Bob", "Chris") print(atuple) Tuple items (Tupel-Elemente) eindeutige Position innerhalb des tuples, nicht änderbar, gleiche Werte für verschiedene tuple-items möglich sind indizierbar, erstes Element hat Index , zweites Element hat Index , etc. kan kann keine Elemente ändern, hinzufügen oder entfernen nachdem das tuple erzeugt wurde # tuple example with duplicate entries: atuple = ("Alice", "Bob", "Chris", "Bob") 34 Python Syntax tuples (Fortsetzung) tuples (Tupel) – weitere Eigenschaften Zugriff auf tuple items, Indizierung, invertiertes Indizieren und Bereich-Auswahl funktioniert analog zu Listen Verändern von tuple items ist nicht möglich Mit folgender Technik kann man neue tuples aus anderen erzeugen und optional neue tuple items hinzufügen: ❖ tuple in Liste konvertieren, neue Elemente hinzufügen und die Liste wieder in ein tuple konvertieren x = ("Alice", "Bob", "Chris") y = list(x) y.append("Rudolf") x = tuple(y) print(x) ❖ Erzeuge ein neues tuple mit den hinzuzufügenden tuple items, dann füge diese dem original tuple hinzu x = ("Alice", "Bob", "Chris") y = ("Rudolf",) # the comma is essential here, so Python creates a tuple, not a string x += y 35 print(x) Python Syntax sets (Sets/Mengen) sets (Sets/Mengen) sets werden verwendet, um mehrere eindeutige Werte (keine Duplikate) in einer Variablen zu speichern. Ein set ist eine ungeordnete, nicht indizierbare Sammlung von Werten. Die Elemente (set items) des Sets sind ungeordnet (daher kann man auf sie nicht über Indizierung zugreifen), unveränderbar, und erlauben keine doppelten Werte. sets werden durch geschwungene Klammern (curly brackets) erzeugt. # Duplicate values will be ignored: aSet = {"Alice", "Bob", "Chris", "Bob"} print(aSet) 36 Python Syntax sets (Fortsetzung) Zugriff auf Elemente (set items) man kann nicht auf set items eines sets mittels Index oder Schlüssel referenzieren. aber man kann über die set items in einer Schleife iterieren (mittels for Schleife - mehr dazu bald): # Loop through the set, and print the values: aSet = {"Alice", "Bob", "Chris", "Bob"} for x in aSet: print(x) oder man kann abfragen, ob ein spezifischer Wert im Set vorhanden ist (mithilfe des Schlüsselworts in): # Check if "Bob" is present in the set: aSet = {"Alice", "Bob", "Chris"} print("Bob" in aSet) 37 Python Syntax sets (Fortsetzung) set items zu einem Set hinzufügen um ein Element einem Set hinzuzufügen, verwendet man die add()Methode: # Add an item to a set, using the add() method: aSet = {"Alice", "Bob", "Chris"} aSet.add("Dolores") print(aSet) um Elemente eines anderen Sets in ein bestehendes Set einzufügen, verwendet man die update() Methode: # Add elements from anotherSet into aSet aSet = {"Alice", "Bob", "Chris"} anotherSet = {"Dolores", "Rudolf"} aSet.update(anotherSet) print(aSet) 38 Python Syntax sets (Fortsetzung) Entfernen von Set Items um ein Element aus einem Set zu entfernen, verwendet man die remove()oder discard() Methode: # Remove "Bob" by using the remove() method: aSet = {"Alice", "Bob", "Chris"} aSet.remove("Bob") print(aSet) # Remove "Bob" by using the discard() method: aSet = {"Alice", "Bob", "Chris"} aSet.discard("Bob") print(aSet) 39 Python Syntax Dictionaries Dictionaries Dieser Datentyp wird verwendet, um Schlüssel-Werte-Paare (key value pairs) zu speichern. Dabei wird immer ein eindeutiger Wert oder eine Variable zu einem Schlüssel gespeichert ist eine Sammlung, die geordnet ist (seit Python Version 3.7), veränderbar und erlaubt keine Duplikate. sind veränderbar, das bedeutet, dass wir Elemente (Einträge) ändern, hinzufügen oder entfernen können. Werden (wie auch Sets) mit geschwungenen Klammern (curly brackets) erzeugt und bestehen aus Schlüsseln (keys) und Werten (values) - beim Erzeugen getrennt durch Doppelpunkt, Schlüssel sind Strings: # Create and print a dictionary: aDict = { "name": "Alice", "gender": "female", "age": 21 } print(aDict) 40 Python Syntax Dictionaries (Fortsetzung) Zugriff auf Dictionary-Einträge Zugriff auf Elemente eines Dictionary ist möglich durch Verweis auf den Schlüssel (in eckigen Klammern): # Print the "name" value of the dictionary: aDict = { "name": "Alice", "gender": "female", "age": 21 } print(aDict["name"]) Alternative: ermittle den Wert, der unter dem Schlüssel "name" gespeichert ist, mit der get() Methode: # Print the "name" value of the dictionary after obtaining it with the get() method: aDict = { "name": "Alice", "gender": "female", "age": 21 } print(aDict.get("name")) Die Methode keys() returniert eine Liste aller Schlüssel eines Dictionary: # Get a list of the keys: aDict = { "name": "Alice", "gender": "female", "age": 21 } print(aDict.keys()) 41 Python Syntax Dictionaries (Fortsetzung) Ändern von Einträgen eines Dictionary Werte eines Eintrags werden geändert, indem man auf den Eintrag mittels seines Schlüssels referenziert: #change the value of the entry with "age" key to 23: aDict = { "name": "Alice", "gender": "female", "age": 21 } aDict["age"] = 23 print(aDict) Die update() Methode updatet das Dictionary mit den als Dictionary-Argument übergebenen Schlüssel- Wert-Paaren: # update the "age" by using the update() method: aDict = { "name": "Alice", "gender": "female", "age": 21 } aDict.update({"age": 23}) print(aDict) 42 Python Syntax Dictionaries (Fortsetzung) Hinzufügen von Einträgen zum Dictionary Hinzufügen eines neuen Dictionary-Eintrags: Setzen eines neuen Schlüssels inklusive Zuweisen eines Wertes: #add the key:value pair with key "eyeColor" and value "blue": aDict = { "name": "Alice", "gender": "female", "age": 21 } aDict["eyeColor"] = "blue" print(aDict) Die update() Methode updatet das Dictionary mit den als Dictionary-Argument übergebenen Schlüssel- Wert-Paaren. Falls noch kein entsprechender Schlüssel-Wert-Paar-Eintrag existiert, wird er hinzugefügt: # add a eyeColor item to the dictionary by using the update() method: aDict = { "name": "Alice", "gender": "female", "age": 21 } aDict.update({"eyeColor": "blue"}) print(aDict) 43 Python Syntax Dictionaries (Fortsetzung) Entfernen von Dictionary-Einträgen die pop() Methode entfernt den durch den Schlüssel spezifizierten Eintrag: aDict = { "name": "Alice", "gender": "female", "age": 21 ,"eyeColor": "blue" } aDict.pop("eyeColor") print(aDict) die popitem() Method entfernt den zuletzt eingefügten Eintrag: aDict = { "name": "Alice", "gender": "female", "age": 21 ,"eyeColor": "blue" } aDict.popitem() print(aDict) die clear() Methode leert das komplette Dictionary (es existiert aber als leeres Dictionary weiter): aDict = { "name": "Alice", "gender": "female", "age": 21 ,"eyeColor": "blue" } aDict.clear() print(aDict) 44 Python Syntax Verschachtelte Datenstrukturen (nested data structures) Verschachtelte Datenstrukturen demonstriert am Beispiel von Dictionaries (funktioniert analog für Listen, …) Die Werte zu den Schlüsseln des äußeren Dictionary können ihrerseits Dictionaries sein (Kind-Elemente): # Create 3 dictionaries, then create one dictionary that will contain the other 3 dictionaries: child1 = { "name" : "Emil", "year" : 2004 } child2 = { "name" : "Tobias", "year" : 2007 } child3 = { "name" : "Linus", "year" : 2011 } myfamily = { "child1" : child1, "child2" : child2, "child3" : child3 } 45 Python Syntax Verschachtelte Datenstrukturen (nested data structures) Beispiel - Verschachtelte Listen zur Implementierung von 2D Arrays) Die äußere List ist sozusagen die Liste der Zeilen des 2D-Arrays 4 7 8 die inneren Listen sind die einzelnen Werte innerhalb einer 0 2 1 bestimmten Zeile Die Indexierung erfolgt daher so, dass zuerst auf die Zeile mit dem Zeilenindex in eckigen Klammern indexiert wird und danach auf das Element innerhalb der Zeile mit dem Element-Index in Klammern: # create a 2x3 array as list of lists: array2D = [[4, 7, 8], [0, 2, 1]] print(array2D) print(array2D) # output the first list of values print(array2D) # output the 3rd element of the 1st list (row) print(array2D) # output the 2nd element of the 2nd list (row) 46 Python Syntax Ablaufsteuerung über control flow statements Control-Flow Statements Unter Control-Flow Statements versteht man Anweisungen, welche den Programmablauf beeinflussen können, in der Form, dass die übliche Reihenfolge, in der Anweisungen ausgeführt werden (nämlich zeilenweise von oben nach unten innerhalb eines Programmcodes), abgeändert wird. Je nach Statement können abhängig von zuvor getesteten Bedingungen nur bestimmte Codezeilen zur Ausführung gebracht werden (z.B. if, elif), Codezeilen wiederholt ausgeführt werden (Schleifen) oder Codezeilen übersprungen werden (z.B. continue, break). 47 Python Syntax Ablaufsteuerung über control flow statements if … Eine if-Bedingung wird mit dem Schlüsselwort if formuliert Das Statement wertet eine Bedingung aus und führt abhängig vom Resultat einen zugehörigen Codeblock aus die Einrückung (Leerzeichen am Anfang der Zeile) des zum if gehörenden Codeblocks ist notwendig Python unterstützt die üblichen logischen Bedingungen, welche man aus der Mathematik kennt: Gleichheit (equal): a == b Ungleichheit (not equal): a != b # if statement: a = 33 kleiner (less than): a < b b = 200 kleiner gleich (less than or equal): a a: print("b is greater than a") größer (greater than): a > b größer gleich (greater than or equal): a >= b 48 Python Syntax Ablaufsteuerung über control flow statements if … else Man kann eine else-Bedingung mit dem Schlüsselwort else definieren welche ebenfalls einen zugeordneten Codeblock benötigt Der Codeblock des else-Pfades wird ausgeführt, wenn die if-Bedingung nicht zutrifft (den Wert False ergibt) # if with else statement: a = 200 b = 33 if b > a: print("b is greater than a") else: print("b is not greater than a") 49 Python Syntax Ablaufsteuerung über control flow statements if … elif … else if-Bedingungen können von einem oder mehreren elif-statements gefolgt werden (elif Schlüsselwort) das elif Schlüsselwort ist Pythons Art zu sagen „wenn die vorige Bedingung nicht zutreffend (wahr) war, dann teste diese Bedingung". ein optionales else Schlüsselwort behandelt alle Restfälle, wenn keine der vorigen Bedingungen erfüllt war. # if statement with elif statements: # if statement with elif and else statements: a = 33 a = 200 b = 33 b = 33 if b > a: if b > a: print("b is greater than a") print("b is greater than a") elif b < a: elif a == b: print("b is smaller than a") print("a and b are equal") elif a == b: else: print("a and b are equal") print("a is greater than b") 50 Python Syntax Ablaufsteuerung über control flow statements mehr über if … elif … else Kurzform if: # one line if statement # one line if... else statement a = 2 a = 2 Kurzform if … else b = 330 b = 330 if a > b: print("a is greater than b") print("A") if a > b else print("B") Kombi-Bedingungen # combined condition (and) # combined condition (or) a, b, c = 200, 33, 500 a, b, c = 200, 33, 500 (and, or, not) if a > b and c > a: if a > b or a > c: print("Both conditions are True") print("At least one condition met") Verschachtelte if-Bedingungen: if-Statements innerhalb anderer if-Statements (nested if-statements) x = 41 # try also a value 10: print("Above ten,") if x > 20: print("and also above 20!") else: 51 print("but not above 20.") Python Syntax Ablaufsteuerung über control flow statements while Mit einer while-Schleife (Schlüsselwort while) kann ein Block von Anweisungen so lange ausgeführt werden, wie eine Bedingung erfüllt ist (zu True ausgewertet wird). Der Ablauf ist dann wie folgt: 1. die Bedingung des while-Statements wird geprüft (ob es zu True ergibt) 2. falls ja, wird der zur Schleife gehörende Codeblock einmal ausgeführt 3. danach springt das Programm (erneut) zur Zeile mit dem while-Statement (und führt Punkt 1. erneut aus) Bei nicht erfüllter Bedingung wird der Codeblock übersprungen und die Programmausführung setzt danach fort Eine einzelne Ausführung des Codeblocks wird Schleifeniteration genannt, die Zeile mit dem while nennt man Schleifenkopf, den zugehörigen Codeblock Schleifenrumpf # Print i as long as i is less than 6: i = 1 while i < 6: print(i) i += 1 52 Python Syntax Ablaufsteuerung über control flow statements while (Fortsetzung) das break Schlüsselwort kann verwendet werden, um die Schleife (sofort/vorzeitig) zu verlassen: # exit the loop when i is 3: i = 1 while i < 6: print(i) if i == 3: break i += 1 mit dem continue Schlüsselwort kann die aktuelle Schleifeniteration übersprungen werden: # Continue to the next iteration if i is 3: i = 0 while i < 6: i += 1 if i == 3: continue print(i) 53 Python Syntax Ablaufsteuerung über control flow statements while (Fortsetzung) In Python gibt es auch die Möglichkeit auf die “normale” Beendigung der Schleife zu reagieren (was bedeutet, dass die Schleife nicht vorzeitig durch ein break-Statement verlassen wurde) dies passiert mittels else-Schlüsselwort und zugehörigem Codeblock (ausgeführt bei “normaler” Beendigung) # print a message after loop ended: # compare with output of early stop using break: i = 1 i = 1 while i < 6: while i < 6: print(i) if i == 4: i += 1 break else: print(i) print("i is no longer less than 6") i += 1 else: print("i is no longer less than 6") 54 Python Syntax Wertbereiche (ranges) Die range() Funktion Pythons eingebaute range() Funktion erzeugt ein Objekt der Klasse range welches benutzt werden kann, um eine Sequenz von Zahlen zu erzeugen – diese Sequenz startet vom Wert 0 (Standard-Wert) und wächst mit jedem weiteren Wert um 1 (Standard-Wert) und endet vor einer zu spezifizierenden Nummer. Syntax: # create different ranges range(start, stop, step) range1 = range(6) range2 = range(3,6) Parameter Description range3 = range(3,20,2) start Optional. An integer number specifying at which position to start. Default is 0 print(range1) stop Required. An integer number specifying at which position to stop (not included). print(range2) step Optional. An integer number specifying the incrementation. Default is 1 print(range3) ranges werden oft zusammen mit for-Schleifen und membership-Operationen in und not in verwendet 55 Python Syntax Ablaufsteuerung über control flow statements for Eine for-Schleife iteriert über eine Sequenz (eine Liste, ein Tupel, ein dictionary, ein set, einen String, …) Sie ist daher etwas anders als das for-Schlüsselwort wie man es aus anderen Programmiersprachen kennt und funktioniert eher wie Iterator-Methoden in Objekt-orientierten Programmiersprachen. Mit der for-Schleife können wir einen Block von Anweisungen einmal für jedes Element der Sequenz ausführen # looping through a string: # Using the range() function: for x in "banana": for x in range(6): print(x) print(x) # Exit the loop when x is "banana": # for with range()function using start parameter fruits = ["apple", "banana", "cherry"] for x in range(2, 6): for x in fruits: print(x) print(x) if x == "banana": # Incrementing a sequence with 3: break for x in range(2, 32, 3): print(x) 56 Python Syntax Ausnahmen/Ausnahmebehandlung (exceptions/exception handling) try … except Verwendet um Ausnahmesituationen/(Laufzeit-)Fehler bei Programmausführung zu behandeln wenn während der Programmausführung in Python ein Fehler auftritt, wird die Programmausführung gestoppt und eine Fehlermeldung wird ausgegeben. # The try block will generate an Fehler sind in Python als spezielles Sprachkonstrukts # exception, because x is not defined: try: implementiert: Ausnahmen (exceptions) print(42 / 0) exception handling: es ist möglich exceptions abzufangen: except: print("division by zero occured") diese Funktionalität nennt sich Ausnahmebehandlung (exception handling) und in Python über die Schlüsselwörter # example with finally try: try und except möglich: print(42 / 7) Der finally Codeblock, falls angegeben, wird immer except: print("division by zero occured") ausgeführt, unabhängig davon, ob ein Fehler auftrat: finally: print("The 'try except' is finished") 57 Python Syntax Ausnahmen/Ausnahmebehandlung (exceptions/exception handling) exceptions werfen (raising/throwing exceptions) eigene Programme können auch Anlass-bezogen exceptions werfen, wenn dies Sinn macht. um eine exception zu werfen, verwendet man das raise Schlüsselwort. # Raise an error and stop the program if x is lower than 0: x = -1 if x < 0: raise Exception("Sorry, no numbers below zero") Man kann auch den Typ der exception bestimmen, dies ermöglicht detailliertere Fehlerinformationen. # Raise a TypeError if x is not an integer: x = "hello" if not type(x) is int: raise TypeError("Only integers are allowed") 58 Python Syntax Klassen und Objekte Python ist eine Objekt-orientierte Programmiersprache. Tatsächlich ist fast alles in Python ein Objekt, mit jeweiligen Eigenschaften und Funktionalitäten. Klassen (classes) Eine Klasse kann man sich als die Blaupause für das Erzeugen eines konkreten Objekts vorstellen Die Klassendefinition spezifiziert Eigenschaften des Objekts über Klassen-Variablen (class member variables/ properties) und Funktionalitäten über Klassen-Methoden (methods). Die Methoden definieren, was mit einem konkreten Objekt der Klasse gemacht werden kann (kann Klassenvariablen ändern oder Aufgaben ausführen) Objekte (objects) Instanzen (instances) ≡ konkrete Objekte der Klasse (Instanzen einer Klasse können ähnlich einer Variablen erzeugt werden) und wir können auf öffentliche Klassenvariablen zugreifen und Methoden der Klasse aufrufen Man betrachte Instanzen als unterschiedliche Verkörperungen von Objekten der gleichen Klasse mit unterschiedlichen Variablenwerten/Zuständen 59 Python Syntax Klassen und Objekte (Fortsetzung) Um Klassen und Objekten der Klassen verwenden zu können, muss zuerst die Klasse definiert werden: # Create a class named MyClass, with a property named x: class MyClass: x = 5 Danach können wir Objekte (Instanzen) der Klasse erzeugen (im Bsp. MyClass) und diese verwenden: # Create an object named p1, and print the value of x: p1 = MyClass() print(p1.x) 60 Python Syntax Klassen und Objekte (Fortsetzung) Das Beispiel der vorigen Folie zeigt eine Klasse und ein Objekt in einfachster Form ohne praktischen Nutzen In der Praxis werden Klassen i.A. komplexere Einheiten und Zusammenhänge/Funktionalitäten modellieren Um Klassen zu verstehen, müssen wir auch die eingebaute __init__() Methode verstehen Alle Klassen besitzen die Methode __init__(), die ausgeführt wird, wenn die Klasse instanziiert wird In der __init__() Methode können Variablen mit Initialwerten belegt werden oder andere nötige Initialisierungsschritte ausgeführt werden, wenn eine Objektinstanz erzeugt wird: # Create a class named Person, use the __init__() function to assign values for name and age: class Person: def __init__(self, name, age): self.name = name self.age = age p1 = Person("John", 36) Hinweis: der self Parameter ist eine Referenz auf die Instanz der Klasse selbst wird verwendet um auf Klassen-Variablen zuzugreifen. print(p1.name) print(p1.age) Er muss immer der erste Parameter jeder Klassen-Methode sein. 61 Python Syntax Klassen und Objekte (Fortsetzung) Klassen-Methoden werden innerhalb der Klasse definiert, gehören also zum Objekt und können für die Instanz mittels Syntax object.functionname() aufgerufen werden, der self Parameter ist beim Aufruf nicht explizit anzugeben, muss aber immer als 1. Parameter bei der Definition vorhanden sein: # Insert a function that prints a greeting, and execute it on the p1 object: class Person: def __init__(self, name, age): self.name = name self.age = age def greeting(self): print("Hello my name is " + self.name + " and I am " + str(self.age) + " years old!") p1 = Person("John", 36) p1.greeting() 62 Python Syntax Klassen-Vererbung (class inheritance) Vererbung (class inheritance) erlaubt es, dass eine Klasse alle Eigenschaften und Methoden einer anderen Klasse erbt und erweitert. Basisklasse (base class) ist die Klasse von der geerbt wird, wird auch parent class genannt. Abgeleitete Klasse (derived class) ist die Klasse, die von einer anderen Klasse erbt, auch child class genannt. # creating a parent class # creating a child class class Person: class Student(Person): def __init__(self, fname, lname): def __init__(self, fname, lname): self.firstname = fname Person.__init__(self, fname, lname) self.lastname = lname self.year = 2023 def printname(self): def welcome(self): print(self.firstname, self.lastname) print("Welcome", self.firstname, self.lastname, "to the class of", eine einzige Zeile #Use the Person class to create an object, and self.year) then execute the printname method: x = Person("John", "Doe") #Use the Student: x.printname() x = Student("John", "Doe") 63 x.welcome() Python Module Python Module (packages/libraries) Was ist ein Modul? Eine Sammlung von Funktionen und Code, die man in ein eigenes Programm einbinden kann (Code-Bibliothek). Der Code ist dabei in einer eigenen Datei gespeichert, welche das Python-Modul darstellt. Standardmäßig eingebauten Python Module Diese kann man im eigenen Code importieren und verwenden kann, ohne diese extra installieren zu müssen Eine Liste der eingebauten Python Module findet sich hier: https://docs.python.org/3/py-modindex.html # example of importing the built-in python module "math" # and using it’s square root and pi function sqrt(): import math x = math.pi * math.sqrt(64) print(x) 64 Python Module Selbsterstellte Python Module Erzeugen von eigenen Modulen in Python eigenes Modul erstellen: entsprechenden Code in einem separaten File mit der Dateiendung.py speichern: # save this code to a file mymodule.py def greeting(name): print("Hello, " + name + "!" ) In anderen.py-files kann man nun das Modul importieren und darin definierte Funktionen/Klassen verwenden: # Import the module named mymodule, and call the greeting function: import mymodule mymodule.greeting("coding god") das Modul beim Import umbenennen: nur bestimmte Funktionen importieren: # Import mymodule and rename it: # only import function greeting: import mymodule as newModuleName from mymodule import greeting 65 newModuleName.greeting("coding god") greeting("coding god") Python Packages Python packages und der Paket-Manager (package manager) Liste der externen Python packages, die wir verwenden werden numpy: https://www.w3schools.com/python/numpy/default.asp https://numpy.org/doc/stable/ matplotlib: https://www.w3schools.com/python/matplotlib_intro.asp https://matplotlib.org/stable/users/index.html Paket-Manager: Tool zum Installieren von externen Python packages, damit diese im Code importiert werden können Beispiele sind: pip, conda package manager 66

Use Quizgecko on...
Browser
Browser