Göm menyn

1. Komma igång med Python

1.1 Inledning

OBS! Innan du börjar med uppgiften, backa ett steg och titta igenom Regler för redovisning och komplettering. Kom tillbaka hit när du har gjort det.

Syftet med denna första laboration är att komma igång med Python. För att förstå hur man köra ett Pythonprogram är det viktigt att ha kunskaper om Emacs och terminalen. Att ha en förståelse för grunderna ger en mer omfattande bild av Python. Du bör försöka göra så många som möjligt av de övningar som finns i laborationen. För att bli godkänd måste du redovisa de två uppgifter som finns i slutet av laborationen. Notera att även testningsbitarna i uppgifterna ska genomföras.

Studiematerial

Denna labb behandlar följande kapitel i studiematerialet i studiematerialet.

OBS! Om du vill öva mer på detta, finns extraövningar till labb 1 (E1.1) att tillgå.

Git -- eller inte?

För de inledande labbarna (1-4) gör vi ett Git-repo tillgängligt för varje anmäld student. Vet du inte vad det är? Då kan du ignorera det! Vi skapar detta för de som vill versionshantera sina inledande labbar och som redan vet vad det handlar om och vet hur Git används. Har du inte god erfarenhet av Git sedan tidigare är det bättre att du fokuserar på själva programmeringen istället.

Senare i kursen kommer vi alla att använda Git, men det blir i labb 5 när vi har haft tid att gå genom hur det fungerar.

Om du faktiskt vill använda detta repo loggar du först in på gitlab.liu.se. Då skapas automatiskt ett konto för dig. Så småningom kommer ett script att skapa ett projekt där du adderas så att du kan komma åt ditt repo.

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 Switch to 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

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 Pythonprogram genom att köra programmet via terminalen

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 True om resultatet ger ett heltal, annars ska det 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 rekommenderas du att köra python3. Om du känner till if-satser så är detta ingenting du ska använda för att lösa uppgiften.

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

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: 2021-12-03