Skip to content

Instantly share code, notes, and snippets.

@horstjens
Last active November 10, 2025 12:23
Show Gist options
  • Select an option

  • Save horstjens/947188ab48389cecb719fe10c4b8c69c to your computer and use it in GitHub Desktop.

Select an option

Save horstjens/947188ab48389cecb719fe10c4b8c69c to your computer and use it in GitHub Desktop.
termin 09
# zuordnung von Puzzlesteinen zu Puzzlespielen kann auf
# verschiende Arten erfolgen
class Lager:
meine_spiele = [] # class variable
class Puzzlespiel:
def __init__(self, bild, anzahl_steine, zustand):
self.bild = bild
self.anzahl_steine = anzahl_steine
self.zustand = zustand
# self referenziert DIESE Instanz
Lager.meine_spiele.append(self)
self.steine = [] # leere Liste
class Puzzlestein:
def __init__(self, zustand, anzahl_glatten_Kanten, anzahl_zapferl, anzahl_buchten):
self.zustand = zustand
self.anzahl_glatten_Kanten = anzahl_glatten_Kanten
self.anzahl_zapferl = anzahl_zapferl
self.anzahl_buchten = anzahl_buchten
# instanzen erzeugen
Puzzlespiel("pferd.jpg", 500, "gut")
Puzzlespiel("wasserfall.jpg", 1000, "leicht beschädigt")
Puzzlespiel("wiese.jpg", 200, "gut")
for p in Lager.meine_spiele:
#print("alle attribute dieser instanz")
#print(p.__dict__) # zeigt alle eigenschaften vom puzzlespiel
p.steine.append(Puzzlestein("gut", 0, 4, 0))
p.steine.append(Puzzlestein("gut", 1, 3, 1))
p.steine.append(Puzzlestein("gut", 0, 2, 2))
for spiel in Lager.meine_spiele:
print("spiel instanz:")
print(spiel.__dict__)
print("spielsteine:")
for steinchen in spiel.steine:
print(steinchen.__dict__)
# zuordnung von Puzzlesteinen zu Puzzlespielen kann auf
# verschiende Arten erfolgen
class Lager:
meine_spiele = [] # class variable
class Puzzlespiel:
def __init__(self, bild, breite, höhe):
self.bild = bild
self.breite = breite
self.höhe = höhe
self.anzahl_steine = breite * höhe
# self referenziert DIESE Instanz
Lager.meine_spiele.append(self)
self.steine = [] # leere Liste
class Puzzlestein:
def __init__(self, nummer, oben, unten, links, rechts, beschädigt=False):
self.nummer = nummer
self.oben = oben
self.unten = unten
self.links = links
self.rechts = rechts
self.beschädigt = beschädigt
# instanzen erzeugen
if __name__ == "__main__":
Puzzlespiel("wasserfall.jpg", 50, 20)
print(Lager.meine_spiele)
# zuordnung von Puzzlesteinen zu Puzzlespielen kann auf
# verschiende Arten erfolgen
import random
class Lager:
meine_spiele = [] # class variable
class Puzzlespiel:
def __init__(self, bild, breite, höhe):
self.bild = bild
self.breite = breite
self.höhe = höhe
self.anzahl_steine = breite * höhe
# self referenziert DIESE Instanz
Lager.meine_spiele.append(self)
self.steine = [] # leere Liste
def erzeuge_steine(self):
gegenteil = {"zapfen":"loch",
"loch":"zapfen"}
i = 0
for y in range(self.höhe):
for x in range(self.breite):
pass
#stein = Puzzlestein(nummer=i,
class Puzzlestein:
def __init__(self, nummer, oben, unten, links, rechts, beschädigt=False):
self.nummer = nummer
self.oben = oben
self.unten = unten
self.links = links
self.rechts = rechts
self.beschädigt = beschädigt
def __str__(self):
text ="#{} links:{} rechts:{} oben:{} unten:{}"
text = text.format(self.links, self.rechts,
self.oben, self.unten)
# instanzen erzeugen
if __name__ == "__main__":
Puzzlespiel("wasserfall.jpg", 50, 20)
print(Lager.meine_spiele)
# zuordnung von Puzzlesteinen zu Puzzlespielen kann auf
# verschiende Arten erfolgen
import random
class Lager:
meine_spiele = [] # class variable
class Puzzlespiel:
def __init__(self, bild, breite, höhe):
self.bild = bild
self.breite = breite
self.höhe = höhe
self.anzahl_steine = breite * höhe
# self referenziert DIESE Instanz
Lager.meine_spiele.append(self)
self.steine = [] # leere Liste
def erzeuge_steine(self):
gegenteil = {"Zapfen":"Bucht",
"Bucht":"Zapfen"}
i = 0
for y in range(self.höhe):
for x in range(self.breite):
stein = Puzzlestein(nummer=i,
beschädigt=False,
unten=None,
oben=None,
links=None,
rechts=None)
# kante oben? weil erste Reihe ?
if y == 0:
stein.oben = "Kante"
# kante unten weil unterste Reihe ?
if y == self.höhe - 1 : #weil python beginnt mit 0 zu zählen
stein.unten = "Kante"
# kante links ?
if x == 0:
stein.links = "Kante"
# kante rechts
if x == self.breite - 1:
stein.rechts = "Kante"
# zufällig zapfen und buchten vergeben
if stein.rechts is None:
stein.rechts = random.choice(("Zapfen", "Bucht"))
if stein.unten is None:
stein.unten = random.choice(("Zapfen", "Bucht"))
if stein.links is None:
# vorgängerstein hat index [i-1] oder self.steine[-1]
vorgänger = self.steine[-1]
vorgänger_form = vorgänger.rechts
stein.links = gegenteil[vorgänger_form]
if stein.oben is None:
# vorgängerstein hat index[i-self.breite]
vorgänger = self.steine[i-self.breite] # nachbar oben
vorgänger_form = vorgänger.unten
stein.oben = gegenteil[vorgänger_form]
# stein zu den anderen steinen im spiel dazutun
self.steine.append(stein)
i += 1
class Puzzlestein:
def __init__(self, nummer, oben, unten, links, rechts, beschädigt=False):
self.nummer = nummer
self.oben = oben
self.unten = unten
self.links = links
self.rechts = rechts
self.beschädigt = beschädigt
def __str__(self):
text ="#{} links:{} rechts:{} oben:{} unten:{}"
text = text.format(self.nummer, self.links, self.rechts,
self.oben, self.unten)
return text
# instanzen erzeugen
if __name__ == "__main__":
p = Puzzlespiel("wasserfall.jpg", 50, 20)
#print(Lager.meine_spiele)
#stein = Puzzlestein(55, "Rand", "Zapfen", "Bucht", "Bucht")
#print(stein)
p.erzeuge_steine()
#print(p.steine)
for s in p.steine:
print(s)
import os # operation system
#https://docs.python.org/3/library/os.html
# os.path.join
# zugriff auf datei "rex.jpg" im Ordner "Hund":
# unter linux und macOS: folder/file
# unter windows: folder\file
# os.path.join wählt immer das richtige Verbindungszeichen
dateiname = os.path.join("Hund", "rex.jpg")
# os.name .. zeight betriebssystem an
print("Betriebsystem:", os.name)
# os.getcwd() ... zeigt current work directory
print(os.getcwd())
# os.walk ... durchsucht (rekursiv!) dateien und ordner
#for root, dirs, files in os.walk('.'):
# #print(root, dirs, files)
# print("============================")
# print("derzeit:", root)
# print("=============================")
# print("---- (unter)verzeichnisse: ----")
# for d in dirs:
# print(d)
# print("----- Dateien ----")
# for file in files:
# print(file)
# input("bitte enter drücken")
# pathlib
import pathlib
for root, dirs, files in pathlib.Path(".").walk():
print("======root ist: ===========================")
print(root)
print("===========================================")
print("---------- folders: ---------------")
for d in dirs:
print(d)
print("- - - - - - files - - - - - - - ")
for f in files:
print(f)
print("-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.")
input("Enter drücken")
# os.call ... ruft ein anderes Programm direkt vom Betriebssystem auf (z.B. calc.exe )
# bessere Alternative subprocess
import subprocess
subprocess.call("pluma") # started (im Labor) den Editor pluma
# sys ... System
import sys #https://docs.python.org/3/library/sys.html
# liste der argumente ... das erste argument ist immer der
# python-filename
# die elemente der Liste sind immer strings
# bsp: programm starten mit python termin09_001.py abc 123
print("sys.argv ist", sys.argv)
#sys.exit() # beendet ein programm sofort
x = "Berta Besen"
x
'Berta Besen'
" " in x
True
x.index(" ")
5
x[x.index(" ")+1:]
'Besen'
name1, name2, name3 = "Alice", "Bob", "Carl"
name1 = name1[0:2]+"X" + name1[3:]
def delta():
return delta
x = delta()
x
<function delta at 0x78a982db3c70>
# oop, classen und vererbung
class Spielzeug:
def __init__(self, name):
self.name = name
self.farbe = "grün"
class Schwimmi(Spielzeug):
def schwimm(richtung):
print(f"ich schwimme nach {richtung}")
s1 = Spielzeug()
Traceback (most recent call last):
File "/usr/lib/python3.10/idlelib/run.py", line 578, in runcode
exec(code, self.locals)
File "<pyshell#25>", line 1, in <module>
TypeError: Spielzeug.__init__() missing 1 required positional argument: 'name'
s1 = Spielzeug("tsunami")
s1
<__main__.Spielzeug object at 0x78a982da3cd0>
s1.farbe
'grün'
s2 = Schwimmi("ente")
s2.farbe
'grün'
s1
<__main__.Spielzeug object at 0x78a982da3cd0>
type(s1)
<class '__main__.Spielzeug'>
s1.schwimm()
Traceback (most recent call last):
File "/usr/lib/python3.10/idlelib/run.py", line 578, in runcode
exec(code, self.locals)
File "<pyshell#33>", line 1, in <module>
AttributeError: 'Spielzeug' object has no attribute 'schwimm'
s2
<__main__.Schwimmi object at 0x78a982da3dc0>
type(s2)
<class '__main__.Schwimmi'>
s2.schwimm("vorne")
Traceback (most recent call last):
File "/usr/lib/python3.10/idlelib/run.py", line 578, in runcode
exec(code, self.locals)
File "<pyshell#36>", line 1, in <module>
TypeError: Schwimmi.schwimm() takes 1 positional argument but 2 were given
class Schwimmi(Spielzeug):
def schwimm(self, richtung):
print(f"ich schwimme nach {richtung}")
s2 = Schwimmi("ente")
s2
<__main__.Schwimmi object at 0x78a982da3eb0>
type(s2)
<class '__main__.Schwimmi'>
s2.schwimm("vorne")
ich schwimme nach vorne
s1.schwimm("vorne")
Traceback (most recent call last):
File "/usr/lib/python3.10/idlelib/run.py", line 578, in runcode
exec(code, self.locals)
File "<pyshell#43>", line 1, in <module>
AttributeError: 'Spielzeug' object has no attribute 'schwimm'
class Schwimmi(Spielzeug):
def __init__(self, name, farbe="grün"):
Spielzeug.__init__(name)
self.farbe = farbe # überschreibe die Farbe vom Spielzeug
def schwimm(self, richtung):
print(f"ich schwimme nach {richtung}")
s3 = Schwimmi("gummiente", "gelb")
Traceback (most recent call last):
File "/usr/lib/python3.10/idlelib/run.py", line 578, in runcode
exec(code, self.locals)
File "<pyshell#46>", line 1, in <module>
File "<pyshell#45>", line 3, in __init__
TypeError: Spielzeug.__init__() missing 1 required positional argument: 'name'
class Schwimmi(Spielzeug):
def __init__(self, name, farbe="grün"):
Spielzeug.__init__(self, name)
self.farbe = farbe # überschreibe die Farbe vom Spielzeug
def schwimm(self, richtung):
print(f"ich schwimme nach {richtung}")
s3 = Schwimmi("gummiente", "gelb")
s3.farbe
'gelb'
s3.name
'gummiente'
class Flugi(Spielzeug):
def __init__(self, name, farbe="rot"):
Spielzeug.__init__(self, name)
self.farbe = farbe
def flieg(self):
print("flap-flap-flap")
s4 = Flugi("habicht")
s4
<__main__.Flugi object at 0x78a980d4f2b0>
type(s4)
<class '__main__.Flugi'>
s4.flieg()
flap-flap-flap
s4.schwimm("vorne")
Traceback (most recent call last):
File "/usr/lib/python3.10/idlelib/run.py", line 578, in runcode
exec(code, self.locals)
File "<pyshell#63>", line 1, in <module>
AttributeError: 'Flugi' object has no attribute 'schwimm'
>>> class Wasserflugzeug(Flugi, Schwimmi):
... def __init__(self, name, farbe="türkis")
...
SyntaxError: incomplete input
>>> class Wasserflugzeug(Flugi, Schwimmi):
... def __init__(self, name, farbe="türkis"):
... super().__init__(name)
... self.farbe = farbe
...
...
>>> s5 = Wasserflugzeug("kingfischer")
>>> s5.__dict__
{'name': 'kingfischer', 'farbe': 'türkis'}
>>> s5.schwimm("schnell nach vorne")
ich schwimme nach schnell nach vorne
>>> s5.flieg()
flap-flap-flap
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment