Göm meny

Uppgifter i Python 3 - Loopar och villkor del 2


Fler övningar kommer läggas till HT 2017.

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

  • syntax och användning av for-loopen
  • dictionaries:
    • lägga till nyckel-värde-par till ett dictionary
    • slå upp värde i lista med hjälp av nyckel
    • ändra värde för en nyckel i ett dictionary

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 3.1 (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.

Uppgift 3.2 (5p)

Skriv funktionen key_exists(key, d) som tar in ett dictionary och returnerar True om nyckeln key finns bland dictionaryts nycklar. Annars returneras False.

Tips: Använd operatorn in.

Uppgift 3.3 (5p)

Skriv funktionen value_exists1(value, d) som tar in ett dictionary och returnerar True om värdet value finns bland dictionaryts värden. Returnera False om det inte finns.

Anta att dictionaryt bara innehåller siffror eller strängar.

Tips: Använd operatorn in eller en for-loop.

Uppgift 3.4 (5p)

Skriv funktionen add_to_dict(key, value, d) som lägger till värdet value till dictionaryt d. Du behöver inte bry dig om värdet eller nyckeln redan finns. Funktionen behöver inte returnera dictionaryt.

Uppgift 3.5 (5p)

Skriv funktionen add_new_only_to_dict(key, value, d) som lägger till värdet value till dictionaryt d fast bara om nyckeln key inte finns i dictionaryt. Funktionen behöver inte returnera dictionaryt.

Uppgift 3.6 (10p)

Skriv funktionen increment_dictionary_value1(key, d) som tar in ett dictionary vars värden är heltal eller flyttal (du behöver inte kontrollera detta). Nyckeln key kommer att finnas i dictionaryt. Funktionen ska lägga till 1 till värdet som tillhör nyckeln key. Funktionen behöver inte returnera dictionaryt.

Uppgift 3.7 (10p)

Skriv funktionen increment_dictionary_value2(key, d) som tar in ett dictionary vars värden är heltal eller flyttal (du behöver inte kontrollera detta). Om nyckeln key finns i dictionaryt ska du öka dess värde med 1. Om nyckeln inte finns i dictionaryt ska nyckeln läggas till och dess värde sättas till 1. Funktionen behöver inte returnera dictionary.

Uppgift 3.8 (10p)

Skriv funktionen add_to_value_list1(key, value, d) som tar in ett nyckel, ett värde och ett dictionary. Värdena i dictionaryt kommer att vara listor (du behöver inte kontrollera detta) och den angivna nyckeln kommer att finnas. Värdet ska läggas till till listan som tillhör nyckeln key i dictionaryt. Funktionen behöver inte returnera dictionaryt.

Uppgift 3.9 (5p)

Skriv funktionen return_value_list1(prefix, d) som tar in en sträng och ett dictionary. Funktionen ska returnera en lista som innehåller alla värden som tillhör nycklar som börjar på strängen prefix. Alla nycklar kommer att vara strängar i dictionaryt.

Uppgift 3.10 (5p)

Skriv funktionen flatten_list1(list_of_lists) som får in en nästlad lista. De inre listorna innehåller inga listor. Funktionen ska returnera en icke-nästlad lista som innehåller alla värden i de inre listorna.

Om list_of_values är [[1, 2], [3], [1, 2, 3]] så ska funktionen returnera listan [1, 2, 3, 1, 2, 3].

Uppgift 3.11 (10p)

Skriv funktionen flatten_list2(list_of_lists) som får in en lista som både innehåller listor och vanliga värden. De inre listorna innehåller dock inga listor. Funktionen ska returnera en icke-nästlad lista som innehåller alla värden i de inre listorna, samt värdena som ligger direkt i listan.

Om list_of_values är [[1, 2], [3], 4, [1, 2, 3], 4, 5] så ska funktionen returnera listan [1, 2, 3, 4, 1, 2, 3, 4, 5].

Uppgift 3.12 (10p)

Skriv funktionen value_exists2(value, d) som tar in ett dictionary och returnerar True om värdet value finns bland dictionaryts värden. Returnera False om det inte finns.

Dictionaryts värden ska kunna vara siffror, strängar eller icke-nästlade listor. Funktionen ska även leta efter värdet value i eventuella listor. Om vi letar efter värdet 'hejsan' i dictionaryt

{ "a": "bokstäver", "b": ['h', 'hejsan'] }

så ska funktionen returnera True

Uppgift 3.13 (5p)

Skriv funktionen get_first_column(matrix) som tar in en nästlad lista som representerar en matris. Varje element i matrix är alltså en lista som representerar en rad i matrisen. Alla listor är lika långa. Se exemplet nedan.

# nedan är en nästlad lista som representerar en 3x3-matris
m = [[1, 2, 4],
     [3, 0, 6],
     [0, 5, 1]]

Funktionen get_first_column(matrix) ska returna en lista som innehåller värdena i den första kolumnen i matrisen som en lista. För ovanstående matris ska alltså listan [1, 3, 0] returneras.

Tips: För att komma åt det första elementet i den första listan i m definierad ovan, skriver man m[0][0]. För att komma åt det tredje elementet i den andra listan skriver man m[1][2].

Uppgift 3.14 (5p)

Skriv funktionen get_nth_column(n, matrix) som tar in en nästlad lista som representerar en matris. Varje element i matrix är alltså en lista som representerar en rad i matrisen. Alla listor är lika långa.

Funktionen get_nth_column(n, matrix) ska returnera kolumnen n, där den första kolumnen har n == 1.

Uppgift 3.15 (10p)

Skriv funktionen get_all_columns(matrix) som tar in en nästlad lista som representerar en matris. Varje element i matrix är alltså en lista som representerar en rad i matrisen. Alla listor är lika långa.

Funktionen get_all_columns(matrix) ska returnera alla kolumner i matrisen matrix som en lista. Följande lista ska alltså returneras givet m som definierad i uppgift 3.13:

[[1, 3, 0], [2, 0, 5], [4, 6, 1]]

Uppgift 3.16 (15p)

Skriv funktionen matrix_square(matrix) som ska returnera kvadraten av matrisen matrix. Varje element $a_{ij}$ i den nya matrisen fås av skalärprodukten av rad $i$ med kolumn $j$.

Om vi använder oss av samma matris om i exemplet i uppgift 3.13

# nedan är en nästlad lista som representerar en 3x3-matris
m = [[1, 2, 4],
     [3, 0, 6],
     [0, 5, 1]]

så är elementet på den första raden i den första kolumnen i den nya matrisen skalärprodukten av den första raden i m och den första kolumnen i m. Skalärprodukten räknas ut enligt nedan:

$(1, 2, 4) \cdot (1, 3, 0) = 1 \times 1 + 2 \times 3 + 4 \times 0 = 7$

Elementet på första raden, andra kolumnen är $(1, 2, 4) \cdot (2, 0, 5) = 22$ och så vidare. Den nya matrisen som matrix_square(matrix) ska returnera givet m som input är alltså

[[7, 22, 20],
 [3, 36, 18],
 [15, 5, 31]]

Du får använda funktionerna du skrivit i tidigare uppgifter.


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