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

Pythonuppgifter 1


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!

1.1 Funktioner och returvärden

Att lära dig från uppgifterna

  • Förstå vad funktioner är och hur de används.
  • Förstå vad ett returvärde är.
  • Känna till olika datatyper så som till exempel heltal, flyttal och strängar och veta hur man konverterar mellan dem.
  • Kunna använda python som en miniräknare.

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 1.1.1 (5p)

Skapa en funktion som heter return_five() som returnerar strängen "five".

Testa den genom att skriva ut dess returvärde.

Lär dig vad en funktions returvärde är för något.

Uppgift 1.1.2 (5p)

Skriv en funktion som heter print_five() som inte innehåller någon retur-sats, utan skriver ut strängen "five" i terminalen.

Funktioner som inte explicit returnerar ett värde kommer att returnera ett standardvärde. Vad är det värdet? Prova att ta reda på det genom att skriva ut det funktionen print_five() returnerar.

Uppgift 1.1.3 (5p)

Skriv en funktion add_strings() som använder operatorn + fast på strängar. Utför "hej" + "san" i funktionen och returnera resultatet.

Kan du slå ihop flera strängar än två? Spelar ordningen någon roll? Kan man ta en sträng minus en annan? Prova!

Uppgift 1.1.4 (5p)

Skriv en funktion use_the_var() som först tilldelar variabeln value värdet 5 och sedan returnerar value * 5. Funktionen ska inte ta in något argument, utan variabeltilldelningen görs i funktionen.

Spelar det någon roll vad du döper variabeln till? Prova!

Uppgift 1.1.5 (5p)

Skriv en funktion use_the_arg(a_string) som tar in en sträng och skriver ut den med print(a_string). Returnera även värdet som fås in i argumentet a_string.

Lär dig vad argumentet i en funktion är för något.

Uppgift 1.1.6 (5p)

Skriv en funktion to_string(a_value) som tar ett värde och konverterar till en sträng. Returnera det konverterade värdet.

Uppgift 1.1.7 (5p)

Skriv en funktion to_integer(a_value) som tar ett värde och konverterar till ett heltal (ej avrundning). Returnera det konverterade värdet.

Uppgift 1.1.8 (5p)

Skriv en funktion to_float(a_value) som tar ett värde och konverterar till ett flyttal. Returnera det konverterade värdet.

Vad var skillnaden mellan 1.1.6, 1.1.7 och 1.1.8?

Vad är det för skillnad mellan ett heltal och ett flyttal? Hur kan vi se skillnaden?

Varför får vi ett felmeddelande när vi skriver to_float("exempel")? Kolla på vad meddelandet säger.

Uppgift 1.1.9 (10p)

Överkurs

Generalisera det du skrev ovan genom att skriva en funktion to_any_type(a_value, a_type) som tar in ett värde och en typ och konverterar värdet till typen. Returnera det konverterade värdet.

Uppgift 1.1.10 (10p)

Skriv en funktion print_type(a_value) som tar in ett värde och skriver ut datatypen som a_value har. Inget ska returneras.

Tips: Använd den inbyggda funktionen type().

Uppgift 1.1.11 (5p)

Skriv en funktion subtract(value1, value2) som returnerar resultatet av value1 minus value2. När du testar funktionen, skicka bara in heltal och eller flyttal.

Lär dig om heltal och flyttal i Python.

Observera vad som händer när du har heltal - heltal, flyttal - flyttal, heltal - flyttal, flyttal - heltal. Vad blir det för datatyp på resultatet?

Uppgift 1.1.12 (10p)

Skriv en funktion split_bill(amount, number_of_people) som beräknar hur stor del av en gemensam nota som varje person ska betala om man delar notan jämnt. Funktionen tar två argument: beloppet som ska delas på samt antal personer som ska dela på beloppet.

Se till att funktionen både returnerar svaret, samt skriver ut svaret.

Uppgift 1.1.13 (10p)

Python har en modul med matematiska funktioner.

Skriv en funktion round_up(value) som avrundar ett flyttal uppåt till det närmaste heltal som är större än value. Returnera det avrundade talet.

Importera modulen math och använd funktionen math.ceil().

Uppgift 1.1.14 (10p)

Skriv en funktion round_down(value) som avrundar ett tal nedåt och returnerar det avrundade talet.

Googla på dokumentationen för modulen math och kolla om det finns en passande funktion.

Uppgift 1.1.15 (10p)

Skriv en funktion fahrenheit_to_celsius(temperature) som konverterar en temperatur (representerad som ett flyttal) från fahrenheit till celsius och returnerar värdet.

Uppgift 1.1.16 (5p)

Skriv en funktion celsius_to_fahrenheit(temperature) som konverterar en temperatur (representerad som ett flyttal) från celsius till fahrenheit och returnerar värdet.

