added tut04

This commit is contained in:
2024-11-07 02:27:31 +01:00
parent 2e8eab3a15
commit a400a48891
4 changed files with 1462 additions and 0 deletions

178
Tutorium/tut04/README.md Normal file
View File

@ -0,0 +1,178 @@
---
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 }"
---
![bg right height:70%](./img/uni-freiburg.svg)
# Tutorium 04 - 2024-11-07
Blatt 03, Iterieren von Sequenzen, Debugger, Blatt 04
---
# Blatt 03
---
# Recap Vorlesung
Was sind diese Listen?
---
# List
* Listen benutzen `[,]` als Syntax
* Listen können aus beliebigen Elementen bestehen
* Es können Elemente entfernt und hinzugefügt werden
```python
my_list_of_things: list[Any] = ["that's", "a", "list", 42]
my_numbers: list[int] = [42, 1337, 666]
```
---
# Tupel
* Tupel benutzen `(,)` als Syntax
* Tupel sind konstante Listen, einmal erstellt bleiben diese gleich
```python
coords: tuple[float, float]
= (48.01304356567289, 7.8340248371324135)
tutorium_location: tuple[str, str, tuple[float, float]]
= ("Georges-Köhler-Allee 51", "00-034", coords)
```
---
# Strings?
* Strings sind auch nur Listen von `Chars`
```python
s: list[str] = ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
print("".join(s))
>>> hello world
for char in "hello world":
print(char, end='')
>>> hello world
```
---
# Was iteriert man da eigentlich?
* `char` ist in Python von Typ `str`
* **Aber**, in vielen Sprachen wird der `String` als Liste von `Chars` abstrahiert
Zum Beispiel in Rust:
```rust
for ch: char in "hello world".chars() {
println("{}", ch)
}
```
---
# Loops
Wie iteriert man?
---
# Loops
* Es gibt zwei verschiedene Loops
* `while`
* `for`
* mehr braucht man eigentlich auch nicht
* andere Sprachen haben noch
* `do while`
* `loop`
---
# `for`
* wir iterieren meisten durch eine Menge
* *Für jedes **x** in der Menge **X***
```python
def is_prime(n: int) -> bool:
if n < 2:
return False
for i in range(2, n // 2 + 1):
if n % i == 0:
return False
return True
```
---
# `while`
* benötigt eine Bedingung
* meistens wird irgendetwas berechnet bis es eintritt
```python
def next_prime(n: int) -> int:
num = n + 1
while not is_prime(num)
num += 1
return num
```
---
# Teaser - Rekursion
* Was passiert wenn wir einfach `next_prime` nochmal in `next_prime` aufrufen?
* Häufiger Fehler am Anfang im Programmieren
```python
def next_prime(n: int) -> int:
num = n + 1
if is_prime(num):
return num
else:
return next_prime(num) # ??????
```
---
# Rekursion - was passiert?
* Ein Rekursionsbaum baut sich auf
* Wenn `num` keine Primzahl ist, dann rufen wir erneut `next_prime` auf
* Die erste `next_prime` und jede weitere, bei der `num` keine Primzahl ist, *warten* auf die jeweils nächste `next_prime`
```python
next_prime(50)
next_prime(next_prime(51))
next_prime(next_prime(next_prime(52)))
next_prime(next_prime(next_prime(next_prime(53)))) # 53 ist eine Primzahl
>>> 53
```
---
# Was ist ein Debugger?
---
# Was ist ein Debugger?
* Debugger lassen euch euren Quellcode während dieser läuft (at runtime) anschauen
* Ihr könnt den kompletten Zustand anschauen
* So könnt ihr schnell Bugs finden
---
# Blatt 04

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 206 KiB

BIN
Tutorium/tut04/slides.pdf Normal file

Binary file not shown.

View File

@ -0,0 +1,18 @@
def is_prime(n: int) -> bool:
if n < 2:
return False
for i in range(2, n // 2 + 1):
if n % i == 0:
return False
return True
def next_prime(n: int) -> int:
num = n + 1
while not is_prime(num):
num += 1
return num
if __name__ == '__main__':
print(next_prime(1024))