Skip to content

Instantly share code, notes, and snippets.

@horstjens
Last active November 3, 2025 16:35
Show Gist options
  • Select an option

  • Save horstjens/46bd43a7420e779d1516dd54cc472f2d to your computer and use it in GitHub Desktop.

Select an option

Save horstjens/46bd43a7420e779d1516dd54cc472f2d to your computer and use it in GitHub Desktop.
termin 07
text = """
Kanns was schön'res geben
als nach Höh'n zu streben
die noch keines Menschen Fuß betrat ?
Und bei Regenwettern
durch Kamine klettern
und bei Schnee zu reiten auf dem Grat?
"""
print(text)
# text in Datei schreiben:
# modi für open() "r": read "w": write "a":append
# siehe auch help("open")
with open("lied.txt", "w") as datei:
datei.write(text)
print("text wurde in die Datei 'lied.txt' geschrieben")
text = """
da steht nix drin
"""
print("text ist leer:")
print(text)
# text aus Datei lesen:
# modi für open() "r": read "w": write "a":append
# siehe auch help("open")
with open("lied.txt", "r") as datei:
text = datei.read()
print("text wurde von Datei 'lied.txt' gelesen")
print("text ist jetzt:")
print(text)
text = """
da steht nix drin
"""
print("text ist leer:")
print(text)
# text zeilenweise lesen
# modi für open() "r": read "w": write "a":append
# siehe auch help("open")
with open("lied.txt", "r") as datei:
zeilen = datei.readlines()
print("text wurde von Datei 'lied.txt' gelesen in ein array (eine Liste) von zeilen")
print("----- liste zeilen: ------")
print(zeilen)
print()
print("------iterieren über zeilen:------")
for zeile in zeilen:
print(zeile)
print("----iterieren ohne Leerzeilen zu printen-----")
for zeile in zeilen:
print(zeile, end="")
print()
print("--------------")
print("aus der zeilenliste wieder einen einzigen text machen (multi-line-string")
print("----------")
print("".join(zeilen))
# csv modul
# siehe https://docs.python.org/3/library/csv.html
# csv steht für comma seperated file
# einfach ein textfile wo die spalten einer tabelle mit Beistrichen getrennt sind
# kann ganz normal über open() gelesen/geschreiben werden
# aber besser geht's mit dem csv Modul (python standard library)
# und den funktionen DictReader und DictWriter
# bsp für csv.DictWriter
import csv
# append mode ("a") funktioniert auch wenn eine Datei noch nicht existiert
with open('konto.csv', 'a', newline='') as konto:
spaltenköpfe = ['datum', 'text', "betrag"]
schreiber = csv.DictWriter(konto, fieldnames=spaltenköpfe)
schreiber.writeheader()
schreiber.writerow({'datum': "2025-10-01",
"text": "Stromrechnung",
"betrag": 700})
schreiber.writerow({'datum': "2025-10-22",
"text": "Miete",
"betrag": 1400})
Python 3.13.5 (main, Jun 25 2025, 18:55:22) [GCC 14.2.0] on linux
Enter "help" below or click "Help" above for more information.
namen = ["adam abromovic", "berta besen", "carl Chaos", "doris day"]
namen.append("Ali Zusza")
namen
['adam abromovic', 'berta besen', 'carl Chaos', 'doris day', 'Ali Zusza']
namen[-1] = "ali zuza"
namen
['adam abromovic', 'berta besen', 'carl Chaos', 'doris day', 'ali zuza']
namen.sort()
namen
['adam abromovic', 'ali zuza', 'berta besen', 'carl Chaos', 'doris day']
namen.sort(reverse=True)
namen
['doris day', 'carl Chaos', 'berta besen', 'ali zuza', 'adam abromovic']
namen[0]
'doris day'
len(namen[0])
9
for n in namen:
print(len(n))
9
10
11
8
14
def länge(x):
return len(x)
länge("Ali zuza")
8
namen.sort(länge)
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
namen.sort(länge)
TypeError: sort() takes no positional arguments
namen.sort(key=länge)
namen
['ali zuza', 'doris day', 'carl Chaos', 'berta besen', 'adam abromovic']
namen.sort(key=lambda x:len(x), reverse=True)
namen
['adam abromovic', 'berta besen', 'carl Chaos', 'doris day', 'ali zuza']
feuerlöscher = {"farbe":"rot", "ort":"dachboden",nächste_wartung:2027}
Traceback (most recent call last):
File "<pyshell#39>", line 1, in <module>
feuerlöscher = {"farbe":"rot", "ort":"dachboden",nächste_wartung:2027}
NameError: name 'nächste_wartung' is not defined
feuerlöscher = {"farbe":"rot", "ort":"dachboden","nächste_wartung":2027}
feuerlöscher["farbe"]
'rot'
class Feuerlöscher:
farbe="rot"
ort="dachboden"
nächste_wartung=2027
Feuerlöscher.farbe
'rot'
Feuerlöscher.ort
'dachboden'
Feuerlöscher.nächste_wartung = 2033
feuerlöscher.__dict__
Traceback (most recent call last):
File "<pyshell#50>", line 1, in <module>
feuerlöscher.__dict__
AttributeError: 'dict' object has no attribute '__dict__'. Did you mean: '__dir__'?
feuerlöscher.__dir__
<built-in method __dir__ of dict object at 0x7f0553646180>
Fuerlöscher.__dict__
Traceback (most recent call last):
File "<pyshell#52>", line 1, in <module>
Fuerlöscher.__dict__
NameError: name 'Fuerlöscher' is not defined. Did you mean: 'Feuerlöscher'?
Feuerlöscher.__dict__
mappingproxy({'__module__': '__main__', '__firstlineno__': 1, 'farbe': 'rot', 'ort': 'dachboden', 'nächste_wartung': 2033, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'Feuerlöscher' objects>, '__weakref__': <attribute '__weakref__' of 'Feuerlöscher' objects>, '__doc__': None})
class Feuerlöscher:
def __init__(self, farbe="rot", wartung=2028, ort="stiegenhaus"):
self.farbe = farbe
self.wartung = wartung
self.ort = ort
self.gewicht = 5
self.löschmittel = "Schaum"
f1 = Feuerlöscher()
f2 = Feuerlöscher(farbe="orange")
f3 = Feuerlöscher(ort="Dachboden")
f1
<__main__.Feuerlöscher object at 0x7f0553f8a660>
f2
<__main__.Feuerlöscher object at 0x7f0553f77d90>
f3
<__main__.Feuerlöscher object at 0x7f0553f779d0>
f3.löschmittel
'Schaum'
f1.ort
'stiegenhaus'
f2.ort
'stiegenhaus'
f3.ort
'Dachboden'
f3.__dict__
{'farbe': 'rot', 'wartung': 2028, 'ort': 'Dachboden', 'gewicht': 5, 'löschmittel': 'Schaum'}
f1
<__main__.Feuerlöscher object at 0x7f0553f8a660>
f1.löschmittel
'Schaum'
f1.löschmittel = "Wasser"
f1.__dict__
{'farbe': 'rot', 'wartung': 2028, 'ort': 'stiegenhaus', 'gewicht': 5, 'löschmittel': 'Wasser'}
f1.handgriff = "plastik"
f2.handgriff = "eisen"
f1.handgriff
'plastik'
f2.handgriff
'eisen'
f3.handgriff
Traceback (most recent call last):
File "<pyshell#81>", line 1, in <module>
f3.handgriff
AttributeError: 'Feuerlöscher' object has no attribute 'handgriff'
class Feuerlöscher:
def __init__(self, farbe="rot", wartung=2028, ort="stiegenhaus"):
self.farbe = farbe
self.wartung = wartung
self.ort = ort
self.gewicht = 5
self.löschmittel = "Schaum"
def alterung(self):
# verliert 10% gewicht
self.gewicht *= 0.9
f1 = Feuerlöscher()
f1.geweicht
Traceback (most recent call last):
File "<pyshell#88>", line 1, in <module>
f1.geweicht
AttributeError: 'Feuerlöscher' object has no attribute 'geweicht'. Did you mean: 'gewicht'?
f1.gewicht
5
>>> f1.alterung()
>>> f1.gewicht
4.5
>>> f1.alterung()
>>> f1.gewicht
4.05
>>> f1.alterung()
>>> f1.gewicht
3.645
>>> f1.gewicht=6
>>> f1.gewicht
6
>>> f1.alterung()
>>> f1.gewicht
5.4
>>> " {} ....... {} ".format(17, 88)
' 17 ....... 88 '
# simuliert würfel
import random
# simuliere wurf mit 2 würfeln
# gib die summe der augenzahl zurück
print(random.randint(1,6))
print(random.randint(1,6))
# simuliert würfel
import random
# simuliere wurf mit 2 würfeln
# gib die summe der augenzahl zurück
a = random.randint(1,6)
b = random.randint(1,6)
print("erster Wurf:", a)
print("zweiter Wurf:", b)
print("summe:", a+b)
# simuliert würfel
import random
# simuliere wurf mit 2 würfeln
# gib die summe der augenzahl zurück
# Function die sowohl summe zurückgibt als auch Text
# return value: (8, "6+2")
def wurf():
a = random.randint(1,6)
b = random.randint(1,6)
return a+b, f"{a}+{b}"
# testen
for _ in range(10):
print(wurf())
# simuliert würfel
import random
# simuliere wurf mit 2 würfeln
# gib die summe der augenzahl zurück
# Function die sowohl summe zurückgibt als auch Text
# return value: (8, "6+2")
# test-teil sauber trennen von funktion
def wurf():
a = random.randint(1,6)
b = random.randint(1,6)
return a+b, f"{a}+{b}"
if __name__ == "__main__":
# wird nur ausgeführt, wenn das programm direkt gestartet wurde
# wird ignoriert, wenn programm importiert wurde
# testen
for _ in range(10):
print(wurf())
# importiere die Funktion wurf von würfel004.py
import würfel004
print(würfel004.wurf())
import random
# verbesserte Funktion: erlaubt parameter für
# anzahl der würfel,
# anzahl der seiten pro Würfel
def wurf(anzahl_würfel=2, anzahl_seiten=6):
summe = 0
text = ""
for x in range(anzahl_würfel):
e = random.randint(1, anzahl_seiten)
summe += e
text += f"+{e}"
return summe, text[1:] # erstes zeichen löschen
if __name__ == "__main__":
print("testen")
print("wurf(): {:>2} {}".format(*wurf()))
print("wurf(1): {:>2} {}".format(*wurf(1)))
print("wurf(3,6): {:>2} {}".format(*wurf(3,6)))
print("wurf(2,20): {:>2} {}".format(*wurf(2,20)))
import random
# exploding dice:
# würfel, der nochmal würfeln darf wenn eine (6 bzw.
#höchste Augenzahl) gewürfelt wird.
# bsp: 6-seitiger würfel:
# es wird eine 6 gewürfelt, sie zählt 5 (6-1) aber darf nochaml würfeln
# würfelt wieder eine 6 (zählt wieder als 5, also 5+5=10), darf nochmal
# würfelt eine 2, ergebnis ist 5+5+2 = 12
def exploding_dice(anzahl_würfel=2, anzahl_seiten=6):
summe = 0
text = ""
for x in range(anzahl_würfel):
while True:
e = random.randint(1, anzahl_seiten)
summe += e
text += f"+{e}"
if e == anzahl_seiten:
summe -= 1
text += "-1"
continue # geht an den Anfang der Schleife
break
text += " "
return summe, text[1:] # erstes zeichen löschen
# verbesserte Funktion: erlaubt parameter für
# anzahl der würfel,
# anzahl der seiten pro Würfel
def wurf(anzahl_würfel=2, anzahl_seiten=6):
summe = 0
text = ""
for x in range(anzahl_würfel):
e = random.randint(1, anzahl_seiten)
summe += e
text += f"+{e}"
return summe, text[1:] # erstes zeichen löschen
if __name__ == "__main__":
print("testen")
for _ in range(10):
print("wurf(2,6): {:>2} = {}".format(*exploding_dice(2,6)))
import random
# D&D würfel
# "2d6+4"
# nimm 2 würfel (6-seiten) zum endergebnis zähle 4 dazu
# "3d20-1"
# nimm 3 20-seitige würfel, ziehe vom endergebnis 1 ab
# wenn ein kleines d drin steht .... "normaler" Würfel
# wenn ein großes D drin steht ..... "exploding dice"
# "2D6" ... nimm 2 exploding dice mit je 6 seiten, zähle zum
# endergebnis nichts dazu
def dnd(anzahl_würfel=2,
anzahl_seiten=6,
exploding=False,
delta=0):
if exploding:
summe, text = exploding_dice(anzahl_würfel, anzahl_seiten)
else:
summe, text = wurf(anzahl_würfel, anzahl_seiten)
# delta berücksichtigen
if delta == 0:
return summe, text
if delta > 0:
summe += delta
text += f"+{delta}"
return summe, text
if delta < 0:
summe += delta
text += f"{delta}" # hat Minus schon dabei
return summe, text
def exploding_dice(anzahl_würfel=2, anzahl_seiten=6):
summe = 0
text = ""
for x in range(anzahl_würfel):
while True:
e = random.randint(1, anzahl_seiten)
summe += e
text += f"+{e}"
if e == anzahl_seiten:
summe -= 1
text += "-1"
continue # geht an den Anfang der Schleife
break
text += " "
return summe, text[1:] # erstes zeichen löschen
# verbesserte Funktion: erlaubt parameter für
# anzahl der würfel,
# anzahl der seiten pro Würfel
def wurf(anzahl_würfel=2, anzahl_seiten=6):
summe = 0
text = ""
for x in range(anzahl_würfel):
e = random.randint(1, anzahl_seiten)
summe += e
text += f"+{e}"
return summe, text[1:] # erstes zeichen löschen
if __name__ == "__main__":
print("testen")
for _ in range(10):
print("dnd(2,6,True,4): {:>2} = {}".format(*dnd(2,6,True, 4)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment