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

Pythonuppgifter 2


För att underlätta för dig när du gör pythonuppgifterna finns det ett rättningsskript (instruktioner står efter uppgifterna) som du kan köra till varje uppgift. Rättningsskriptet testar koden du skrivit och berättar för dig vilka uppgifter du gjort fel på och räknar ut din poäng. Du får också reda på vilka uppgifter som saknas.

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 nödvändig del av att programmera!

2.1 Villkor

Att lära dig från uppgifterna

  • syntax och användning av if, elif, else
  • jämförelser med !=, ==, <, >, <=, och >=
  • logiska operatorer för att kombinera jämförelser

Godkänt

För att få godkänt krävs 35 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 2.1.1 (5p)

Skriv funktionen greeting(name) som tar emot en sträng med ett namn som värde. Funktionen returnerar sedan hälsningsfrasen "Hej " + name + "!" förrutom när namnet som skickats in börjar på (stora) bokstaven M. I dessa fall returneras "Hej " + name + ", visste du att M är min favoritbokstav!"

Anropet greeting("Pontus") ska alltså returnera strängen "Hej Pontus!" medan anropet greeting("Morgan") ska returnera strängen "Hej Morgan, visste du att M är min favoritbokstav!".

Uppgift 2.1.2 (5p)

Skriv funktionen is_this_a_long_list(values) som får en lista (values) som argument och returnerar True eller False beroende på hur lång listan är. Listor längre än 5 element anses vara långa.

Tips: Använd funktionen len() för att ta reda på längden på en lista (eller sträng för den delen)

Uppgift 2.1.3 (5p)

Skriv funktionen get_grade(score) som tar in en siffra (argumentet score) som antingen ett heltal eller ett flyttal) och returnerar en sträng med betyget som man får när man har score poäng. Betygsgränserna är följande:

  • Betyget "G" returneras om poängen är 50 eller högre.
  • Är poängen högre än 80 returneras betyget "VG".
  • Vid mindre än 50 poäng returneras "U".

Uppgift 2.1.4 (5p)

Skriv funktionen days_in_month(name_of_month) som tar in namnet på en månad (som sträng) och returnerar antalet dagar i den månaden (antag att det inte är skottår). Följande stavningar på månader ska användas: "januari", "februari", "mars", "april", "maj", "juni", "juli", "augusti", "september", "oktober", "november", "december".

Uppgift 2.1.5 (5p)

Skriv funktionen odd(value) som tar in ett heltal och returnerar True om heltalet value är udda, och returnerar False om heltalet value är jämt.

Tips!

Operatorn modulo som i Python skrivs som % ger resten vid division. Om man ska dela heltalet 6 med heltalet 5, så får 5 plats 1 gång och man får en rest på 1. Dvs man delar 6 % 5 ger 1 eftersom 6 = 5 * 1 + 1. 6 % 3 ger oss en rest på 0 eftersom 6 = 3 * 2 + 0.

Resten 0 innebär allstå att att täljaren är jämt delbar med nämnaren. Eftersom alla tal som är jämt delbara med 2 är jämna, kan man använda modulo-operatorn för att ta reda på om ett tal är jämt eller udda. Om resten är 0 är talet jämt!

Uppgift 2.1.6 (10p)

Skriv funktion get_integer_description(value) som tar in ett heltal och returnerar ett annat heltal beroende egenskaperna hos value.

  • om value är positivt och jämt returneras 2
  • om value är positivt och udda returneras 1
  • om value är 0 returneras 0
  • om value är negativt och udda returneras -1
  • om value är negativt och jämt returneras -2

Tips: Använd logiska operatorer för att kombinera fler än en jämförelse

Uppgift 2.1.7 (10p)

Skriv funktionen appraisal_factor(rare, good_condition) som returnerar ett flyttal. Båda argumenten rare och good_condition är sanningsvärden (dvs antingen True eller False).

Funktionen är tänkt att användas för att justera priset på antikviteter. Om ett föremål är sällsynt (om argumentet rare är True) läggs en bonus på 25% till priset. Om föremålet inte är sällsynt (om argumentet rare är False) dras 25% bort från priset.

Förrutom sällsyntheten behöver man även ta hänsyn till hur gott skick som föremålet är i. Är föremålet i gott skick (om argumentet good_condition är True) lägger man till 50% till priset. Är det i dåligt skick (om argumentet good_condition är False) drar man bort 50% från priset.

Funktionen appraisal_factor(rare, good_condition) ska returnera den faktor som orginalpriset ska multipliceras med för att kompensera för sällsynthet och skick.

Exempel: Ett sällsynt föremål i gott skick ska alltså ha en faktor på 1.75 (1 + 0.25 + 0.50). Ett sällsynt föremål som inte är i gott skick ska ha en faktor på 0.75 (1 + 0.25 - 0.50)

