---
marp: true
paginate: true
theme: rose-pine
footer: EidP 2024 - Nils Pukropp - https://git.narl.io/nvrl/eidp-2024
style: ".columns {\r    display: grid;\r    grid-template-columns: repeat(2, minmax(0, 1fr));\r    gap: 1rem;\r  }"

---

# Tutorium 03 - 2024-10-31

Blatt 02, Workflow, Blatt 03

---

# Blatt 02

Welche Fehler wurden gemacht?

---

# Hochladen

- Probleme beim Hochladen
  - Binary statt Textdatei
  - Tutorial: [Beispiel Workflow mit Git](./GIT.md)

---

# keine korrekte Ausgabe

<div class="columns">

<div>

- Expectation:

```
p = -4.0
q = -5.0
x1 = 5.0
x2 = -1.0
```

</div>

<div>

- Reality:

```
Geben Sie nun einen Wert für p an:
> -4.0
Geben Sie nun einen Wert für q an:
> -5.0
Die Lösungsmenge ist L := {5.0, -1.0}
```

</div>
</div>

- Gebt bitte alles exakt wie vorgeschrieben in der Console aus!

---

# One-Liner in 2.4

```python
print((((((float(input())) * 2) + 3) ** 2) - (float(input()))) / 4)
```

Falsch, weil `input` zwei mal aufgerufen wird

---

# One-Liner in 2.4

```python
print((((((float(x := input())) * 2) + 3) ** 2) - (float(x))) / 4)
```

Das wäre korrekt, aber `:=` kam noch nicht in der Vorlesung vor

---

# One-Liner in 2.4

Durch umformen konnte man auch mit den bekannten mitteln eine einzige Zeile haben. Wurde aber nicht gefraget

```python
print((float(input()) + 11 / 8) ** 2 - 121 / 64 + 9 / 4)
```

---


# Blatt 02 - Vorrechnen

---

# Recap Vorlesung
Funktionen, Loops

---

# Funktionen

- Ihr habt schon die ganze Zeit mit Funktionen gearbeitet
  - `print(...)`
  - `int(...)`
  - ...
- Funktionen haben ihren eigenen *Scope*
- Funktionen sollten auch nur lokale Objekte verwenden

---

```python
def my_func(param1: type, param2: type) -> type:
  ...

if __name__ == '__main__':
  my_func(...)
```

---

```python
def add(a: int, b: int) -> int:
  return a + b

if __name__ == '__main__':
  print(add(1, 2)) # 3
```

---

# Was ist `if __name__ == '__main__'?

- Damit bestimmter Code auch nur ausgeführt wird wenn wir die Datei als Hauptdatei ausführen
- Beim importieren von anderen Python-Datein möchten wir nicht dass irgend etwas Ausgegeben wird/Eingaben erfragt werden

---

# Iteration - for

```python
for some_item in some_iterable:
  ...
```

- Wenn wir für jedes *Element* in einer *Menge* machen wollen

---

```python
def print_even_numbers(max: int):
  for num in range(0, max + 1):
    print(num)
```

---

# Iteration - while

```python
while condition:
  ...
```

- Wenn wir eine Bendingung haben die vor jedem Durchlauf gelten muss

---

```python
def find_next_prime(n: int) -> int:
  next_prime = n + 1
  while !is_prime(next_prime):
    next_prime += 1
  return next_prime
```

---

# Blatt 03