# %% [markdown]
# # Kontrollstrukturen und Vergleichsoperatoren

# %% [markdown]
# ## Verzweigung (Branching)

# %%
# if / else / elif

alter = -1

if alter >= 16:
    print("Nicht vergessen: am 9.6.2024 ist Europa-Wahl!")
elif alter > 0:
    print("Schön, dass du geboren bist!")
else:
    print("Hmm, ob das so stimmt?")

# %%
richtung = "s"

if richtung == "n":
    print("Auf in den hohen Norden!")
elif richtung == "s":
    print("Nach Süden, nach Süden!")
elif richtung == "w":
    print("Go west!")
elif richtung == "o":
    print("Bin schon da.")


# %%
# match

# richtung = input("Wo soll's denn lang gehen? ")
richtung = "n"

match richtung:
    case "n" | "norden":
        print("Auf in den hohen Norden!")
    case "s" | "süden":
        print("Nach Süden, nach Süden!")
    case "w" | "westen":
        print("Go west!")
    case "o" | "osten":
        print("Bin schon da.")
    case _:
        print("Das Glück liegt manchmal abseits des direkten Wegs!")

# %% [markdown]
# ## Schleifen

# %%
# for

for i in range(5):
    print("Schleifendurchlauf Nr. ", i)


# %%
result = 0
for i in range(1, 11):
    result += i
print("Summe der Zahlen 1-10:", result)

# %%
for i in (2, 4, 6, 8, 9, 10):
    if i % 2:
        print(i, "passt nicht in die Reihe")

# %%
# while

i = 10
while i > 0:  # or: while True:
    print(i, "... ", end="")
    i -= 1
print("Lift off!")

# %%
# continue

for i in range(10, 20):
    if i == 13:
        continue
    print(i)

# %%
# break

i = 0
result = 0
maximum = 10_000

while True:
    result += i

    if result >= maximum:
        print("Iteration: ", i+1)
        break

    i += 1


# %%
alphabet = "abcdefghifklmnopqrstuvwxyz"
buchstabe = "q"
i = 0
for char in alphabet:
    i += 1
    if char == buchstabe:
        print(buchstabe, "ist Buchstabe Nr.", i, "des dt. Alphabets.")
        break


# %%
# einfacher:

for i, char in enumerate(alphabet):
    if char == buchstabe:
        print(buchstabe, "ist Buchstabe Nr.", i + 1, "des dt. Alphabets.")
        break

# %% [markdown]
# # Funktionen

# %%
# Aufruf eingebauter Funktionen

x = pow(2, 8)
y = max(x, 100)
z = min(max(0, x), 100)
print(x, y, z)

# %%
# optionale Parameter

print()
print("")

# %%
# eigene Funktionen

def add(a, b):
    return a + b

print(add(2, 3))

# %%
# Keyword arguments

print(add(a=5, b=10))
print(add(4, b=20))

# %%
# Das geht nicht:
print(add(a=6, 10))

# %% [markdown]
# # Vergleichsausdrücke

# %%
a = 10
b = 50
c = 2
d = 5 * a

print(a == b)
print(a != d)
print(a > b)
print(a > c)
print(a >= c)
print(c > a)
print(c < b)
print(c >= 2)

# %%
# Negation

print(not c > a)
print(not a == b)   # klarer: a != b
print(not b != d)   # klarer: b == d
print(not a > c)

# %%
# logische Kombination

print(b > a and a > c)
print(a > b or a > c)
print(not a < c and b >= d)

# %%
# Bool'scher (True/False) Wert von Integers, Floats und Strings  
print(a > c)
print(bool(a > c))  ## redundant, da Vergleichsausdrücke immer einen bool'schen Wert haben
# Aber:
print(bool(a))
print(not a)  # auch ein bool'scher Ausdruck


# %%
print(bool(0))
print(bool(1))
print(bool(-1))
print(bool(0.0))
print(bool(0.1))
print(bool(-0.1))
print(bool("True"))
print(bool("False"))  # !!!
print(bool(""))
print(bool("\0"))