Om du har gjort 1.1.15 och 1.1.16 rätt ska fahrenheit_to_celsius(celsius_to_fahrenheit(100)) alltså returnera 100.0 (Det går bra om den returnerar 100).

Uppgift 1.1.17 (10p)

Skriv en funktion pythagoras(x,y) som tar in längden på två sidor (sidorna som tillsammans bildar 90 grader mellan varandra) i en rätvinklig triangel och returnerar längden på hypotenusan med hjälp av pythagoras sats.

pythagoras(3,4) ska alltså returnera 5

1.2 Listor

Att lära dig från uppgifterna

  • Förstå vad en lista är och hur de används.
  • Förstå begreppet slicing
  • Förstå skillnaden mellan att skapa en ny lista och modifiera en existerande

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 1.2.1 (5p per deluppgift)

Listor är en datatyp i Python som hanterar ordnade sekvenser av värden. Man kan både läsa och ändra ett värde på en specifik plats i en lista med hjälp av platsens index.

  • a) Skriv en funktion second_in_list(values) som tar in en lista som argument och returnerar det andra elementet i listan.
  • b) Skriv en funktion last_in_list(values) som tar in en lista som argument och returnerar det sista elementet i listan.
  • c) Skriv en funktion second_last_in_list(values) som tar in en lista som argument och returnerar det näst sista elementet i listan.
  • d) Skriv en funktion n_in_list(values, n) som tar in en lista och ett tal som argument och returnerar elementet på index n i listan

Namngivning: Namnen på variabler är viktiga för läsbarheten hos källkod. Om du har en lista är det förmodligen för att du kommer använda flera värden. En bra regel att följa är därför att döpa variabler som refererar till listor till ett substantiv i plural, där substantivet är en bra beskrivning på innehållet i listan.

Uppgift 1.2.2 (10p per deluppgift)

Ofta är man inte intresserad av att plocka ut ett värde i en lista utan man vill plocka ut delar av listan. Använd slice notation för att lösa nedanstående uppgifter. Se Common Sequence Operations.

  • a) Skriv en funktion three_first_in_list(values) som tar in en lista som argument och returnerar de tre första elementen i listan.
  • b) Skriv en funktion three_last_in_list(values) som tar in en lista som argument och returnerar de tre sista elementeten i listan.
  • c) Skriv en funktion but_five_last_in_list(values) som tar in en lista som argument och returnerar allting förutom de 5 sista elementen i listan.
  • d) Skriv en funktion every_other_in_list(values) som tar in en lista som argument och returnerar vartannat element i listan (det vill säga elementen på index 0, 2, 4, 6, …).
  • e) Skriv en funktion two_around_n_in_list(values, n) som tar in en lista och ett heltal som argument och returnerar en lista som innehåller de två elementen före n, följt av elementet på index n och sist de två elementen efter index ´n´. Exempel: ´two_around_n_in_list([6, 7, 8, 9, 10, 11, 12], 3)´ ska alltså returnera ´[7, 8, 9, 10, 11]´

Uppgift 1.2.3 (10p)

Skriv en funktion new_list_with_n(values, n) som tar in en lista och ett element och returnerar en ny lista som innehåller samma element som values men där n ligger sist.

Den ursprunliga listan får inte modifieras. Det vill säga, använd inte metoden .append().

Exempel

1
2
3
4
5
>>> l = [1, 2, 3]
>>> new_list_with_n(l, "hej")
[1, 2, 3, 'hej']
>>> print(l)
[1, 2, 3]

Tips: Använd operatorn +.

Uppgift 1.2.4 (10p)

Skriv en funktion append_n_to_list(values, a_value) som tar in en lista och ett element och ändrar listan values så att a_value ligger sist. Returnera även den ändrade listan.

Exempel

1
2
3
4
5
6
7
>>> lst1 = [1, 2, 3, 4, 5, 6]
>>> print(lst1)
[1, 2, 3, 4, 5, 6]
>>> append_n_to_list(lst1,7)
[1, 2, 3, 4, 5, 6, 7]
>>> print(lst1)
[1, 2, 3, 4, 5, 6, 7]

Tips: Använd list-metoden .append(). list.append()

Uppgift 1.2.5 (5p)

Skriv en funktion insert_4_on_pos_3(values) som tar in en lista och skjuter in heltalet 4 på index 3 i ursprungslistan. Elementen från och med index 3 ska bli förskjutna med ett steg. Returnera den modifierade listan.

Exempel:

1
2
3
4
5
6
7
>>> lst1 = [1, 2, 3, 5, 6]
>>> print(lst1)
[1, 2, 3, 5, 6]
>>> insert_4_on_pos_3(lst1)
[1, 2, 3, 4, 5, 6]
>>> print(lst1)
[1, 2, 3, 4, 5, 6]

Tips: Använd list-metoden .insert(). list.insert()

Uppgift 1.2.6 (5p)