2.2 Loopar

Att lära dig från uppgifterna

  • syntax och användning av while-loopen
  • syntax och användning av for-loopen

Godkänt

För att få godkänt krävs 70 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 2.2.1 (5p per deluppgift)

Skriv två funktioner vars uppgifter är att returnera en lista som innehåller heltalen 0-10 i ordning, dvs listan [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10].

  • a) Funktionen create_ten_list_while() ska lösas med en while-loop.
  • b) Funktionen create_ten_list_for() ska lösas med en for-loop.

Tips 1

Skapa en tom lista med t.ex. new_list = [] som du sedan lägger till värden till.

Tips 2

Hur använder man range för att få ut de värden man vill ha.

Tips 3

Lägg till innehåll till en lista antingen med metoden .append() eller genom att använda operatorn +.

1
2
3
4
5
6
7
8
9
new_list1 = []
new_list2 = []
ord = "då"

new_list1.append("hej")
new_list1.append(ord)

new_list2 = new_list2 + ["hej"]
new_list2 = new_list2 + [ord]

Ovanstående kod kommer att resultera i att både new_list1 och new_list2 innehåller ["hej", "då"]. Exemplet visar också hur det ser ut när man lägger till ett hårdkodat värde till en lista och hur det ser ut när man lägger till ett värde från en variabel till en lista.

Uppgift 2.2.2 (5p per deluppgift)

Skriv funktionerna create_zero_to_number_list_while(number) och create_zero_to_number_list_for(number). Funktionerna ska ta in ett heltal som argument (number) och returnera en lista som innehåller siffrorna från 0 till number.

  • a) Funktionen create_zero_to_number_list_while(number) ska lösas en while-loop.
  • b) Funktionen create_zero_to_number_list_for(number) ska lösas med en for-loop.

Anropet create_zero_to_number_list_while(3) ska alltså returnera listan [0, 1, 2, 3].

Uppgift 2.2.3 (5p per deluppgift)

Skriv funktionerna create_number_to_number_list_while(start_number, end_number) och create_number_to_number_list_for(start_number, end_number). Funktionerna ska skapa och returnera en lista som innehåller siffror från start_number till och med end_number. Både start_number och end_number är heltal. start_number kommer också alltid att vara mindre än eller lika med end_number.

  • a) Funktionen create_number_to_number_list_while(number) ska lösas med en while-loop.
  • b) Funktionen create_number_to_number_list_for(number) ska lösas med en for-loop.

Anropet create_number_to_number_list_***(5, 9) ska alltså returnera listan [5, 6, 7, 8, 9]

Uppgift 2.2.4 (5p per deluppgift)

Skriv funktionerna get_max_while(integer_list) och get_max_for(integer_list). Funktionerna returnera det högsta heltalet i listan integer_list som är en lista av heltal. Funktionen ska inte använda den inbyggda funktionen max() utan en loop som itererar över argumentet integer_list.

  • a) Funktionen get_max_while(integer_list) ska lösas med en while-loop.
  • b) Funktionen get_max_for(integer_list) ska lösas med en for-loop.

Anropet get_max([9, 3, 6, 3, 100, 2, 30]) ska alltså returnera 100.

Tips 1 Hur fungerade len() och hur kan man använda det för att loopa “rätt” antal gånger?

Tips 2 Finns det något annat sätt att skriva for-loopen för att slippa använda index och listan för varje element?

Uppgift 2.2.5 (5p)

Skriv funktionen get_min(integer_list) som ska returnera det lägsta heltalet i listan integer_list som är en lista av heltal. Funktionen ska inte använda den inbyggda funktionen min() utan en loop som itererar över argumentet integer_list.

Anropet get_min([9, 3, 6, 3, 100, 2, 30] ska alltså returnera 2.

Uppgift 2.2.6 (5p per deluppgift)

Skriv funktionerna word_in_list_while(words, word) och word_in_list_for(words, word). Båda funktionerna får in en lista av strängar (argumentet words) samt en enskild sträng (argumentet word). Funktionenrna ska returnera True om strängen word finns i listan words. False ska returneras om word inte finns i listan words.

Använd inte den inbyggda operatorn in.

  • a) Funktionen word_in_list_while(words, word) ska lösas med en while-loop.
  • b) Funktionen word_in_list_for(words, word) ska lösas med en for-loop.

Om man inte vill att loopen ska fortsätta när man väl hittat att ordet finns kan man använda nyckelordet break för att avbryta. Det går även bra att returnera i loopen.

OBS! Förekomsten av in i for-loopskonstruktionen är inte den inbyggda operatorn in utan hänger ihop med nyckelordet for. Operatorn in används för att kontrollera om ett värde finns i t.ex. en sekvens: 'a' in 'hejsan' returnerar True.

Uppgift 2.2.7 (5p per deluppgift)

Skriv funktionerna count_integers_while(value_list) och count_integers_for(value_list). Båda funktionerna ska returnera antalet heltal i argumentet value_list.

  • a) Funktionen count_integers_while(value_list) ska lösas med en while-loop.
  • b) Funktionen count_integers_for(value_list) ska lösas med en for-loop.

Använd funktionen type() som returnerar vilken datatypen hos ett värde. Till exempel type(4) returnerar int, så jämförelsen type(4) == int kommer att vara True (OBS! int inte är omgiven av några citat-tecken).

Tips

Hur sparar du antalet heltal och vad händer när du hittar en?

Uppgift 2.2.8 (5p per deluppgift)

Skriv funktionerna average_while(values) och average_for(values). Funktionerna ska returnera genomsnittet av alla värden i argumentet values som kommer vara en lista av flyttal. Anropet average([10.0, 20.0, 6.3]) bör alltså returnera 12.1. Funktionen ska summera ihop värdena med en loop och sedan dela summan med antalet värden i listan values.

Den inbyggda funktionen sum() ska inte användas.

  • a) Funktionen average_while(values) använder en while-loop.
  • b) Funktionen average_for(values) använder en for-loop.

Uppgift 2.2.9 (10p)

Befolkningsproblemet: Befolkningen i två länder antas växa exponentiellt; i början på varje år ökar befolkningen i länderna med en viss procent av den nuvarande befolkningen.

Skriv funktionen population(pop_a, rate_a, pop_b, rate_b) som får in folkmängden för två länder A (pop_a) och B (pop_b) samt folkökningen i procent (3.3 betyder 3,3%) för dessa (rate_a resp. rate_b). Folkmängden i land A ska från början vara lägre än folkmängden i land B.

Funktionen ska returnera antalet hela år det tar innan folkmängden i land A är större än folkmängden i land B. Gör detta genom att i funktionen skriva en loop som för varje iteration räknar ut folkmängd för början på nästa år för vardera land. Låt loopen fortsätta tills folkmängden i land A är större än folkmängden i land B.

Förutsättningen att kunna hitta ett svar är att land A har en högre tillväxtprocent än land B. Kontrollera detta i början av funktionen. Om det kravet ej är uppfyllt ska funktionen returnera -1.

Extra uppgift (ingår ej bland rättade uppgifter): Skriv en variant av funktionen population() där folkmängden i land A inte behöver vara lägre än folkmängden i land B från början. Funktionen ska returnera antalet hela år det tar innan landet med den från början lägre folkmängden har en har fler människor än det andra landet. Skulle detta vara omöjligt ska -1 returneras.

Uppgift 2.2.10 (10p)

Födelsedagsproblemet: Skriv funktionen birthday(n), som beräknar sannolikheten p(n), med hjälp av en loop, för att bland n personer åtminstone två har samma födelsedag. Vi bortser från skottår.

Tips: Formeln för sannolikheten är $p(n)=1 - 365/365 \cdot 364/365 \cdot 363/365 \ldots (366-n)/365$. Hur kan man upprepa detta för ett givet $n$?

Uppgift 2.2.11 (5p)

Skriv funktionen sum_of_ints(value_list) som tar in en lista med värden som argument. Funktionen ska returnera summan av alla heltal som finns i listan.

2.3 List- och stränghantering

Att lära dig från uppgifterna

  • slå upp och ändra värde i lista med hjälp av index
  • bearbeta listor och strängar med hjälp av loopar

Godkänt

För att få godkänt krävs 85 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 2.3.1 (5p)

Skriv en funktion replace_periods_with_newlines(string_value) som använder en loop för att gå igenom en sträng och byta ut alla .-tecken (punkter) mot radbrytningar. Resulterande sträng returneras av funktionen.

Använd ej den inbyggda funktionen str.replace(), utan använd en loop som stegar igenom strängen.

Tips!

I Python kan man inte byta ut enskilda tecken i en sträng. Hur kan du då få en nästintill identisk sträng med hjälp av en loop?

När du stöter på en punkt, spara undan radbryttecknet \n istället.

Tips 2

Minns hur man kan hantera sekvenser i uppgift 2.2.1.

Anropet replace_periods_with_newlines("hej.hur mår du.jag mår bra!") ska alltså returnera strängen "hej\nhur mår du\njag mår bra!". Observera att om du skriver ut strängen så kommer alla förekomster av "\n" att skrivas ut som faktiska radbryt.

Uppgift 2.3.2 (10p)

Skriv funktionen replace_char_in_string(original_string, search_character, replacement) som ska gå igenom strängen original_string och byta ut alla förekomster av tecknet search_character mot tecknet replacement. Använd en loop för att göra detta, inte str.replace().

