Pythonuppgifter 1
Innehåll
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.
Så 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å indexn
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
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
Uppgift 1.3.6 (20p)
Skriv en funktion remove_spaces(s)
som tar in en sträng och tar bort alla
avslutande mellanslag.
Exempel:
|
|
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:
|
|
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):
|
|
- 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
|
|
Exempel för Pythonuppgifter 2.3 om filen med dina lösningar är döpt till 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