Göm menyn

Seminarium 2 - Sammansatta datatyper (Experimentering)

Vi lägger grunden för laboration 3 genom att titta på sammansatta datatyper (listor, strängar, tupler, dictionaries) som vi bearbetar iterativt och rekursivt.

Här visas ett urval av uppgifter som kan förekomma under seminariet. Syftet är att du ska få chansen att förbereda dig på några övningar eller gå tillbaka och repetera övningar i efterhand. Seminarieledarna kommer oftast att lägga in ytterligare uppgifter. Titta gärna på materialet för andra inriktningar om du vill ha fler övningar.

Förberedelser

Följande kapitel i studiematerial förberedde för laboration 2 och kommer tas upp mer under det här seminariet:

Följande kapitel i studiematerialet förbereder för laboration 3 och det här seminariet:

Uppgifter

Uppgift: Iteration

En smart gräsklippare måste hålla koll på var den har klippt för att optimera sin väg över gräsmattan. Datan beskrivs som en tvådimensionell lista av booleska värden där true betyder klippt och false betyder oklippt. För en ny smart algoritm behöver den en lista på koordinaterna för alla oklippta platser istället för 2d-listan.

Skriv en funktion find_uncut som givet en lista på formatet

[
    [False, True, True, False, ...]
    .
    .
    .
    [True, False, True, True, ...]
]

Returnerar en lista av tuples av koordinater för alla oklippta rutor.

Körexempel:

>>> find_uncut( [
            [True,  False, True,  False],
            [False, False, True,  True],
            [True,  False, False, True],
            [False, True,  True,  True]
        ]
    ))

[(1, 0), (3, 0), (0, 1), (1, 1), (2, 1), (2, 2), (0, 3)]

Uppgift: Tuple och rekursion

def min_max(seq):
    if not seq:
        return (None, None)
    if len(seq) == 1:
        return (seq[0], seq[0])

    (l_min, l_max) = min_max(seq[1:])

    if seq[0] < l_min:
        l_min = seq[0]
    if seq[0] > l_max:
        l_max = seq[0]

    print("min: ", l_min, " max: ", l_max)

    return (l_min, l_max)
  1. Funktionen körs med [3, 1, 2] som indata. Vad skrivs ut av print-satsen? Vad returnerar funktionen?
  2. Går funktionen att köra med [1, 2, "abc"] som indata? Varför?
  3. Går funktionen att köra med (1, 2, 3) som indata? Varför?

Uppgift: Palindrom

Skriv en rekursiv och en iterativ funktion som tar en sträng och returnerar uruvida strängen är ett palindrom, alltså om strängen är densamma framlänges som baklänges.

Uppgift: Dictionaries

Vad gör följande funktion?

def dict_func(dict):
    result = {}

    for key in dict:
        if dict[key] in result:
            result[dict[key]].append(key)
        else:
            result[dict[key]] = [key]
    return result

Sidansvarig: Peter Dalenius
Senast uppdaterad: 2025-09-09