Anropet replace_char_in_string("bob", "b", "l") ska alltså returnera strängen "lol".

Tips Börja med en tom sträng och lägg tecken för tecken från original_string till den tomma strängen, förrutom när search_character påträffas, lägg då istället till replacement.

Uppgift 2.3.3 (20p)

Skriv en funktion reverse_string***(string_value) som tar en sträng och returnerar den sträng med tecknen i omvänd ordning som i string_value. Funktionen ska använda en loop för att skapa baklängessträngen som returneras.

  • a) Funktionen reverse_string_while(string_value) använder en while-loop.
  • b) Funktionen reverse_string_for(string_value) använder en for-loop.

Anropet reverse_string("python är kul") ska alltså returnera strängen "luk rä nohtyp".

Tips Var ska man börja för att enkelt kunna skapa den nya strängen? Hur gör man detta för respektive loop?

Uppgift 2.3.4 (5p)

Skriv funktionen get_five_first(value_list) som tar in en lista som alltid kommer vara längre än 5 element. Funktionen ska returnera en lista som bara innehåller de fem första elementen i value_list. Använd en loop och inte “slice”-notationen som introducerades i Laboration 1.

Anropet get_five_first([5, "hej", "hopp", "who", "are", "you"]) ska alltså returnera listan [5, "hej", "hopp", "who", "are"].

Uppgift 2.3.5 (10p)

Skriv funktionen get_nfirst(value_list, n) som tar in en lista, value_list som alltid är längre än heltalsargumentet n. Funktionen ska returnera en lista som innehåller de n första elementen i listan value_list. Du får återigen inte använda “slice” för att lösa uppgiften.

Anropet get_nfirst([5, "hej", "hopp", "who", "are", "you"], 3) ska alltså returnera listan [5, "hej", "hopp"].

Uppgift 2.3.6 (10p)

Skriv funktionen get_all_less_than(values, cutoff) som returnerar en lista med alla värden från listargumentet values som är mindre än cutoff. Alla värden i values och värdet i cutoff är flyttal.

Anropet get_all_less_than([4.5, 0.1, 40.3, 20.0], 3.1) ska alltså returnera listan [0.1].

Uppgift 2.3.7 (5p)

Skriv funktionen get_all_even(values) som returnerar en lista med alla jämna värden från listargumentet values.

Anropet get_all_even([4, 0, 3, 2]) ska alltså returnera listan [4, 0, 2].

Uppgift 2.3.8 (5p)

Skriv funktionen get_all_divisible(values, divisor) som returnerar en lista med alla värden från listargumentet values som är delbara med divisor.

Anropet get_all_divisible([4, 10, 7, 8], 4) ska alltså returnera listan [4, 8].

Uppgift 2.3.9 (5p)

Skriv funktionen multiply_for_each(values, multiplier) som ändrar och returnerar values med alla värden multiplicerade med multiplier.

OBS! I denna uppgift är det viktigt att du ändrar på listan values och inte skapar en ny lista som du lägger värdena i.

Anropet multiply_for_each([3, 7.1, 3, 1.0], 3) ska alltså ändra på listan som den får in och returnera den, dvs [9, 21.3, 9, 3.0].

Uppgift 2.3.10 (15p)

Skriv funktionen insert_at_asc_place(values, new_value) som returnerar en lista med new_value insatt i values så att listan fortfarande är ordnad i storleksordning. Listan values kommer alltid in sorterad. list.sort() ska ej användas.

Anropet insert_at_asc_place([3, 7, 8, 11], 7.9) ska alltså returnera listan [3, 7, 7.9, 8, 11].

Kuriosa Om man vill använda en mer effektiv algoritm kan man använda en så kallad binärsökning. Då undersöker man värdet i mitten av listan och kan plocka bort halva listan för varje sökning.

Uppgift 2.3.11 (10p)

Skriv funktionen sort_asc(values) som returnerar en sorterad version av listan values. Du får inte använda någon redan existerande sorteringsalgoritm.

Anropet sort_asc([3, 9, 7, 1, 11]) ska alltså returnera listan [1, 3, 7, 9, 11].

Tips Du får dock använda din egenskrivna funktion insert_at_asc_place

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).

Inlämning

Alla tre delar lämnas in samtidigt och med Pythonuppgift_2 som “Current lab” i Sendlab.

Inlämningar för Pythonuppgifter 1-3 behöver inte redovisas innan inlämning.

  • Bifoga en textfil med rättningskoden för varje deluppgift. T.ex. för Pythonuppgifter 1 laddar ni upp 3 textfiler, en med rättningskoden för 1.1, en för 1.2 och en för 1.3.
  • Hur du använder rättningsskripten står längst ner på varje sida med uppgifter.
  • Inlämning av Pythonuppgifter:

Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2024-02-01