Vorbereitung auf das PCAP Zertifikat
Im Unterschied zu PHP, C++ und vielen anderen Programmiersprachen werden keine Klammern, sondern Doppelpunkte und Einrückungen verwendet. Ein Semikolon am Zeilende führt nicht zu einem Fehler, wird aber in der Regel weg gelassen. Dateiendung in Python: py.
Die Standard ASCII Zeichenkodierung definiert nur 128 Zeichen
(Zahlen, Groß-, Kleinbuchstaben und drum herum Zeichen)! Pro Zeichen werden 8 Bit verwendet.
UNICODE ist in der Lage, praktisch alle von Menschen verwendete Alphabete zu kodieren.
UTF ist die Abkürzung für Unicode Transformation Format.
Main
if __name__ == "__main__":
main()
Variablen
Datentypen sind hier gut beschrieben.
x, X = "x", "X"
print(x) # x
print(X) # X
x = y = z = 1
print(f"{x} {y} {z}") # 1 1 1
colors = ["red", "black"]
c1, c2 = colors
print(c1) # red
print(c2) # black
Casting
bool(...) # class 'bool'
int(...) # class 'int'
float(...) # class 'float'
str(...) # class 'str'
list(...) # class 'list' (s.u. Map)
tuple(...) # class 'tuple'
set(...) # class 'set'
print(type(...))
Formatierung
print(int("123")) # 123
int("abc") # ValueError
int('12.0') # ValueError
x = 1.235
print(f"Wert: {x:.2f}")
print(f"Wert: {round(x, 2)}")
# Wert: 1.24
# Wert: 1.24
y = "1.235"
print(f"Wert: {float(y):.2f}")
print(f"Wert: {round(float(y), 2)}")
# Wert: 1.24
# Wert: 1.24
print("123".zfill(5)) # 00123 <= zeros on the left
Zeichen / ASCII code
Ein codepoint ist eine Zahl, die einem Zeichen zugeordnet wurde:
print(ord('0')) # 48
print(ord('A')) # 65
print(ord('a')) # 97
print(chr(48)) # 0
print(chr(65)) # A
print(chr(97)) # a
Strings
print('10:00'.isdigit()) # False
print('2025'.isdigit()) # True
print('UTF8'.isalpha()) # False
print('Yes'.isalpha()) # True
print(''.isspace()) # False
print(' '.isspace()) # True
print('\n'.isspace()) # True
print("Suche".endswith("e")) # True
print("Suche".endswith("E")) # False
Vergleich
print('test' > 'Test') # True
print('TEST' > '1000') # True
print('200' > '1000') # True
Wiederholung
text = 'Hallo '
print(text + text + text) # Hallo Hallo Hallo
print(text * 3) # Hallo Hallo Hallo
text *= 3
print(text) # Hallo Hallo Hallo
Suchen, Trennen und Manipulieren
print("Suche".find("S")) # 0
print("Suche".find("s")) # -1
print("Suche".index("S")) # 0
print("Suche".index("s")) # ValueError
print('Suche'.replace('u', 'a')) # Sache
if "Ich" in "Ich lerne Python":
print("Ja") # Ja
print("Suche für mich ein Wort".partition("Suche"))
# ('', 'Suche', ' für mich ein Wort')
print("Suche für mich ein Wort".partition("mich"))
# ('Suche für ', 'mich', ' ein Wort')
print("Suche für mich ein Wort".partition("Wort"))
# ('Suche für mich ein ', 'Wort', '')
print(".Suche..".split(".")) # ['', 'Suche', '', '']
print(".Suche..".strip(".")) # Suche
print(".".join("Suche")) # S.u.c.h.e
text = "Ich lerne Python"
print(text.split()) # ['Ich', 'lerne', 'Python'] <= in Worte trennen
print(text.split()[::-1]) # ['Python', 'lerne', 'Ich'] <= reverse!
print(text.split()[::-1][0]) # Python <= erste Element
print('Python'[:2]) # Py => bis Position 2
print('Python'[1:2]) # y => Position 1
print('Python'[1:]) # ython => ab Position 1
Sortierung
print(sorted('Python'))
# ['P', 'h', 'n', 'o', 't', 'y']
print(sorted('Python', reverse=True))
# ['y', 't', 'o', 'n', 'h', 'P']
Arrays
Arrays können in Python folgende Datentypen sein: List, Tuple, Set oder Dictionary.
List: [...]
ist geordnet, änderbar und erlaubt doppelte Einträge:l = [3, "Hallo", True, 3]
print(l)
# [3, 'Hallo', True, 3]
Tupel: (...)
ist geordnet und unveränderlich und erlaubt doppelte Einträge:t = ("Stift", "Papier", "Schere", "Stift")
print(t)
# ('Stift', 'Papier', 'Schere', 'Stift')
Set: {...}
ist ungeordnet, unveränderlich, unindiziert, hat keine doppelten Einträge und erlaubt Hinzufügen und Entfernen:s = {True, 1, 0, False, None}
print(s)
# {0, True, None}
Dictionary {... : ...}
ist änderbar und hat keine doppelten Einträge:d = {
"brand": "Mini",
"brand": "Porsche",
"year": 2000,
"colors": ["Silber", "Schwarz"]
}
print(d)
# {'brand': 'Porsche', 'year': 2000, 'colors': ['Silber', 'Schwarz']}
Werte aus Listen erhalten (Unpacking):
colors = ['rot', 'gelb', 'orange']
color1, color2, color3 = colors
Listen erzeugen ähnlich der Mengenschreibweise (List Comprehensions):
Quadrate aller geraden Zahlen kleiner 10 (0, 2, 4, 6, 8):sq = [x*x for x in range(10) if x%2==0]
print(sq)
# [0, 4, 16, 36, 68]
Map:
Die Funktion map() führt eine bestimmte Funktion für jedes Element in einer Liste/Tupel/Set/Dictionary aus. Das Element wird als Parameter an die Funktion gesendet. Beim Dictionary werden allerdings die Keys verwendet!
numbers = [2, 4, 6] # (2, 4, 6) {2, 4, 6}
square = lambda x: x ** 2 # x hoch 2
result = map(square, numbers)
print(list(result)) # [4, 16, 36]
numbers = {0:2, 1:4, 2:6} # Dictionary
square = lambda x: x ** 2 # x hoch 2
result = map(square, numbers.values()) # sonst [0, 1, 4]
print(list(result)) # [4, 16, 36]
Schleifen
Einfache Schleifen werden mit range() erzeugt:for i in range(3): #start=0,stop=3,step=1
print(i) # 0,1,2
for i in range(1, 3): #start=1,stop=3,step=1
print(i) # 1,2
for i in range(1, 3, 2): #start=1,stop=3,step=2
print(i) # 1
print(range(3)) # range(0, 3)
print(len(range(3))) # 3
Schleifen mit Listen:
for x in [5, 2, 9]:
print(x) # 5,2,9
numbers = ["one", "two", "three"]
for s in numbers:
print(s) # one, two, three
i = 0
while i < len(numbers):
print(numbers[i]) # one, two, three
i += 1
[print(c) for c in numbers] # one, two, three
print(len(numbers)) # 3
Schleifen mit Dictionaries:
numbers = {1: "one", 2: "two", 3: "three"}
for s in numbers:
print(s) # 1,2,3 = keys!
print(numbers[s]) # values!
for s in numbers.values():
print(s) # one, two, three
for key, value in numbers.items():
pass # Schleifen dürfen nicht leer sein
print(numbers) # {1: 'one', 2: 'two', 3: 'three'}
print(numbers.keys()) # dict_keys([1, 2, 3])
print(numbers.values()) # dict_values(['one', 'two', 'three'])
print(len(numbers)) # 3
Schleifen mit Strings:
for x in "banana":
print(x) # einzelne Buchstaben!
Funktionen
Funktionen werden mit def definiert:def add(a, b=0):
"""Addition: a + b"""
return a + b
Funktionen mit beliebig vielen Argumenten:
def multi(*values):
print(values)
multi("eins", "zwei", 3, True)
# ('eins', 'zwei', 3, True)
Anonyme Funktionen:
Die Syntax ist: lambda arguments : expressiona = lambda x, y: x+y
print(a(5, 6))
# 11
OOP Objektorientierung
Klassen:
class Person:
nr = 0 # Klassenvariable
def __init__(self, name): # wird automatisch aufgerufen
self.name = name # Objektvariable
Person.nr += 1
def greet(self):
print(f"Hi, ich bin {self.name}")
p1 = Person("Anna")
p1.greet() # Hi, ich bin Anna
p2 = Person("Paula")
p2.greet() # Hi, ich bin Paula
print(Person.nr, p1.nr, p1.name , p2.nr, p2.name) # 2 2 Anna 2 Paula
Vererbung:
class Student(Person):
def __init__(self, name, semester):
self.__semester = semester # private durch __
Person.__init__(self, name)
def greet(self):
print(f"Hi, ich bin {self.name} im {self.__semester} Semester.")
p = Student("Tanja", "dritten")
p.greet()
# Hi, ich bin Tanja im dritten Semester.
Mehrfachvererbung:
class Person:
def __init__(self, name):
self.name = name
def greet(self):
print(f"Hi, ich bin {self.name}!")
class Studienfach:
def __init__(self, name):
self.name = name
class Student(Person, Studienfach):
def __init__(self, name, fach):
Person.__init__(self, name)
Studienfach.__init__(self, fach) # überschreibt name!
p = Student("Anja", "Medizin")
p.greet()
# Hi, ich bin Medizin!
Exceptions
try:
int("Test")
except ValueError as e:
print("Fehler:", e)
except:
print("Default exception!")
finally:
print("Fertig")
# Fehler: invalid literal for int() with base 10: 'Test'
# Fertig
Eingaben bzw. ZeroDivisionError:
TypeError wird hier nicht geworfen, entwerder ZeroDivisionError bei einer 0 oder ValueError, wenn es keine ganze Zahl (ohne Punkt und Komma) ist.
try:
num = int(input("Number:"))
print(10/num)
except (ValueError, ZeroDivisionError):
print("Fehler: bitte nur Zahlen über 0 eingeben!")
Exception mit Argumenten:
try:
raise Exception(1,2,3,4,5,"error")
except Exception as e:
print(e.args)
# (1, 2, 3, 4, 5, 'error')
Custom Exception:
class MyException(Exception):
def __init__(self, msg):
self.msg = msg
raise MyException("Bädö")
# __main__.MyException: Bädö
BaseException:
Exeption fängt die meisten Fehler bereits ab, aber BaseException fängt zusätzlich SystemExit, KeyboardInterrupt und GeneratorExit ab. Durch KeyboardInterrupt wird auch das gewollte Beenden mit ^C abgefangen, wodurch das Programm hängen bleiben kann.try:
raise Exception
except BaseException:
print("Base")
except Exception:
print("Ex")
# Base
Assertion
Fehlerbehandlungen (Exeptions) sollten für Fehlerzustände geschrieben werden, welche man erwartet; Zusicherungen (Assertion) für Fehlerzustände, die niemals auftreten sollten.
try:
assert 2 + 2 == 5, "Logischer Fehler"
except AssertionError as a:
print(a) # Logischer Fehler
Dateien
Mögliche Datei Modi: 'r', 'w', 'a', 'b', '+'with open("file.txt", "r", encoding="utf-8") as f:
data = f.read()
Bilder einlesen / binary in bytearray:
try:
stream = open("/pfad/Bild.jpg", "rb")
image = bytearray(stream.read())
stream.close()
except IOError:
print("Oh no!")
else:
print("OK!")
Packages
Pip ist das Paketinstallationsprogramm für Python. Mit pip (pip3) können Pakete aus dem Python Package Index (PyPI) und anderen Indizes installiert werden. Ab Python Version 3.4 ist PIP ist enthalten.
pip --version
pip install ...
pip list # Installierte Pakete inkl. Version
pip uninstall ...
pip help
Mathematik Funktionen:
import math
x = -1.5
print(math.floor(x)) # -2
print(math.ceil(x)) # -1
print(math.trunc(x)) # -1
print(abs(x)) # 1.5
from math import e, exp, log
print(e) # 2.718...
print(pow(e, 1)) # 2.718...
print(exp(log(e))) # 2.718...
print(pow(3, 3)) # 27
print(exp(3*log(3))) # 27
print(log(e, e)) # 1.0
print(exp(0)) # 1.0
Zufall:
import random
Obst = ['Äpfel', 'Birnen', 'Bananen', 'Kiwi']
random.shuffle(Obst)
print(Obst) # ['Birnen', 'Bananen', 'Kiwi', 'Äpfel']
from random import randrange, randint
print(randrange(0,1)) # 0 (0 bis 1 ohne 1!)
print(randint(0,1)) # 0 oder 1 - kein dritter Parameter!
Kalender:
import calendar
print(calendar.isleap(2026)) # False = nicht teilbar durch 400
print(calendar.isleap(2000)) # True = teilbar durch 400
c = calendar.Calendar()
for weekday in c.iterweekdays():
print(weekday, end = "|") # 0|1|2|3|4|5|6|
Betriebsystem:
import platform
print(platform.system()) # Linux
print(platform.version()) # ... Ubuntu ...
print(platform.processor()) # x86_64