Göm meny
Gäller för: VT25

Pythonuppgifter 3.2 - Nästlade strukturer

Att lära dig från uppgifterna

  • Bearbetning av nästlade-strukturer

Godkänt

För att få godkänt krävs 100 poäng. Försök dock att lösa alla uppgifter då inte alla fel upptäcks av rättningsskriptet men om ni har lite marginal kan ni kanske bli godkända även om assistenten som rättar hittar något sådant fel.

Uppgifter

Uppgift 3.2.1 (10p)

Skriv funktionen sum_of_ints2(value_list) som tar in en lista med listor av värden som argument. Funktionen ska returnera summan av alla heltal som finns i de nästlade listorna.

Exempel: sum_of_ints2([["a", 1], [2, 3.0, "hej"]]) ska returnera 3.

Uppgift 3.2.2 (10p)

Skriv funktionen flatten_list1(list_of_lists) som får in en nästlad lista. De inre listorna innehåller inga listor. Funktionen ska returnera en icke-nästlad lista som innehåller alla värden i de inre listorna.

Om list_of_values är [[1, 2], [3], [1, 2, 3]] så ska funktionen returnera listan [1, 2, 3, 1, 2, 3].

Uppgift 3.2.3 (20p)

Skriv funktionen flatten_list2(list_of_lists) som får in en lista som både innehåller listor och vanliga värden. De inre listorna innehåller dock inga listor. Funktionen ska returnera en icke-nästlad lista som innehåller alla värden i de inre listorna, samt värdena som ligger direkt i listan.

Om list_of_values är [[1, 2], [3], 4, [1, 2, 3], 4, 5] så ska funktionen returnera listan [1, 2, 3, 4, 1, 2, 3, 4, 5].

Uppgift 3.2.4 (10p)

Skriv funktionen get_first_column(matrix) som tar in en nästlad lista som representerar en matris. Varje element i matrix är alltså en lista som representerar en rad i matrisen. Alla listor är lika långa. Se exemplet nedan.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# nedan är en nästlad lista som representerar en 3x3-matris
m1 = [[1, 2, 4],
      [3, 0, 6],
      [0, 5, 1]]

# nedan är en nästlad lista som representerar en 3x4-matris
m2 = [[1, 2, 4, 5],
      [3, 0, 6, 5],
      [0, 5, 1, 5]]

# nedan är en nästlad lista som representerar en 4x2-matris
m3 = [[1, 2],
      [3, 0],
      [0, 5],
      [4, 7]]

Funktionen get_first_column(matrix) ska returna en lista som innehåller värdena i den första kolumnen i matrisen som en lista. För m1 ska alltså listan [1, 3, 0] returneras. För m2 ska [1, 3, 0] returnaeras. För m3 ska [1, 3, 0, 4] returneras.

Tips: För att komma åt det första elementet i den första listan i m definierad ovan, skriver man m[0][0]. För att komma åt det tredje elementet i den andra listan skriver man m[1][2].

Uppgift 3.2.5 (20p)

Skriv funktionen get_nth_column(n, matrix) som tar in en nästlad lista som representerar en matris. Varje element i matrix är alltså en lista som representerar en rad i matrisen. Alla listor är lika långa.

Funktionen get_nth_column(n, matrix) ska returnera kolumnen n, där den första kolumnen har n == 1.

Uppgift 3.2.6 (20p)

Skriv funktionen get_all_columns(matrix) som tar in en nästlad lista som representerar en matris. Varje element i matrix är alltså en lista som representerar en rad i matrisen. Alla listor är lika långa.

Funktionen get_all_columns(matrix) ska returnera alla kolumner i matrisen matrix som en lista. Följande lista ska alltså returneras givet m1 som definierad i uppgift 3.2.4:

1
[[1, 3, 0], [2, 0, 5], [4, 6, 1]]

Uppgift 3.2.7 (20p)

Skriv funktionen scalar_product(vec1, vec2) som tar in två vektorer bestående av listor och returnerar skalärprodukten för listorna. Båda listorna är lika långa.

Skalärprodukten räknas ut enligt nedan:

$(1, 2, 4) \cdot (1, 3, 0) = 1 \times 1 + 2 \times 3 + 4 \times 0 = 7$

Exempel:

1
2
>>> scalar_product([1, 1, 1], [2, 2, 2])
6

Uppgift 3.2.8 (25p)

Skriv funktionen matrix_square(matrix) som ska returnera kvadraten av matrisen matrix. Varje element $a_{ij}$ i den nya matrisen fås av skalärprodukten av rad $i$ med kolumn $j$.

Om vi använder oss av samma matris om i exemplet i uppgift 3.2.4

