Seminarium 5 - En sak i taget
Kapitel som ska ha lästs
Denna sida visar en del av det som kommer att diskuteras på seminariet. Ofta tar handledarna också upp andra uppgifter som inte behöver något specifikt studentmaterial och då syns dessa uppgifter inte på sidan.
Uppgift: Paradigm
Besvara om följande påståenden är sanna eller falska
- Dynamisk typning är ett paradigm som Python stödjer.
- Pythonkod måste kompileras för att köras.
- Om man programmerar funktionellt kan man ej använda listor då de är objekt.
- Python stödjer objektorienterad programmering.
- I Python kan man ej programmera imperativt.
- Om man programmerar funktionellt får funktioner inte ha sidoeffekter.
- Om en funktionellt programmerad funktion tar emot en lista får denna inte ändras, dock kan kopior av listan ändras.
- Funktionen print() kan användas i funktionell programmering.
- Funktionen range() kan användas i funktionell programmering.
- Funktionell programmering är generellt snabbare än annan programmering.
- Inom funktionell programmering används ofta rekursion istället för for-loopar.
- När man programmerar funktionellt måste all kod vara strikt funktionell.
Uppgift: Högre ordningens funktioner, lambdauttryck och listbyggare
Vad printar följande kod?
print((lambda x: x + 2)(10)) #1
print((lambda x, y: x * y)(2 + 3, 4 * 5)) #2
print((lambda x: x + 1)((lambda y: y + 2)(3))) #3
seq = [[17, 4, 8], [9, 14, 2, 7], [33, 14]]
print([sorted(x)[1] for x in seq]) #4
seq = ['apelsin', 'banan', 'citron']
print([x.replace('a', '*') for x in seq if 'a' in x]) #5
a = [i + 2 for i in range(10) if i % 2 == 0]
b = list(map(lambda i: i + 2, filter(lambda i: i % 2 == 0, list(range(10)))))
print(a == b) #6
print(list(filter(lambda x: x % 3 == 0, list(range(0, 20, 2))))[2]) #7
print(''.join([chr(ord(c) - 1) for c in "Helloworld"])) #8
def pal_num(n):
s = str(n)
return s == s[::-1]
print([i for i in range(100, 130) if pal_num(i)]) #9
def fib_maker():
a, b = 0, 1
def next_fib():
nonlocal a, b
a, b = b, a + b
return b - a
return next_fib
fib = fib_maker()
print(list(filter(lambda x: x % 2 == 0, [fib() for i in range(7)]))) #10
Uppgift 1: Iterator och index
def func1(seq):
res = []
for elem in seq:
if elem % 2 == 0:
res.append(elem)
return res
def func2(seq):
res = []
for i in range(len(seq)):
if seq[i] % 2 == 0:
res.append(seq[i])
return res
def func3(seq):
res = []
i = 0
while i < len(seq):
if seq[i] % 2 == 0:
res.append(seq[i])
i += 1
return res
Givet är tre iterativa funktioner som returnerar samma sak men itererar på olika sätt.
- Vad gör funktionerna?
- Vad är skillnaden mellan funktionerna? Namnge de metoder funktionerna använder.
- Vilken funktion tycker du är lättast att läsa? Vilken borde användas för detta syfte?
- Vid vilka tillfällen ska de olika sätten att iterera användas?
Uppgift 2: Iterator och index
Givet ett beteende, vilken iterativ metod bör användas?
- Hitta den första förekomsten av ett element i en sekvens och lagra dess index i en variabel.
- Returnera antal förekomster av ett element i en sekvens.
- Returnera det minsta elementet i en lista.
- Så länge ändringar görs ska sekvensen itereras över upprepade gånger. Varje iteration jämför varje element med sin efterföljare. Om efterföljaren är lägre byter de två elementen plats.
Sidansvarig: Peter Dalenius
Senast uppdaterad: 2021-12-03