Göm meny

Pythonuppgift 3.3

Skriv lösningarna till uppgifterna i en och samma fil och testa koden själv innan du använder rättningsskriptet. Att kunna testa sin kod är en viktig del av att programmera! För tips på hur du testar din kod, se sidan Testa kod.

Du kan bara köra automaträttning av en specifik pythonuppgift en gång var 8:de minut.

Information om hur du använder rättningsskriptet hittar du på sidan Rättningsskript. Information om inlämning hittar du på sidan Inlämningar.

Att lära dig från uppgifterna

  • Hur man skriver rekursiva funktioner.

OBS! Alla uppgifter ska lösas rekursivt! Du får alltså inte använda for- eller while-loopar.

Godkänt

För att få godkänt krävs 60 poäng.

Uppgift 3.3.1 (10p)

Skriv en funktion fac_rec(n) som tar in ett tal och beräknar $n!=n\times (n-1)\times (n-2) \times … \times 1$.

Uppgift 3.3.2 (10p)

Skriv en funktion fib(n) som returnerar fibonaccitalet för position n. Om du är obekant med fibonaccital kan du läsa mer om det på wikipedia.

Uppgift 3.3.3 (10p)

Skriv en funktion pascal(row, col) som returnerar talet på rad row och column col i pascals triangel. Du får inte använda den uttryckliga formeln för binomialkoefficienter för att lösa uppgiften.

Du kan läsa mer om pascals triangel på wikipedia.

Tips 1: Börja med att sätta upp villkor för vilka värden på row och col som funktionen ska returnera 1.

Tips 2: För alla värden i Pascals triangel som inte är högst upp, eller på en ytterkant gäller $pascal(row, col) = pascal(row-1, col-1) + pascal(row-1, col)$

Uppgift 3.3.4 (10p)

Skriv en funktion keep_if_even(lst) vars argument lst är en lista med heltal. Funktionen returnerar en ny lista med de heltal i lst som är jämna.

Exempel:

>> keep_if_even([1, 2, 3, 4, 5, 6])
[2, 4, 6]

Uppgift 3.3.5 (10p)

Skriv en funktion reverse_rec(lst) som tar en lista som inargument och returnerar en ny lista i omvänd ordning. Du ska inte undersöka listor-i-listor.

Exempel:

>> reverse_rec([1, 2, 3, 4, 5, 6])
[6, 5, 4, 3, 2, 1]

Exempel:

>>> reverse_rec([1, [2, 3], 4, [5, [6]]])
[[5, [6]], 4, [2, 3], 1]

Uppgift 3.3.6 (15p)

Skriv en funktion keep_if_even_all(lst) som gör som keep_if_even i uppgift 3.3.4, men den undersöker också listor-i-listor. Om en lista bara innehåller udda tal ska den tomma listan sparas.

Exempel:

>>> keep_if_even_all([1, 2, [1, 3], [4, 7], 6])
[2, [], [4], 6]

Exempel:

>> keep_if_even_all([1, 2, [3, 4], [5, [6, 7, [[8]]]]])
[2, [4], [[6, [[8]]]]]

Uppgift 3.3.7 (15p)

Skriv en funktion reverse_rec_all(lst) som gör som reverse_rec men den undersöker också listor-i-listor.

Exempel:

>> reverse_rec_all([1, [2, 3, 4], 5, 6])
[6, 5, [4, 3, 2], 1]

Exempel:

>>> reverse_rec_all([1, [2, 3], 4, [5, [6]]])
[[[6], 5], 4, [3, 2], 1]

Uppgift 3.3.8 (15p)

Skriv en funktion is_in_list(lst, element) som returnerar True om element finns i lst, annars returnerar funktionen False. Funktionen ska undersöka listor-i-listor.

Exempel:

>>> is_in_list(["a", "b", "b", "a"], "b")
True
>>> is_in_list(["a", "b", "b", "a"], "c")
False

Exempel:

>>> is_in_list([1, 2, 3, [4, 5, [6]]], 6)
True
>>> is_in_list([1, 2, 3, [4, 5, [6]]], 7)
False

Uppgift 3.3.9 (15p)

Skriv en funktion count_all(lst) som returnerar antalet element som finns i lst. Funktionen ska undersöka listor-i-listor.

Exempel:

>>> count_all(["a", "b", "b", "a"])
4

Exempel:

>>> count_all([1, 2, 3, [4, 5, [6]]])
6

Uppgift 3.3.10 (20p)

Skriv en funktion subst_all(lst, element, new_value) som returnerar en ny lista där alla förekomster av element har byts ut mot new_value. Funktionen ska undersöka listor-i-listor.

Exempel:

>>> subst_all(["a", "b", "b", "a"], "b", "l")
['a', 'l', 'l', 'a']

Exempel:

>>> subst_all([1, 2, 3, [4, 5, [6]]], 6, "x")
[1, 2, 3, [4, 5, ['x']]]

Uppgift 3.3.11 (15p)

Skriv funktionen multiply(factor1, factor2) som utför multiplikationen genom att addera factor1 till factor1, factor2 antal gånger med hjälp av rekursion.

Exempel:

>>> multiply(3, 7)
21
>>> multiply(7, 3)
21

Sidansvarig: johan.falkenjack@liu.se
Senast uppdaterad: 2023-09-22