Göm meny

Uppgifter i Python 1


Till varje uppgift kommer du behöva skriva minst en funktion. Skriv koden till alla funktioner i en och samma fil. De olika uppgifterna är värda olika antal poäng. För att inlämningen ska vara godkänd, måste du ha samlat ihop 100 poäng.

Du kan hitta tips kring olika moment kopplade till programmering i Python på sidan Tips till Pythonuppgifterna

Rättningsskriptet

För att underlätta för dig när du gör pythonuppgifterna finns det ett rättningsskript 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.

Rättningsskriptet ligger i ~729G74/kursmaterial/python/python1 för Tema 1, ~729G74/kursmaterial/python2 för Tema 2, och i ~729G74/kursmaterial/python/python3 för Tema 3

Du behöver inte kopiera filerna som ligger där utan anropar t.ex. pytest1.sh (för Pythonuppgift 1) som testar Pythonuppgift 1 enligt nedan när du står i samma katalog som din uppgiftskod.

För tema 1:

$ ~729G74/kursmaterial/python/python1/pytest1.sh pythonuppg.py

För tema 2:

$ ~729G74/kursmaterial/python/python2/pytest2.sh pythonuppg.py

För tema 1:

$ ~729G74/kursmaterial/python/python3/pytest3.sh pythonuppg.py

I anropet ersätter du såklart pythonuppg.py med namnet på din egen fil.

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 testa lägga till t.ex. spårutskrifter för att testa koden medan du skriver den.

#### 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å Pythonuppgift 1.
#### 5 poäng saknas.

Skicka in kod

Om uppgiften är godkänd så hittar du även ett stycke med en specialkod. Denna kod innehåller information om din uppgift, hur många poäng din kod fick. Kopiera och klistra in koden i ett epost till 729g74@ida.liu.se för att lämna in dina uppgifter. Se instruktioner på inlämningssidan för information om ämnesrad och e-postadress som den ska skickas till.

Så här kan koden se ut som du ska skicka in. Kopiera allt mellan de streckade raderna, inklusive de streckade raderna och skicka in det till din handledare (OBS! Nedanstående kod är ogiltig).

-------------------------------- TEXT START --------------------------------
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==
-------------------------------- TEXT SLUT  --------------------------------

Nyckelbegrepp för uppgiften

  • termer: uttryck, sats, funktion, variabel, datatyp, indentering, heltal, flyttal, sträng, None
  • strängar: vad är en sträng och hur vet man när något är en sträng
  • heltal: vad är ett heltal och när vet man att ett tal är ett heltal?
  • flyttal: vad är ett flyttal och när vet man att ett tal är ett flyttal?
  • operatorer: + - / *
  • vilka operatorer kan man tillämpa på strängar, heltal och flyttal
  • vad händer när man försöker tillämpa en operator på värden med olika datatyp? t.ex. "5" + 5?
  • variabler: tilldelning av värde, samt användning av variabler i uttryck
  • funktion
    • syntax för definition av en funktion
    • hur man returnerar ett värde från en funktion
    • argument: vad argument till en funktion är och hur man använder dem (namngivning, antal, användning av argumenten i funktionskroppen)
    • anrop till en funktion: hur ser ett anrop ut i koden? vad händer?
    • vad är indentering och varför är det viktigt när man definierar en funktion?
  • skriva ut till terminalen: skillnaden på att skriva ut med print och när en funktion returnerar ett värde med return.

Uppgifter

Nedan hittar du uppgifterna samt information om förberedelser inför uppgifterna. Hur mycket varje uppgift är värd hittar du inom parentes efter uppgiftsnummret.

Om ni stöter på några problem, hittar fel, eller har frågor kring dessa uppgifter, säg gärna till!

Förberedelser

Nedanstående kod kan du använda som en utgångspunkt när du ska skriva din egen kod.

Tecknet # i början av en rad gör att pythontolken struntar i just den raden. På så sätt kan du skriva egna kommentarer. Kommentera hellre för mycket än för lite!

# Pythonuppgifter 1
# liuid: abcde123
# personnummer: ÅÅMMDD-XXXX

# här skriver du dina funktionsdefinitioner
def hello_world():
    print("Hello World!")


# Nedanstående rad är instruerar python att bara köra det som står nedanför
# om denna fil körs direkt, t.ex. från en terminal. Om koden bara laddas, t.ex.
# när rättningsskriptet körs, så kommer koden under nedanstående if-sats inte
# att köras.
#
# Observera indenteringen för att eventuell test-kod ska höra till if-blocket.
if  __name__ == "__main__":
    
    # här kan du alltså testköra dina funktioner genom att anropa dem
    # läs mer om hur du kan testa din kod på
    # https://www.ida.liu.se/~729G74/kursmaterial/pythonfaq
    hello_world()

Prova att köra ovanstående kod som du skrivit in i en textil med filändelsen .py från terminalen:

$ python3 filnamn.py

Lycka till med uppgifterna!

Uppgift 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 var en funktions returvärde är för något.

Uppgift 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 ut det funktionen print_five() returnerar.

Uppgift 1.3 (5p)

Skriv funktionen 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 funktionen 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 (10p)

Skriv funktionen 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 (10p)

Skriv funktionen 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.

Uppgift 1.7 (10p)

Skriv funktionen 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 - flyttalt, flyttal - heltal. Vad blir det för datatyp på resultatet?

Uppgift 1.8 (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.9 (10p)

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

Uppgift 1.10 a-c (15p)

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 first_in_list(values) som tar in en lista som argument och returnerar det första elementet i listan.
  • b) Skriv en funktion second_in_list(values) som tar in en lista som argument och returnerar det andra elementet i listan.
  • c) Skriv en funktion last_in_list(values) som tar in en lista som argument och returnerar det sista elementet 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.11 (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().

Uppgift 1.12 (15p)

I denna uppgift ska du använda dig av funktionen du skapade i uppgift 1.9 och funktionen du skrev i uppgift 1.11 som byggstenar i en ny funktion.

Målet är att 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 genom att använda funktionen du skrev i uppgift 1.11. Slå sedan ihop dessa två värden genom att använda funktionen du skrev i uppgift 1.9 och returnera resultatet.

Följande är alltså fel eftersom koden inte använder funktionerna som du definierade i uppgift 1.9 och 1.11.

def generate_pokemon_name(prefixes, suffixes)
    prefix = random.choice(prefixes)
    suffix = random.choice(suffix)
    name = prefix + suffix
    return name

Sidansvarig: Jody Foo
Senast uppdaterad: 2017-10-27