1 of 20

Övning 2

Funktioner, loopar & inbyggda datastrukturer

2 of 20

Dagens agenda

  1. Diskutera några delar av labb 1
  2. For-loopar
  3. Olika datatyper
  4. Funktioner
  5. Moduler

3 of 20

Diskutera några delar av labb 1

Komihåg, det kan finnas några som ännu inte är klara så dela inte er kod.

1.

Hur kan vi jämföra om användarens val är lika med datorns val när båda kan välja mellan: sten, sax och påse?

3.

Hur skulle det kunna funka om vi ville lösa labben genom att lägga till regler i ett dictionary?

2.

Hur kan if-elif-else satserna struktureras för att jämföra de olika kombinationerna av användarens val och datorns val?

4 of 20

Parsons problem

Kodproblem där satserna (raderna i programmet) är givna, men inte ordningen och indenteringen. Det kan också finnas några kodrader som inte behövs.

5 of 20

Parsons for

Läs instruktionen för vad programmet ska göra!

6 of 20

Parsons for

Läs instruktionen för vad programmet ska göra!

7 of 20

Parsons for

Läs instruktionen för vad programmet ska göra!

8 of 20

Dictionary, set, tupler – Kort repetition

Ett element i en dictionary har alltid en nyckel och ett korresponderande värde. Elementen är inte ordnade. Nya element kan läggas till och element kan tas bort.

Ett set kan inte innehålla dubbletter av värden. Värdena är inte ordnade. Värden kan lägga till värden (så länge de inte redan finns) och tas bort.

En tuppel kan inte ändras efter att den skapas men har index på samma sätt som en lista.

lexikon = {"äpple": ["apple", "appfel"]}

kvartal1 = ("januari", "februari", "mars”)

färger = {"grön", "gul", "vitt"}

9 of 20

Vilken datatyp är lämplig (lista, dictionary, tupler eller set)?

  • Lagra månadernas namn och antal dagar för varje månad
  • Lagra ingredienser i en sallad
  • Lagra studenters resultat på ett prov
  • Lagra antalet som finns kvar av olika godispåsar i en butik
  • Lagra alla namn på personer i en grupp
  • Lagra namn på alla klassrum i en skola
  • Lagra namnen på filmer som du sett

10 of 20

Dela in koden i funktioner

  • Funktioner gör att vi lättare kan återanvända kod, så vi slipper kod upprepning.
  • Funktioner kan göra koden mer lättläst.
  • Funktioner gör det lättare att felsöka 

En riktlinje för en funktion är att den ska gå att överblicka - d.v.s inte vara längre att den får plats på skärmen.

11 of 20

Funktioner – definitioner, anrop och main()

​​​​​​def multiplicera(tal1, tal2):

produkt = tal1 * tal2    

return produkt

def main():

tal1 = int(input("Tal 1: "))

tal2 = int(input("Tal 2: "))

produkt = multiplicera(tal1, tal2)

print(produkt)

main()

12 of 20

Definiera en egen funktion

Krav:

    • Funktionen ska ha tre parametrar
    • Funktionen ska ha ett returvärde

13 of 20

Definiera tre funktioner

Funktion 1:

    • Frågar användaren om tre heltal
    • Returnerar talen

Funktion 2:

    • Tar emot tre heltal som parametrar
    • Returnerar produkten av talen

Main-funktionen:

    • Kallar på funktion 1 och sparar returvärdena
    • Kallar på funktion 2 med returvärdena från funktion 1 som parametrar.
    • Skriver ut produkten av talen

Parsons om du föredrar det

14 of 20

Moduler

Att använda inbyggda moduler är ofta väldigt bekvämt istället för att definiera de själv. Vi kan också dela upp vårt eget program i flera filer för att göra det lättare att återanvända funktioner i olika program.

Exempel: Om vi har en fil där vi definiera en funktion för en tärning med x antal sidor, kan vi använda den i flera typer av brädspel.

https://trinket.io/python3/d73e4898ec 

Gå igenom koden och testkör den.

En riktlinje för en funktion är att den ska gå att överblicka - d.v.s inte vara längre att den får plats på skärmen.

15 of 20

Exempel med modulen turtle

Idén om Turtle kommer från “Logo”. Logo är ett programspråk som var speciellt utformat för att lära barn programmera, utvecklat 1967. Till programmet hörde också en fysisk robot som gick att programmera, utrustad med en penna för att kunna rita ut former. 

Exempel: https://trinket.io/python/559f5bbd94 

I filen “shapes.py” finns funktioner för att rita cirklar, fyrkanter och stjärnor. Testa att ändra om programmet och rita ut andra former.

16 of 20

Hur kan strukturen förbättras i det här programmet?

17 of 20

Påminnelse: Riktlinjer för bra läsbarhet och enklare felsökning

  • En funktion bör bara göra en sak.
  • En funktion bör inte vara längre än vad som som får plats på skärmen, så den går att överblicka. 
  • Importer högst upp i filen.
  • Main-funktionen ligger högst upp eller längst ner i filen.
  • Inga globala variabler i koden, använd parametrar och returvärden istället.
  • Globala konstanter är definierade högst upp i filen (efter import-satserna).
  • Anropet till main-funktionen är allra längst ner i filen.
  • Se till att varje funktion har en kommentar om vad den gör, parametrarar och returväden.

18 of 20

Hur kan strukturen förbättras i det här programmet?

Är det något mer som kan förbättras nu när ni kollat på riktlinjerna?

19 of 20

Live-code övning

Uppgift - skapa ett program som genererar svenska “naturefternamn”

  1. Skapa en funktion som tar in ett ord (sträng) och returnerar samma ord där första bokstaven är stor (utan att använda den inbyggda metoden capitalize()).
  2. Skapa en funktion som tar en lista med substantiv som input och returnerar en lista med alla kombinationer, substantiv1 + substantiv2, där den första bokstaven i substantiv1 är stor och substantiv1 inte är lika med substantiv2. Dessa representerar svenska efternamn.
  3. Skriv ut listan med svenska efternamn i main-funktionen.

Förslag på substantivlista:

substantiv_lista = ["sjö", "strand", "blom", "kvist", "gren", "törn", "ros", "moss", "bäck"]

Skapa efternamn som: “Sjöstrand” och “Törnbäck”

20 of 20

Labb 1

Sten, sax, påse

Deadline: Fredag 10/11