Skriv en funktion extend_vals_to_list(values1, values2) som tar in två listor och lägger elementen i values2 sist i values1. Returnera den ändrade listan.

Exempel

1
2
3
4
5
6
>>> lst1 = [1, 2, 3]
>>> lst2 = [4, 5, 6]
>>> extend_vals_to_list(lst1, lst2)
[1, 2, 3, 4, 5, 6]
>>> print(lst1)
[1, 2, 3, 4, 5, 6]

Tips: Använd list-metoden .extend(). list.insert()

Uppgift 1.2.7 (5p)

Skriv en funktion remove_from_third_in_list(values) som tar bort alla element från och med element 3 i values och returnerar den modifierade listan.

Tips: https://docs.python.org/3/tutorial/datastructures.html#the-del-statement

Exempel:

1
2
3
4
5
6
7
>>> lst1 = [1, 2, 3, 5, 6, 7]
>>> print(lst1)
[1, 2, 3, 5, 6]
>>> remove_from_third_in_list(lst1)
[1, 2]
>>> print(lst1)
[1, 2]

Uppgift 1.2.8 (5p)

Skriv en funktion concatenate_lists(values1, values2) som tar två listor och returnerar en ny lista som är en samanslagning av values1 och values2. Det vill säga först alla element i lista 1 följt av alla element i lista 2. Du får inte modifiera values1 eller values2.

Exempel:

1
2
3
4
5
6
7
8
>>> lst1 = [1, 2, 3]
>>> lst2 = [4, 5, 6]
>>> concatenate_lists(lst1, lst2)
[1, 2, 3, 4, 5, 6]
>>> print(lst1)
[1, 2, 3]
>>> print(lst2)
[4, 5, 6]

Uppgift 1.2.9 (15p)

Python har en modul som innehåller färdiga funktioner som man kan använda när man vill ha med slumpen på något sätt i sin kod.

Importera modulen random. Skriv funktionen select_random(values) som väljer ut ett slumpmässigt värde bland de som finns i listan values och returnera det. Använd funktionen random.choice().

1.3 Strängar

Att lära dig från uppgifterna

  • Förstå skillnaden och likheterna mellan strängar och listor
  • Kunna lösa enklare problem med strängar och listor

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 1.3.1 (20p)

Skriv en funktion concatenate_strings(string1, string2) som tar två strängar som argument och sedan returnerar strängarna som ett sammansatt ord.

Uppgift 1.3.2 (20p)

Skriv en funktion use_the_linebreak() som med en enda print-sats skriver ut följande i terminalen

rad 1
rad 2

Hur skriver man ut ett radbryt? Returnera också den sträng som du skrev ut.

OBS! För att rättningsskriptet ska acceptera ditt svar är det viktigt att du varken har för många eller få mellanslag i din sträng. Jmf med att skriva ditt lösenord vid inloggning!

Uppgift 1.3.3 (20p)

I denna uppgift ska du skriva en funktion som returnerar slumpmässigt valda pokemon-namn. Vi ska skicka in två listor till den

  • en lista med förled som “Bulba”, “Pika” och “Ivy”, dvs strängar som börjar med en stor bokstav och slutar med en vokal.
  • en lista med efterled som “mon”, “chu”, och “saur”, dvs strängar som börjar med liten konsonant.

Skriv funktionen generate_pokemon_name(prefixes, suffixes) som tar in dessa två listor som argument. Slumpa fram ett värde från vardera lista. Slå sedan ihop dessa två värden och returnera resultatet.

Uppgift 1.3.4 (20p)

Skriv en funktion first_word(s) som tar in en sträng och returnerar det första ordet i strängen.

Exempel: first_word("hej på dig") ska returnera "hej"

Uppgift 1.3.5 (20p)

Skriv en funktion join_list(values) som tar in en lista där elementen är strängar och som returnerar en sträng med : mellan varje element.

Exempel:

1
2
>>> join_list(["Detta", "är", "ett", "exempel"])
'Detta:är:ett:exempel'

Uppgift 1.3.6 (20p)

Skriv en funktion remove_spaces(s) som tar in en sträng och tar bort alla avslutande mellanslag.

Exempel:

1
2
3
4
>>> remove_spaces("Ett annat exempel       ")
'Ett annat exempel'
>>> remove_spaces("   mellanslag i början ska vara kvar.     ")
'   mellanslag i början ska vara kvar.'

Uppgift 1.3.7 (20p)

Precis som för listor kan strängar indexeras på position. Alltså "01234"[3] returnerar "3". Slicing fungerar också på listor.

Skriv en funktion get_characters(s, pos, num_of_chars) som returnerar en sträng som innehåller num_of_chars bokstäver från och med index pos ur strängen s.

Exempel:

1
2
>>> get_characters("Ett ytterligare exempel", 4, 11)
'ytterligare'

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_1 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: 2025-01-19