Göm menyn

Seminarie 2 - Experimentering

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: 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 huruvida strängen är ett palindrom. Det vill säga: om strängen är den samma 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: 2023-09-20