1
2
3
4
# nedan är en nästlad lista som representerar en 3x3-matris
m = [[1, 2, 4],
     [3, 0, 6],
     [0, 5, 1]]

så är elementet på den första raden i den första kolumnen i den nya matrisen skalärprodukten av den första raden i m och den första kolumnen i m.

Elementet på första raden, andra kolumnen är $(1, 2, 4) \cdot (2, 0, 5) = 22$ och så vidare. Den nya matrisen som matrix_square(matrix) ska returnera givet m som input är alltså

1
2
3
[[7, 22, 20],
 [3, 36, 18],
 [15, 5, 31]]

Du får använda funktionerna du skrivit i tidigare uppgifter.

Använda rättningsskriptet

OBS! Rättningsskriptet kan bara användas från LiUs Linux-miljö, dvs när du antingen är inloggad via ThinLinc, har anslutit via VSCodes RemoteSSH, inloggad på en dator i en Linux-sal via RDP, eller inloggad på en faktisk Linux-dator i en Linux-sal på Campus.

Du kan bara köra rättningsskriptet för en specifik uppgift (t.ex. Pythonuppgifter 1.2) en gång var åttonde minut. Detta är för att ni även behöver lära er hur ni testar er egen kod; ni ska inte vara beroende av att det finns ett rättningskript som hjälper er.

För att rätta din fil skriver du nedanstående ($ skrivs inte utan representerar prompten i terminalen):

