Pythonuppgifter, kapitel 1. Introduktion
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!
Till första kapitlet finns ett kodskelett att ladda ner och använda som utgångspunkt för era lösningar. Ni hittar det i kurskatalogen på sökvägen /courses/TDDE44/kursmaterial/pyuppg/1_intro.py och kan kopiera det till katalogen ni står i med kommandot:
$ cp /courses/TDDE44/kursmaterial/pyuppg/1_intro.py .
(Kom ihåg att $ bara representerar prompten och inte ingår i kommandot.) Ni kan också ladda ner kodskelettet
här (högerklicka på länken och välj “Save link as…”).
Kodskelettet innehåller deklarationer av de funktioner ni ska implementera (raden som börjar med def), men utan faktiska funktionskroppar (det inskjutna kodblocket under def-raden). Istället finns bara ...
som ni ersätter med er egen kod. Varning: Tar ni bort ...
utan att lägga till egen kod kommer det att bli ett syntaxfel så ta bara bort punkterna när ni skriver er kod.
Det finns också ett testfall per funktion. Detta är normalt sett inte tillräckligt med testfall, men det är en start och räcker ofta i just det här kapitlet. Vad if __name__ == "__main__":
betyder kommer vi att återkomma till senare i kursen, men skriv era tester i dessa kodblock och skapa motsvarande kodblock för era tester för framtida kapitel.
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.
Man kan få max 145 poäng och 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. Om ni har lite marginal kan ni kanske bli godkända även om assistenten som rättar hittar något sådant fel.
Uppgift 1.1 (5p)
Skapa en funktion som heter return_five() som returnerar heltalet 5.
Testa den genom att skriva ut dess returvärde.
Lär dig vad en funktions returvärde är för något.
Uppgift 1.2 (5p)
Skapa en funktion som heter five_twice() som returnerar heltalet 10. Funktionen ska anropa return_five(), som du skrev i uppgift 1, två gånger och slå ihop resultaten med +.
Uppgift 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.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.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.6
1.6.1 (5p)
Skriv en funktion print_string(a_value) som tar ett värde och konverterar till en sträng. Skriv ut det konverterade värdet med hjälp av print-funktionen. Funktionen skall inte returnera något.
1.6.2 (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.7
1.7.1 (5p)
Skriv en funktion print_integer(a_value) som tar ett värde och konverterar till ett heltal (ej avrundning). Skriv ut det konverterade värdet med hjälp av print. Funktionen skall inte returnera något.
1.7.2 (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.8
1.8.1 (5p)
Skriv en funktion print_float(a_value) som tar ett värde och konverterar till ett flyttal. Skriv ut det konverterade värdet med hjälp av print. Funktionen skall inte returnera något.
1.8.2 (5p)
Skriv en funktion to_float(a_value) som tar ett värde och konverterar till ett flyttal. Returnera det konverterade värdet.
Reflektion
Vad var skillnaden mellan to_string, to_integer och to_float?
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.9 (5p)
Skriv en funktion add_string_numbers(string_a, string_b) som tar tar två strängar som enbart innehåller siffror, t.ex. "42" eller "17". Använd funktioner du implementerat i tidigare uppgifter för att konvertera strängarna till heltal, addera dem, och konvertera resultatet tillbaka till en sträng, och returnera den strängen.
Använd först print_string och print_integer. Fungerar det?
Använd nu to_string och to_integer. Fungerar det?
Varför fungerar den ena varianten men inte den andra?
Exempel
>>> add_string_numbers("8", "7")
"15"
När funktionen fungerar som den ska, prova att köra add_string_numbers(3.2, 4.7). Vad får du för resultat? Varför blir det så?
Uppgift 1.10 (5p)
Generalisera to_string, to_integer och to_float 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.11 (5p)
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.12 (10p)
Skriv en funktion roll_dice(sides) som simulerar ett slag av en tärning med sides sidor och returnerar resultatet. Antag att alla tärningar har sidor numrerade från och med 1 till och med sides.
För att simulera ett slumpmässigt tal, som från en tärning, måste vi använda en slumptalsgenerator.*
I Python finns det inbyggda (pseudo)slumptalsgeneratorer i en särskild modul med namnet random. Vi får tillgång till denna genom att skriva import random längst upp i vår fil. Sedan kan vi generera ett slumpmässigt heltal mellan 1 och 6 genom att skriva random.randint(1, 6). Vi återkommer till moduler längre fram i kursen.
Tips: Vad ska du skriva istället för 6 i anropet random.randint(1, 6) för att simulera ett slag med en tärning med sides sidor?
* Någon “riktig” slumpning kan vi inte åstadkomma på ett enkelt sätt med en vanlig dator. Vi kan dock använda en pseudoslumptalsgenerator som fungerar lika bra för alla utom de mest känsliga tillämpningarna. Så bra att vi sällan behöver fundera på skillnaden och kallar därför oftast även dessa helt enkelt för slumptalsgeneratorer.
Om du är intresserad av skillnaden mellan riktig slumpning och pseudoslumpning kan du läsa mer på Wikipedia. Det är dock helt okej att inte alls vara intresserad av detta just nu. Det är bara för att examinatorn, av ren slump (Förlåt!), råkar ha en bakgrund just inom statistisk simulering som han drar upp detta redan i första labben i en grundläggande programmeringskurs.
Uppgift 1.13 (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.14 (10p)
Skriv en funktion split_bill(total, 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 och skriver ut svaret.
Uppgift 1.15 (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.16 (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.17 (5p)
Skriv en funktion use_newline() som med ett enda anrop till print skriver ut följande i terminalen:
rad 1
rad 2
Hur skriver man ut en radbrytning? 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.18 (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.19 (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 rätt ska fahrenheit_to_celsius(celsius_to_fahrenheit(100)) alltså returnera 100.0 (Det går bra om den returnerar 100).
Uppgift 1.20 (10p)
Skriv en funktion pythagoras(x, y) som tar in längden på kateterna (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. Testa med några andra
Pytagoreiska tripplar för att försäkra er om att funktionen fungerar korrekt.
Använda rättningsskriptet
OBS! Rättningsskriptet kan bara användas från LiUs Linux-miljö, dvs. är inloggad på en Linux-dator i ett PUL på Campus, har anslutit via VSCodes RemoteSSH, är inloggad på en dator i ett PUL via RDP, eller är inloggad via ThinLinc.
Du kan bara köra rättningsskriptet för ett specifikt kapitel (t.ex. Pythonuppgifter, kapitel 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.
Innan du kör rättningsskriptet
Kommentera ut egna testanrop i din kodfil innan du kör rättningsskriptet. Rättningsskriptet kommer att köra din kodfil och om det finns testanrop i filen kan det störa rättningen. Du kan kommentera ut rader i Python genom att ställa dig på raden och trycka Ctrl+’ (tangenten ’ är oftast till höger om Ä på ett svenskt tangentbord) i VS Code. Du kan också markera flera rader och trycka samma tangentkombination för att kommentera ut alla markerade rader.
Köra rättningsskriptet
För att rätta din fil skriver du nedanstående ($ skrivs inte utan
representerar prompten i terminalen):
|
|
- Ersätt
<kapitel>med det kapitel vars uppgifter koden löser, t.ex.1för att rätta kapitel 1,2för kapitel 2, 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 utöver punkten innan ändelsen
py. Alltså,pyuppg1.pyfungerar,pyuppg_kap.1.pyfungerar inte.
Exempel
Exempel för Pythonuppgifter kapitel 2 om filen med dina lösningar är döpt till pythonuppg_2.py
|
|
Exempel för Pythonuppgifter kapitel 3 om filen med dina lösningar är döpt till pyuppg3.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 totalt på hela kapitlet.
När du kör rättningsskriptet kommer du få en utskrift i terminalen som liknar den nedan.
Rättningsskriptet ger ofta viss feedback om vad som är fel. Ni kommer dock ofta själva att behöva felsöka mer i detalj genom att t.ex. lägga till spårutskrifter för att testa koden medan du skriver den.
Exempelutskrift från körning av rättningsskriptet
OBS! Nedanstående utskrift är bara ett exempel på hur utskriften kan se ut. Den är inte kopplad till någon verklig inlämning.
#### 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. Detta är en komprimerad version av all data om din lösning och hur många poäng du fått.
Kopiera rättningskoden (se exempel nedan) och klistra in den i en
textfil; en fil för varje rättningskod. För laboration 1 kommer du lämna in 3 filer, en för varje kapitel som ingår i första labben. Döp filerna till pyuppg1.txt, pyuppg2.txt och pyuppg3.txt. Motsvarande gäller för labb 2 (kapitel 4-6) och 3 (kapitel 7-9).
------------------------ 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 och bara ett exempel på hur utskriften kommer att se ut).
Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2026-01-08
