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.

Revisions

  1. horstjens revised this gist Nov 10, 2025. 1 changed file with 149 additions and 0 deletions.
    149 changes: 149 additions & 0 deletions vererbung_idle_session.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,149 @@

    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
  2. horstjens revised this gist Nov 8, 2025. 1 changed file with 94 additions and 0 deletions.
    94 changes: 94 additions & 0 deletions termin09_puzzle09.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,94 @@
    # 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)

  3. horstjens revised this gist Nov 8, 2025. 1 changed file with 58 additions and 0 deletions.
    58 changes: 58 additions & 0 deletions termin09_puzzle009.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,58 @@
    # 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)


  4. horstjens revised this gist Nov 8, 2025. 1 changed file with 8 additions and 6 deletions.
    14 changes: 8 additions & 6 deletions termin09_puzzle008.py
    Original file line number Diff line number Diff line change
    @@ -20,12 +20,14 @@ def __init__(self, bild, breite, höhe):

    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

    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

  5. horstjens revised this gist Nov 8, 2025. 1 changed file with 37 additions and 0 deletions.
    37 changes: 37 additions & 0 deletions termin09_puzzle008.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,37 @@
    # 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, 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

    if __name__ == "__main__":

    Puzzlespiel("wasserfall.jpg", 50, 20)
    print(Lager.meine_spiele)


  6. horstjens revised this gist Nov 8, 2025. 1 changed file with 52 additions and 0 deletions.
    52 changes: 52 additions & 0 deletions termin09_puzzle007.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,52 @@
    # 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__)
  7. horstjens revised this gist Nov 8, 2025. 1 changed file with 71 additions and 1 deletion.
    72 changes: 71 additions & 1 deletion termin_09_001.py
    Original file line number Diff line number Diff line change
    @@ -1 +1,71 @@
    # Uebungen zu os, sys, pathlib
    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

  8. horstjens created this gist Nov 8, 2025.
    1 change: 1 addition & 0 deletions termin_09_001.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1 @@
    # Uebungen zu os, sys, pathlib