Göm menyn

1. Komma igång med Python

1.1 Inledning

Innan du kastar dig över första uppgiften är det viktigt att du läser igenom Regler för redovisning och komplettering. Kom tillbaka hit när du har gjort det.

Tanken med första laborationen är att komma igång med Python och hitta ett arbetssätt som fungerar. Vi rekommenderar att du gör så många som möjligt av de övningar som finns i laborationen. För att bli godkänd räcker det dock att redovisa de uppgifter som finns längst ner i laborationsmaterialet.

Du får använda Python på vilket sätt du vill under labbarna. Om du redan är bekant med någon utvecklingsmiljö som finns i våra system får du gärna använda den, men räkna inte med att kunna få stöd från labbassistenterna för detta. För dig som är nybörjare rekommenderar vi starkt att inte försöka sätta dig in i en avancerad utvecklingsmiljö under de första labbarna. Just nu är det tillräckligt krånligt att använda Python överhuvudtaget, så kör dina program från kommandoraden till en början och skriv programmen i Emacs eller någon annan valfri editor.

Studiematerial

Innan labben är det bra om du har kollat på följande kapitel i studiematerialet:

För dig som är nybörjare eller känner att du behöver öva mer så finns det en hel del extraövningar till labb 1 att tillgå.

1.2 Inledande övningar

Se till att du har tillgång till en Python-interpretator, antingen genom att starta den från kommandoraden med python3 eller genom att öppna en Python-fil i Emacs och köra Start interpreter i Python-menyn.

Övning 101 Skriv in följande rader vid Python-prompten, en i taget. Försök förutsäga vad Python kommer att svara innan du trycker Enter.

4 - 2 2 * 5.0 (2 - 4) * 5.0 10 / 2 11 / 3 11 // 3 a = 2 * 3 a - 2.0

Övning 102 Kopiera funktionen find_root från kapitlet Satser och uttryck i studiematerialet. Ändra funktionen så att den kan skriva ut en valfri multiplikationstabell istället. Tanken är att funktionen ska fungera så här:

>>> table() This program prints out a multiplication table. Enter a number: 7 0 * 7 = 0 1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49 8 * 7 = 56 9 * 7 = 63

1.3 Definition av funktioner

Vi ska nu öva på att definiera egna funktioner som returnerar värden, d.v.s. skickar tillbaka information till oss som anropat dem. Om man ska vara noga så ligger det egentligen i själva begreppet funktion att den faktiskt ska returnera något, men vi säger ibland "funktion" även om kod som inte skickar tillbaka något.

>>> def plus(x, y): ... return x + y ... >>> plus(2, 5) 7

I ovanstående exempel har vi definierat en funktion plus. Den tar två argument som vi har kallat x och y. Det som händer inne i funktionen är att vi beräknar summan av dessa och med hjälp av konstruktionen return skickar tillbaka summan till den som anropat funktionen. return kan också ses som att den ger funktionsanropet det värde som står efter return. Vi provar att anropa funktionen och skickar in två argment. När vi trycker Enter får vi se returvärdet.

Vi kan också tilldela funktionens returvärde till en variabel, som vi sedan kan använda:

>>> points = plus(2, 5) >>> plus(points, 3) 10

Det värde man skickar in till en funktion måste inte vara en konstant, utan kan vara vilket uttryck som helst som Python kan evaluera (beräkna värdet av):

>>> def minus(x, y): ... return x - y ... >>> minus(plus(2, 5), 3) 4

I ovanstående exempel räknade man först ut värdet av plus(2,5) (som är 7) och sedan värdet av 3 (som inte helt förvånande är 3). Därefter anropades minus(7,3), som returnerade 4.

Oftast vill vi ha enkla och rena funktioner som fungerar i princip som matematiska funktioner. Det innebär att vi inte använder någon form av inmatning eller utskrift. Vi tar in indata via argumenten och skickar ut resultat som returvärde, inget annat.

Övning 103 Definiera en funktion average med två argument x och y som returnerar medelvärdet av x och y. Glöm inte bort att använda return i slutet av funktionen.

>>> average(2, 4) 3.0

Övning 104 Vad händer när den sista raden körs? Var har a och b för värde? Tips: testa att skriva ut a och b med print.

>>> def add1(x, y): ... return x + y ... >>> def add2(x, y): ... print(x + y) ... >>> add1(5, 5) 10 >>> add2(3, 7) 10 >>> a = add1(15, 3) >>> b = add2(9, 9)

1.4 Uppgift

Titta gärna på Regler för redovisning och komplettering för information om hur du ska redovisa dina resultat från uppgifterna nedan.

Uppgift 1A - Delbar med tre

Målet med uppgiften är att du ska kunna skriva och köra korta Python-program i en lämplig utvecklingsmiljö.

Som uppgift ska du muntligt redovisa följande för din labbassistent:

  • Att du har lagt till stöd för Python i din Emacs-editor.
  • Att du kan starta Python från terminalen.
  • Att du kan köra ett Python-program genom att köra programmet via terminalen.

Alternativt kan du redovisa att du kan köra Python-program i någon annan valfri utvecklingsmiljö.

Dessutom ska du implementera funktionen div_by_three som tar talet n, dividerar n med 3 och skriver ut resultatet enligt exemplet nedan. Funktionen ska returnera sanningsvärdet True om resultatet ger ett heltal, annars ska den returnera False.

>>> is_integer = div_by_three(6) 6 divided by 3 equals 2.0 >>> is_integer True >>> is_integer = div_by_three(4) 4 divided by 3 equals 1.3333333333333333 >>> is_integer False

Observera att det skiljer sig mellan olika python-versioner när man dividerar. Därför ska du att köra python3. Om du känner till hur if-satser fungerar så är detta ingenting du ska använda för att lösa uppgiften, utan du ska lösa uppgiften mer matematiskt.

1.5 Vägval med if

En av de vanligaste sakerna man behöver kunna göra i ett datorprogram är att göra jämförelser och baserat på resultatet välja bland olika alternativ. Detta kan vi göra med en if-sats:

>>> a = 45 >>> if a == 45: ... print("yes") ... else: ... print("no") ... yes

Det är viktigt att komma ihåg att både raden med if och raden med else ska avslutas med kolon, samt att raderna som uttrycker vad som ska hända i de två alternativen är indenterade. Notera också att vi använder jämförelseoperatorn == för att testa om två saker är lika. Det är inte samma sak som tilldelning med bara ett =. Denna konstruktion kan vara användbar i följande övningar.

Uppgift 1B - max2 och max3

Målet med uppgiften är att du ska kunna lösa matematiska programmeringsproblem genom att återanvända tidigare skrivna funktioner.

Definiera en funktion max2 med två argument x och y som returnerar det största av argumenten.

>>> max2(8, 4) 8

Definiera sedan en funktion max3 med tre argument x, y och z som returnerar det största av de tre argumenten. Du ska då återanvända arbetet du gjorde max2 ovan – men inte genom att skriva om koden. Låt istället max2 finnas kvar, och fundera på hur den nya funktionen max3 kan skrivas genom att anropa max2.

>>> max3(3, 7, 9) 9 >>> max3(1, 3, 2) 3 >>> max3(3, 7, 9) + max2(8, 4) 17


Sidansvarig: Peter Dalenius
Senast uppdaterad: 2023-08-08