Skip to content

Instantly share code, notes, and snippets.

@horstjens
Last active October 27, 2025 20:02
Show Gist options
  • Save horstjens/46bd43a7420e779d1516dd54cc472f2d to your computer and use it in GitHub Desktop.
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})
# 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