1
$ /courses/TDDE44/kursmaterial/pyuppg/pytest.sh <uppgift> <kodfil>
  • Ersätt <uppgift> med den uppgift koden löser, t.ex. 1_1 för att rätta Pythonuppgifter 1.1, 1_2 för Pythonuppgifter 1.2, 2_3 för Pythonuppgifter 2.3, osv.
  • Ersätt <kodfil> med namnet på filen som innehåller din kod.
  • OBS! Du måste stå i samma katalog som filen som du vill rätta.
  • OBS! Du får inte döpa din kodfil till ett namn med en punkt i filnamnet (dvs utöver punkten innan ändelsen py. pyuppg1.1.py fungerar alltså inte.

Exempel

Exempel för Pythonuppgifter 1.1 om filen med dina lösningar är döpt till pythonuppg1_1.py

1
$ /courses/TDDE44/kursmaterial/pyuppg/pytest.sh 1_1 pythonuppg1_1.py

Exempel för Pythonuppgifter 2.3 om filen med dina lösningar är döpt till pyuppg23.py

1
$ /courses/TDDE44/kursmaterial/pyuppg/pytest.sh 2_3 pyuppg23.py

Resultat från rättningsskriptet

Rättningsskriptet kommer berätta för dig vilka uppgifter som är godkända, vilka som inte är godkända och vilka som inte hittades. Rättningsskriptet berättar också hur många poäng du fått.

När du kör rättningsskriptet kommer du få en utskrift i terminalen som liknar den nedan.

OBS! Rättningsskriptet undersöker bara hur många och vilka uppgifter du löst och vilka du inte löst. Du kommer själv behöva felsöka eventuella fel genom att lägga till t.ex. spårutskrifter för att testa koden medan du skriver den.

Exempelutskrift från körning av rättningsskriptet

#### POÄNG (100 poäng behövs för GODKÄND UPPG) ####

UPPG 1.1: 5 poäng.
UPPG 1.2: 5 poäng.
UPPG 1.3: 5 poäng.
UPPG 1.4: 5 poäng.
UPPG 1.5: 10 poäng.
UPPG 1.7: 10 poäng.
UPPG 1.8: 10 poäng.
UPPG 1.9: 10 poäng.
UPPG 1.10b: 5 poäng.
UPPG 1.11: 15 poäng.
UPPG 1.12: 15 poäng.


#### SAKNADE UPPGIFTER ####

Kontrollera stavning på din funktioner. Stora och små
bokstäver spelar roll.

UPPG 1.10a saknar funktion: 'first_in_list'
UPPG 1.10c saknar funktion: 'last_in_list'


#### FEL vid TEST ####

Felsök genom att ha testanrop längst ner i din kodfil och
skriv ut resultaten. Kontrollera också så att du har mellanrum
på rätt ställe och att stora/små bokstäver stämmer överrens.

UPPG 1.6: Fel påträffades.

#### ANTAL POÄNG: 95
#### Du är INTE godkänd på Pythonuppgifter 1.
#### 5 poäng saknas.

Skicka in rättningskod

Om uppgiften är godkänd så hittar du även ett stycke med en rättningskod. Den innehåller bl.a.:

  • din kod
  • hur många poäng din kod fick

Kopiera rättningskoden (se exempel nedan) och klistra in den i en textfil; en fil för varje rättningskod. För Pythonuppgifter 1 kommer du lämna in 3 filer. Döp dem till pyuppg1_1.txt, pyuppg1_2.txt och pyuppg1_3.txt. Motsvarande gäller för Pythonuppgifter 2 och 3.

------------------------ KOPIERA FRÅN RADEN UNDER DENNA ------------------------
dXBwZzEvaW5mby50eHRVVAkAAz99zVc/fc1XdXgLAAEE9QEAAAQUAAAABcHLEcIgEADQO1VsA3FY
zVd1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAiIElSZnJPKxkAAAAcgAAABgAHABqb2RmbzAxLXB5
AjhLN2E/iophTDike9+T7dQCwWNePC0+AeaCoWBy89Bfgdcutnt01j4K/FR+qxQY1xzjgbdxud6+
AGpvZGZvMDEtcHl1cHBnMS9taW5pZmllZC5weVVUCQADP33NVz99zVd1eAsAAQT1AQAABBQAAACN
UEsDBAoAAAAAAIiBJUkAAAAAAAAAAAAAAAAQABwAam9kZm8wMS1weXVwcGcxL1VUCQADP33NVz99
kstugzAQRfd8hUU3pCGhRMomUlb9jLayDIzBjbEte4iavy/YPEJaqV0gM3fO3Bk/RGu0RWKZqnQb
VcCJBeysolxcIdmcojEm8SDEnjBWKFwAHyYhv/EAqyrqsJdrt7Jo4DPexo6p4NM5oNgAvTLrsSuT
HZyPM+/j5+OKZbZO2Gi+NJ+VuXZSVsVSKCgssMtqKssqkr+rYTmEwVxXoGUlJn6CPPXL4a4m6Lug
hxIjBdJCSJmwVncKU9W1BViqOTWgjYS78kBkj4Q3KrUqGYLqv/kMXZ66+/Yu37rQlgvrkArVb82N
47rHOd3by0eYEXrz6k86D7Rk/3De5ZO1hBJpeEY/6aDvy0aLEqa0L6xBgR32avQFWq2oYi0kxgIX
X+BS13H/E656EM/rVhPZ33xgH/KzQUQG5/Nvxxs8xl7LExr46Im89g8GoSLFjZhbK5TgAixJGkTj
TllWC2y6Yl/qNpOCo+Y8W7BN9A1QSwMEFAAAAAgAiIElSclUPoaqAAAAqAEAAB8AHABqb2RmbzAx
zZoKdEnH7GDmmeo9xVhT5JpzNVmFaOPAK6G5P1BLAwQUAAAACACIgSVJoN99PmsBAABgAwAAGwAc
LXB5dXBwZzEvcHl1cHBnMXRlc3QubG9nVVQJAAM/fc1XP33NV3V4CwABBPUBAAAEFAAAAOPiUgYC
hQD/wy1+7goahgYGCgX5h5fkpSskpWYc3lZWrJB2eFuRgru/izdQhYtCaECAu6YCSA8XF4itYKhn
aKVgCtWkBxMzwiJmjEXMBIuYqZWCoQG6oBk2QXNsghbYBC2xCRoaJGKx3tAgCatoMjZRoN8NMUWN
CgAAAAAAiIElSQAAAAAAAAAAAAAAABAAGAAAAAAAAAAQAO1BAAAAAGpvZGZvMDEtcHl1cHBnMS9V
VAUAAz99zVd1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACACIgSVJmck8rGQAAAByAAAAGAAYAAAA
AAAAUEsBAh4DFAAAAAgAiIElSaDffT5rAQAAYAMAABsAGAAAAAAAAQAAAKSBAAEAAGpvZGZvMDEt
AAABAAAApIFKAAAAam9kZm8wMS1weXVwcGcxL2luZm8udHh0VVQFAAM/fc1XdXgLAAEE9QEAAAQU
UEQhIezoF+LoAw1noLShKUTYpVTh8BKk8C04vFQhoLIkIz+vtKAgPTOtRMFQkUtBgQsAUEsBAh4D
JUnJVD6GqgAAAKgBAAAfABgAAAAAAAEAAACkgcACAABqb2RmbzAxLXB5dXBwZzEvcHl1cHBnMXRl
cHl1cHBnMS9taW5pZmllZC5weVVUBQADP33NV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAIiB
c3QubG9nVVQFAAM/fc1XdXgLAAEE9QEAAAQUAAAAUEsFBgAAAAAEAAQAegEAAMMDAAAAAA==
------------------------- KOPIERA T.O.M. RADEN OVANFÖR -------------------------

(OBS! Ovanstående rättningskod är ogiltig).


Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2023-01-15