Föreläsningsöversikt 1.1 - 1.2¶
- Kursinformation
- Datorn och program
- Terminalen
- kommandon
- sökvägar
- Program och programmeringsspråk
- Vad händer när man kör ett program?
- Hur skapar man program?
- Olika abstraktionsnivåer för programmeringsspråk
- Programmeringsspråket Python
- Skriva och köra pythonprogram
- Beståndsdelar i ett pythonprogram
- Moduler (om vi hinner, annars läs själva efter FÖ)
Om kursen¶
Tre huvudområden¶
- Grunder i programmering (Python): Förberedelse inför kommande kurser och arbetsliv; använda programmering som ett verktyg
- Diskret matematik: introduktion till begrepp och formalismer som är relevanta för programmering
- Grundläggande informationsteknik: målet är att alla kogvetare ska ha den grundförståelse av IT för att bättre kunna genomföra projekt och kurser som använder IT (alla)
Digitala kontaktytor¶
- Kurshemsida (all kursinformation hittar ni här, inkl. föreläsningsbilder)
- Webreg
- https://www.ida.liu.se/webreg3/729G46-2024-1
- Anmälan till seminariegrupp/pargrupp.
- Resultat/kommentarer - lärare fyller i återkoppling, systemet skickar e-post
- E-postlista
- 729g46_2024ht_bx@student.liu.se
Skicka kursrelaterad e-post¶
- Skicka endast från er LiU-adress
- Ha med kurskoden i ämnesraden
- Om ni läste en annan kursomgång - berätta när ni först läste kursen
Personal¶
- Kursledare och Examinator
- Johan Falkenjack (Föreläsningar och material)
- Kursassistent
- Charlie Simonsson (Lektioner, laborationer och seminarier)
- Övriga lärare
- Mio Cajander (Lektioner och laborationer)
- Simon Ekman (Lektioner, laborationer och seminarier)
- Michael Isaksson (Lektioner och laborationer)
- Kacper Sieklucki (Lektioner, laborationer och seminarier)
- Kursadministratör
- Anna Grabska Eklund
- Studierektor
- Jalal Maleki
Kursplan¶
- Varje kurs har en kursplan där lärandemål, kursinnehåll och examination beskrivs
- Ni hittar kursplaner för alla kurser på
- För den här kursen
- Genväg på kurshemsidan
Kursplan¶
- Lärandemål
- mål som studenter ska ha nått efter kursen
- Kursinnehåll
- ämnen, begrepp m.m. som tas upp i kursen
- Examination
- hur examineras kursmålen, vilka examinationsmoment som ingår - det är dessa ni får poäng på. T.ex. LAB1, EXA1 osv.
729G46. Examinationsmoment¶
- LAB1. 2,5hp (U/G/VG)
- Temauppgifter, Tema 1-3
- EXA1. 2,5hp (U/G)
- Inlämningsuppgifter och seminarier, Tema 1-3
- DUG1. 1hp: Dugga i programmering (U/G)
- LAB2. 4,5hp (U/G/VG)
- Temauppgifter, Tema 4-6
- EXA2. 1,5hp (U/G/VG)
- Inlämningsuppgifter och seminarier, Tema 4-6
Kurslitteratur¶
Informationsteknologi
- Janlert, L.-E. (2015). Tänkande och beräkning: en inledning till datavetenskap och kognitionsvetenskap. Studentlitteratur AB.
- Lunell, H. (2011). Datorn i världen, världen i datorn: en introduktion till data- och informationsteknik. Studentlitteratur AB.
Python
- Skansholm, J. (2019). Python från början. Studentlitteratur AB.
Diskret matematik
- Kuhlman, M., & Dahllöf, M. (2014). Matematik för språkteknologer. (PDF)
Ytterligare litteraturtips finns på kurshemsidan
Frihet och eget ansvar¶
- Offensiv kunskapsinhämtning
- Det finns inte möjlighet att gå igenom allt kursinnehåll på föreläsningar
- Eget ansvar för aktivt deltagande i dina universitetsstudier
- Om du missar något moment kommer ingen jaga dig. Du får helt enkelt inga poäng.
Kursupplägg¶
- 12hp ~ 320 timmar totalt över 20 veckor.
- Kursen är designad för 40% fart dvs ca 16h/vecka (parallell kurs ca 24h/vecka)
- 5-8h schemalagt per vecka → 8-11h självstudier per vecka
- Hur många timmar som behövs för varje individ varierar
- Kursen är uppdelad i 6 st teman:
- Tema 1-3 grunder
- Tema 4-6 utveckling
- Varje tema 3 veckor (48h)
Tema 1-3¶
- Schemalagt per tema
- 3 föreläsningar
- 1 lektion
- 1 seminarium (1h)
- 4-5 handledda pass i datorsal
- Redovisningar och inlämningar / tema
- Seminarium i mindre grupper
- Temauppgift, muntlig redovisning
- Inlämningsuppgift i diskret matematik
- Dugga i programmering 24 oktober. OBS! Ni måste anmäla er för att skriva duggan!
- Se Studentportalen. Deadline senast 10 dagar före tentamensdatum. Öppnar en månad innan examinationen. Lita inte på att lärare kommer påminna er.
- Självstudier
- ~20h schemalagt per tema av totalt ~48h tid/tema
Om ni upplever problem under kursen¶
- Hör av er om ni har problem under kursen, vänta inte tills kursen är slut
Anmälan till pargrupper i LAB1¶
- Ni bildar pargrupper och anmäler pargruppen i Webreg
- En pargrupp består av två studenter
- tre studenter går att ordna vid ojämnt antal i seminariegruppen (kontakta någon av lärarna)
- Tema 1: Individuellt (Temauppgift + Pythonuppgifter)
- Tema 2-3: Parprogrammering (Temauppgift + Pythonuppgifter)
- Deadline för anmälan till LAB1: 3 september
Anmälan till seminariegrupper i EXA1¶
- Enskild anmälan till en grupp om 6 personer i Webreg
- Ni behöver inte anmäla er till samma seminariegrupp i EXA1 som er labbpartner i LAB1
- En pargrupp består av två studenter
- tre studenter går att ordna vid ojämnt antal i seminariegruppen (kontakta någon av lärarna)
- Tema 1: Individuellt (Temauppgift + Pythonuppgifter)
- Tema 2-3: Parprogrammering (Temauppgift + Pythonuppgifter)
- Deadline för anmälan till EXA1: 27 augusti
Deadlines¶
- Deadlines för inlämningar m.m. finns på kurshemsidan!
- Uppsamlingstillfällen
- Två uppsamlingstillfällen för rättning av kompletteringar inlämnade efter kursens slut
- Uppsamlingstillfälle 1: 1 juni 2025 (kl. 10.00)
- Uppsamlingstillfälle 2: 4 augusti 2025 (kl. 10.00)
Pythonuppgifter under Tema 1-3¶
- Genomförs individuellt och introducerar nya programmeringskonstruktioner
- Består av 3 delar. T.ex. Pythonuppgifter 1 = 1.1, 1.2, 1.3
- Små, enklare uppgifter
- Övning inför duggan
- Automatisk rättning:
- skriv kod i textfil
- kör rättningsskript via terminalen
- kopiera rättningskod till textfil (en textfil för varje del)
- lämna in textfilerna via Sendlab
- OBS! Testa er kod innan ni använder rättningsskriptet. Automaträttning kan endast utföras var
15:de8:e minut.
Temauppgifter under Tema 2-6¶
- Genomförs i pargrupper
- Programmeringsuppgift med mer problemlösning
- Tillämpning av det ni lärt er från Pythonuppgifterna - sätta ihop mindre delar till en helhet
- Redovisas muntligt på schemalagt redovisningstillfälle
- Lämnas sedan in i Sendlab
Temauppgift under Tema 1¶
- Genomförs individuellt
- Introduktion till datorsystem, verktyg och kurshemsidan
- Redovisas muntligt på schemalagt redovisningstillfälle
- Lämnas sedan in i Sendlab
Inför handledda pass i datorsal¶
- Läs igenom instruktionerna innan passet
- Sprid ut er mellan salarna (vi har flera salar per pass)
Hur ber man om hjälp?¶
- Undvik frågor som "vi sitter fast"/"något blir fel"/"vad ska vi göra"?
- Bättre sätt att ställa frågor
- berätta om problemet ni försöker lösa
- berätta hur ni tänkt att ni ska lösa problemet
- visa hur ni försökt lösa problemet, beskriv vad som inte fungerar som förväntat
- Exempel
- Försöker hitta information om kommandot
head
- Googlar efter: head command
- Får inte bra resultat
- Försöker hitta information om kommandot
Datorsalar (eller PUL - Programutvecklingslaboratorium)¶
- Datorsalarna finns i B-huset
- Ingång B 27: SU00-SU04 på nedervåningen, SU10-17 + SU24, SU25 på övervåningen
- Ingång B 25: Egypten, Asgård och Olympen på övervåningen rakt fram
- Ingång B 23: Boren och Roxen på övervåningen till höger
- Användning utan för schemalagd tid
- fritt att använda om det finns plats
- om det är bokat av annan kurs, kan ni dock bli ombedda att gå/vara tysta vid platsbrist/genomgång
Begreppsseminarium¶
- Syfte
- Lära er om grundläggande informationsteknik. Även om inte allt "används" i denna kurs är målet att alla kogvetare ska ha en viss grundkunskap inom IT
- Upplägg - Flipped classroom
- Före seminarium: Se videos, gör övning, skicka in Entry Ticket
- Seminarium på Campus
- Komplettering vid missat seminarium
- Inlämning, 1-2 sidor diskussion av seminariematerialet
Begreppsseminarium - Förberedelser¶
- Titta på videoklippen (ca 1 h obligatoriskt + 1 h rekommenderat)
- Gör en av övningarna
- Fyll i din "Entry Ticket" (länk på resp. Begsem-sida)
- Beskriv en av de viktigaste punkterna som togs upp i förberedelsematerialet enligt dig.
- Beskriv vad som var “the muddiest point” i förberedelsematerialet enligt dig? (Med “muddiest point” menas det som du tyckte var mest oklart, förvirrande eller otydligt.)
- Berätta vad du vill veta mer om relaterat till förberedelsematerialet.
Begreppsseminarium - under seminariet¶
- Diskussion av materialet
- Reda ut oklarheter
- Diskutera exempel
- Diskutera övningar
- Diskutera tillämpningar
- Ta gärna med er egna frågor utöver de på kurshemsidan!
Inlämningsuppgifter i matematik under Tema 1-3¶
- Uppgifter i diskret matematik: grundläggande notation och begrepp
Pust...¶
Tema 1¶
Varför måste man lära sig programmera?
Alla på LiTH och några till läser programmering¶
- TDDE23/24 Funktionell och imperativ programmering, 11 hp (D, U)
- TDDE44 Programmering, grundkurs, 8 hp (Y, MED, TMA, MAT)
- TDDC77 Objektorienterad programmering, 8 hp (IT)
- TDDE67 Programmering, grundkurs, 8 hp (I)
- 725G92 Problemlösning och programmering, 7.5 hp (Systemvetenskap)
- 732G33 Programmering i R, 7.5 hp (Statistik)
- TDDE54 Programmering och problemlösning, 6 hp (M, TB, KB, EMM, KA, MI)
- TDP002 Imperativ programmering, 6 hp (IP)
- TND012 Programmering grk, 6 hp (ED, KTS, MT)
- TDIU08 Problemlösning och programmering, 6 hp (Di, Ei)
Hur lär man sig programmera?¶
Vad är ett program?
"Computer program, detailed plan or procedure for solving a problem with a computer; more specifically, an unambiguous, ordered sequence of computational instructions necessary to achieve such a solution. "
Vad är ett program?
"We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the spirits of the computer with our spells."
- Abelson and Sussman, Structure and Interpretation of Computer Programs aka The Wizard Book
Okej, men vad är i så fall en dator, eller "computer"?
Om vi bortser från den ursprungliga definitionen?
- Maskin som kan utföra beräkningar.
- Vilka beräkningar som helst?
- Vilka beräkningar som helst, givet rätt instruktioner?
- Om de instruktionerna är program, så är datorer beräkningsmaskiner som kan programmeras att utföra vilka beräkningar som helst.
Dator?
Teoretisk maskin som givet rätt instruktioner och oändligt mycket plats för minnesanteckningar kan utföra alla beräkningar som är möjliga i ändlig tid.
Dator!
Verklig maskin som givet rätt instruktioner och tillräckligt mycket plats för minnesanteckningar kan utföra alla beräkningar som är möjliga i rimlig tid.
Hur skriver man instruktioner?
eller
Hur programmerar man?
ENIAC¶
Programmerarna Marlyn Wescoff och Ruth Lichterman implementerar ett program på ENIAC (sannolikt för någon form av ballistisk beräkning).
1945: John von Neumann och den fundamentala datorarkitekturen¶
von Neumann-arkitekturen
- Processorenhet med aritmetisk-logisk enhet och in/ut-register för denna
- Kontrollenhet med aktuellt instruktionsregister och en programräknare som håller koll på nästa instruktion
- Internminne som lagrar både data och instruktioner som används i den aktuella processen
- Externminne för långtidslagring av data och program (sekvenser av instruktioner)
- In- och Utenheter
Binär maskinkod, vår första abstraktion i kod
- Består av långa sekvenser av
1
:or och0
:or som representerar instruktioner och den data som instruktionerna opererar på. - Exempelvis
10111000
,00000000
,10111000
,10001110
,11011000
,11000110
,00000110
,10011110
,00001111
,00100100
,11001101
,00100000
- Med "vanliga" heltal med talbas 10 motsvarar detta
184
,0
,184
,142
,216
,198
,6
,158
,15
,36
,205
,32
- Med "vanliga" heltal med talbas 10 motsvarar detta
- Ofta uttrycker vi 8-bitars sekvenser av binära tal (1 byte) som hexadecimala tal (med talbas 16).
- Vi använder
a
för att representera vanliga heltalet10
,b
för11
, osv. upp tillf
för15
- Exemplet ovan blir då
b8
,00
,b8
,8e
,d8
,c6
,06
,9e
,0f
,24
,cd
,20
- Vi använder
Maskinkod för Intel 8085 (1976), några exempel
Binary | Opcode (hex) | Description |
---|---|---|
10000111 |
87 |
Add the contents of register A to that of the accumulator |
00111010 |
3a |
Load data stored in the given memory address |
01111001 |
79 |
Move data from register A to C |
11000011 |
c3 |
Jump to instruction in specified memory address |
11000001 |
c1 |
Pop from stack and copy to memory registers B + C |
Assemblykod, en abstraktion av maskinkod
MOV AX, 47104
MOV DS, AX
MOV [3998], 36
INT 32
- Ett assemblator-program (eng. assembler) kan använda ovanstående text och producera ett program i maskinkod.
- (Exempel från http://www.swansontec.com/sprogram.html)
Högnivåkod som översätts till assembler och maskinkod
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
- En kompilator översätter ett program från kod som vi, med lite övning, kan läsa och förstå, till maskinkod.
Högnivåkod som kan köras direkt av ett annat program
print("Hello, World!")
- En interpretator eller programtolk kan köra program direkt, utan att översätta dem till maskinkod.
Abstraktionshierarki
Vilket programmeringsspråk är bäst?
Fråga som faktiskt kan besvaras:
Vilket programmeringsspråk är sämst?
Kort om Python

- Födelsedatum: sent 80-tal men officiellt 20e februari 1991
- Skapare: Guido van Rossum (före detta "Benevolent Dictator For Life", eller BDFL, över Python)
- Fyllde 2.0 i oktober 2000
- Fyllde 3.0 i december 2008
- Idag: 3.12
- I kursen använder vi 3.10
- Top 5 i de flesta rankningar av popularitet, nr 1 i flera av dem.
- Interpreterat, objektbaserat och dynamiskt typat programmeringsspråk.
LiUs GNU/Linux-miljö
Vad i hela fridens namn, jag har ju knappt använt en dator med tangentbord förut?!
Operativsystem¶
It's a UNIX System!¶
Hur brukar det se ut?
LiUs Linuxmiljö
- Operativsystem: GNU/Linux (Ubuntu 20.04)
- Inloggning med LiU-ID
- Möjlighet att logga in från egen dator via ThinLinc (VPN krävs utanför LiUs
- nätverk)
- Se LiUs studentsidor samt kurshemsidan för mer info
Terminalen som gränssnitt
Vadå gränssnitt?
- Engelska: interface
- Gränssnitt - platsen där två olika system möts och kommunicerar med varandra - något som ligger mellan två olika system och genom vilket systemen kommunicerar med varandra.
Kommandoradsgränssnitt (CLI - Command Line Interface)¶
Jag har hört att det heter skal/prompt/konsol, inte terminal?
- Terminalprogrammet
- Tillhandahåller funktionalitet för skalprogram att visa text och ta emot tangentbordstryck från användaren.
- Skalet/skalprogrammet (eng. shell)
- Tillhandahåller ett interaktivt gränssnitt för att köra kommandon.
- Startas automatiskt när vi öppnar terminalprogrammet.
- En typ av interpretator.
- Prompt
- Sekvens av tecken som visar att skalet är redo att ta emot ett kommando.
- Tecknet
$
används ofta för att representera en godtycklig prompt i böcker och dokumentation.
- Konsol
- Ett specialfall av terminal som tillhandahålls direkt av operativsystemets kärna (eng. kernel). $\leftarrow$ överkurs
Var är vi?

Katalogstruktur i UNIX-liknande system¶
Jaja, men var är vi nu?
Svar: ~
~
Viktiga sökvägar
Absoluta — utgår från en fixerad punkt i filsystemet¶
/
: roten i filsystemet~
: din hemkatalog~/Downloads
: där filer du laddar ner hamnar~adalo256
: användaren adalo256s hemkatalog/dev/null
: intigheten, filsystemets svarta hål
Relativa — utgår från katalogen vi står i¶
.
: ett alias för arbetskatalogen (eng. working directory), dvs. katalogen vi står i..
: ett alias för föräldrakatalogen (eng. parent directory) till den katalog vi står i
Absoluta sökvägar¶
Innehållet i /home/jodfo01
- __Utgår från _roten___ i filsystemet; katalogen "högst upp", och som som alla andra kataloger ligger i
- Absolut sökväg till roten i Linux & macOS:
/
- Varje fil eller katalog har en unik absolut sökväg
- Exempel på absoluta sökvägar
/home/jodfo01/katalog1
/home/jodfo01/katalog2/hejsan/hoppsan
/home/jodfo01/katalog3/fil7
Relativa sökvägar¶
Innehållet i /home/jodfo01
- Utgår från en specifik plats i filsystemet
- Varje fil eller katalog har olika relativa sökvägar beroende på vilken katalog man utgår ifrån.
- Exempel på relativa sökvägar till
/home/jodfo01/katalog3/fil7
fil7
(från/home/jodfo01/katalog3
)katalog3/fil7
(från/home/jodfo01/
)../katalog3/fil7
(från/home/jodfo01/katalog2
)../../katalog3/fil7
(från/home/jodfo01/katalog2/hejsan
)
Hur vet vi var vi är?
- Kolla prompten
- I LiUs Linux-miljö är prompten konfigurerad att innehålla sökvägen till den aktuella katalogen (eng. working directory). Detta gäller dock inte på alla system och användare kan ändra sin prompt hur de vill.
- Kommandot
pwd
: print working directory- Skriver ut sökvägen i terminalen.
Kommandot cd
: change directory
cd
: change directory- Flytta till en annan katalog, en sökväg skickas med som argument till kommandot.
- Exempelvis:
cd /
: flytta till rotkatalogencd ..
: flytta till föräldrakatalogencd -
: flytta tillbaka till den senaste katalogen vi var icd katalognamn
: flytta till underkatalog till arbetskatalogen med namnetkatalognamn
(ger fel om den katalogen inte finns)cd
: specialfall som flyttar till hemkatalogen
Delar av ett kommando¶
option = flaggor/växlar (olika för olika kommandon), t.ex. -l
för kommandot ls
Delar av ett kommando¶
option = flaggor/växlar (olika för olika kommandon), t.ex. -R
för kommandot cp
Vad händer egentligen när ett kommando körs?¶
Exempel på kommandon¶
- Interna (eller inbyggda)
echo
: skriver ut argument i terminalencd
: byter katalog (arbetskatalog - katalogen man "står i")
- Externa
ls
: visar innehåll i katalogmv
: flytta/döp om fil eller katalogmkdir
: skapa katalogcat
: skriv ut innehåll i filtouch
: skapa ny fil/uppdatera senast ändrad hos existerande filman
: visa hjälptext för kommandon
Kommandot which
till räddning!¶
$ which ls
/bin/ls
- Kommandot
which
visar sökvägen till det program som kommer köras om vi kör kommandotls
. - Kommandot
ls
är alltså ett program lagrad i filenls
i katalogen/bin
. - För interna kommandon eller kommandon som inte finns kommer
which
inte ge något svar.
Interaktiv användning¶
- Starta en pythontolk genom att skriva
python3
i terminalen. - Python ersätter skalprogrammet i terminalen.
- Bra för att experimentera, testa och felsöka.
- Avsluta genom att trycka Ctrl-D eller genom att köra python-kommandot
exit()
.- Tekniskt sett så anropar vi funktionen
exit
utan några argument
- Tekniskt sett så anropar vi funktionen
Skriv och kör ett skript¶
- Starta en text-editor (t.ex. VSCode)
- Skriv kod och spara i en fil med exempelvis namnet
hello.py
. - Från terminalen, kör programtolken och skicka med sökvägen till textfilen med pythonkoden som argument genom att skriva
python3 hello.py
- Bra för kod som man vill spara eller sätta i produktion.
Korta videos om Python¶
Inspelade av Jody Foo som också designat den här kursen¶
https://www.ida.liu.se/~729G46/tema1/pyvids1/¶
(Ja, du förväntas ha tittat på alla 23 minuter som tillhör Tema 1 innan du börjar med Pythonuppgifterna)¶
Syntax och semantik¶
"We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the spirits of the computer with our spells." - Abelson and Sussman, Structure and Interpretation of Computer Programs aka The Wizard Book
- Syntax, programmeringsspråkets grammatik, bestämmer hur vi får skriva ett program.
- Semantik, programmets betydelse, vilken "computational process" som ett visst program uttrycker.
1
1
[1, 2]
[1, 2]
Klasser: heltal och flyttal¶
- De flesta programmeringsspråk skiljer på heltal (eng. integer) och flyttal (eng. floating-point number)
- Flyttal är det vanligaste sättet att representera decimaltal i en dator
- Flyttal och heltal är olika klasser,
float
ochint
Klasser: sträng och lista¶
- En sträng, objekt av klassen
str
, är en sekvens av tecken som skrivs inom citationstecken. - En lista, objekt av klassen
list
, är en sekvens av andra objekt som skrivs inom hakparenteser.
["hej", 1]
['hej', 1]
Matematiska operatorer¶
+
,-
,*
,/
: de fyra fundamentala räknesätten addition, subtraktion, multiplikation och division**
: exponentiering (potens, "upphöjt till")//
: heltalsdivision, dvs. division med eventuella decimaler trunkerade- OBS: Inte vanlig avrundning men kan liknas vid att avrunda neråt till närmsta heltal
%
: modulo (rest vid heltalsdivision)
1%3
1
Matematiska operatorer¶
Operatorer och operander som inte är tal¶
1.0+1
2.0
1+1
Variabler & tilldelningssatser¶
- En variabel är en symbol som refererar till ett värde
- Kan innehålla värden av vilken typ som helst, och skapas genom att de tilldelas ett värde.
hej = 1
hej = 3
hej = [1, 2]
hej
[1, 2]
Lämpliga variabelnamn¶
- I Python använder vi substantivlika namn på variabler
- t.ex.
value
,filename
,player
,age
- t.ex.
- Ett variabelnamn skrivs med små bokstäver
- Om ett variabelnamn innehåller flera ord används ett understreck,
_
, mellan orden- t.ex.
book_title
,left_panel
,confirm_button
- t.ex.
Ändra värdet på existerande variabel¶
- Vi kan skriva över värdet på en variabel genom att tilldela ett nytt värde
min_variabel = 10
min_variabel = 3
- För att öka värdet på en variabel med $1$ skrivs
min_variabel = min_variabel + 1
- Nedanstående syntax för augmented assigment kan också användas för att t.ex. öka ett värde med $3$
- min_variabel += 3
- Motsvarande finns för samtliga matematiska operatorer, dvs.
+=
,-=
,*=
,/=
,
Sammansatta satser¶
sammansatt sats (compound statement): en sats som kan innehålla andra satser¶
- En eller flera klausuler
- En klausul består av en huvudrad och ett tillhörande block med minst en sats
huvudrad som inleds med ett nyckelord
sats 1
sats 2
...
sats n
- Exempelvis funktionsdefinitioner, villkorssatser, loopar, klassdefinitioner,
try
-satser m.fl.
Funktioner¶
- Namngivna bitar kod kod som vi kan återanvända
- Mer generellt, en typ av subrutin, ett program i programmet
- Vi säger att vi anropar en funktion när vi vill använda den
Funktioner som skapar objekt kan användas för typomvandling¶
- T.ex. mellan olika typer av tal:
round(2/3)
1
Funktioner i Python har alltid returvärden¶
- Dvs ett funktionsanrop är ett uttryck.
- Värdet av uttrycket är värdet som funktionen returnerar.
Funktioner kan ta argument¶
- När en funktion anropas skickar vi oftast med något eller några värden.
- Dessa värden är argument till funktionen och påverkar på något sätt vad funktionen gör.
Funktioner som svarta lådor¶
- Vi kan tänka på funktioner som svarta lådor som tar emot någonting och ger tillbaka någonting.
- Vad de tar emot och vad de ger tillbaka är det enda vi behöver bry oss om.
- (Tills vi kommer till funktioner med sidoeffekter men vi väntar med det.)
Funktion som returnerar ett värde¶
Funktionen return_hello tar inga argument och returnerar alltid strängen
"hello".
return_hello()
'hello'
Funktion som tar ett argument och returnerar ett värde¶
Funktionen double_value tar ett värde och returnerar det dubbla.
double_value(2)
4
Funktion som tar två argument och returnerar ett värde¶
Funktionen avg_value tar två värden och returnerar genomsnittet av dem.
avg_value(1, 3)
2
Definiera nya funktioner¶
Funktioner i Python¶
Definition av dubbleringsfunktionen med mer bekant notation.
- Det beräknade uttrycket är det som funktionen returnerar.
- $f(x) = 2x$
I Python:
Syntax för en funktionsdefinitionssats¶
def funktionsnamn(parameter1, parameter2, ..., parameterN):
sats1
sats2
sats3
...
- Exempel på en sammansatt sats.
- Nyckelordet
def
följt av namnet på den funktion man definierar (skapar) och en sekvens av parametrar inom parenteser och slutligen ett:
.- När funktionen anropas binds argumententen till parametrarna.
- Vi kan tänka att parametrarna tilldelas värdena av argumenten och det är parameternamnen vi använder för att komma åt dessa värden inne i funktionen.
- Raderna efter
:
-tecknet är indenterade, dvs. indragna, med 4 mellanslag och utgör ett block. - Detta block kallas också funktionens kropp (eng. body).
- Kroppen slutar på den sista raden innan vi återvänder till samma indenteringsdjup som
def
eller filen tar slut.
- Kroppen slutar på den sista raden innan vi återvänder till samma indenteringsdjup som
Definiera och kör (anropa) en funktion i Python¶
- Med nyckelorden
def
ochreturn
samt skiljetecknet:
kan vi definiera funktionen $f(x) = 2x$ i Python. - En funktion anropas genom att skriva funktionens namn följt av ett parentespar. Eventuella argument skrivs inom parenteserna.
- När funktionen anropas returnerar den värdet som fås när uttrycket
2 * x
beräknas.
# f(x) = 2x
# definierad i Python
def f(x):
return 2 * x
# anropa funktionen, spara returvärdet i variabeln
# resultat
resultat = f(10)
Nyckelord och betydelsebärande tecken¶
- Vissa ord har speciell betydelse i Python, t.ex.
def
return
- Korrekt användning av nyckelord ger oss en sats.
- Vissa tecken används på samma sätt som skiljetecken i naturligt språk. Exempel:
- nyckelord som påbörjar ett block har ett
:
innan första raden på det nya blocket - tecknet
#
påbörjar en kommentar, resten av raden ses inte som Pythonkod
- nyckelord som påbörjar ett block har ett
Funktioner utan returvärden?¶
- I Python måste alla funktioner returnera något.
- Måste man ha en
return
-sats? - Om funktionen avslutas utan en explicit
return
-sats så kommer Python automatiskt se till att funktionen returnerarNone
None
är det värde som vi använder i Python för att beteckna "inget värde"
Inbyggda funktionen print()
¶
- Skriver ut värden till terminalen
- Returnerar inget, dvs returnerar värdet
None
print("Hej")
x = 56
namn = "Beata"
print(namn)
print(x + 487)
Hej Beata 543
Mer om strängar¶
Osynliga tecken¶
- Vissa tecken är "osynliga", t.ex. tab och radbrytningar
- För att skriva dem används följande teckenkombinationer
- tabtecken:
"\t"
- radbrytning:
"\n"
- tabtecken:
Varje tecken i en sträng har ett index¶
- Index är heltal.
- Numreringen börjar på 0
- Tänk att vi börjar på "nollte" position och läser ett tecken framåt för att få ut första tecknet, osv.
- Strängen
"hejsan"
:
h |
e |
j |
s |
a |
n |
---|---|---|---|---|---|
0 |
1 |
2 |
3 |
4 |
5 |
Åtkomst av tecken på en viss position i en sträng¶
- Vi kan använda följande notation för att komma åt ett tecken på en viss position i en sträng
my_string[index]
my_string[0]
är det första tecknet i variabeln my_string.- Negativa index kan användas för att titta "bakifrån"
my_string[-1]
ger det sista tecknet i variabelnmy_string
Längden på en sträng¶
- För att ta reda på hur många tecken en sträng innehåller kan funktionen
len()
användas. - Exempel
namn = "Alfred"
# tilldela variabeln namnlängd värdet som len(namn)
# returnerar
namnlängd = len(namn)
# skriv ut värdet i variabeln namnlängd
print(namnlängd)
6
Delsträngar¶
my_string[start:end]
från indexstart
, inkludera tecknen på alla index mindre änend
my_string[:end]
från första tecknet, inkludera tecknen på alla index mindre änend
my_string[start:]
alla tecken från indexstart
till slutet av strängen
h |
e |
j |
s |
a |
n |
---|---|---|---|---|---|
0 |
1 |
2 |
3 |
4 |
5 |
my_string = "hejsan"
my_string[1:4]
'ejs'
Ett värde som en sträng¶
- Vi kan använda funktionen str() för att få en strängrepresentation av vilket värde som helst.
- Exempel:
3+3
6
str(3) + str(3)
'33'
str(True)
'True'
Mer om listor¶
Datatypen list¶
- Används för att lagra en sekvens av värden (element i listan).
- Listor är också värden, dvs en lista kan innehålla listor (som i sin tur kan innehålla listor osv)
- Syntax:
studenter = ["Ada", "Bertil", "Cecilia"]
- Det går bra att blanda datatyper i en lista:
diverse = [5, 3.0, "rosa", [100, 200, 300]]
- Precis som med strängar använder vi index för att komma åt ett värde på en viss position.
- Index för listor börjar också på 0
Del-listor¶
- Vi kan även plocka fram delar av en lista
my_list[start:end]
från indexstart
, inkludera alla värden med index mindre änend
my_list[:end]
från början, inkludera alla värden med index mindre änend
my_list[start:]
från indexstart
till slutet av listan
'h' |
'e' |
'j' |
's' |
'a' |
'n' |
---|---|---|---|---|---|
0 |
1 |
2 |
3 |
4 |
5 |
my_list = ['h', 'e', 'j', 's', 'a', 'n']
my_list[1:4]
['e', 'j', 's']
Operatorer som kan användas med listor¶
- Operatorn
+
kan användas för att slå ihop två listor till en ny lista. Ordningen spelar roll!
frukter1 = ["äpple", "päron"]
frukter2 = ["apelsin", "banan"]
alla_frukter1 = frukter1 + frukter2
alla_frukter2 = frukter2 + frukter1
print(alla_frukter1)
['äpple', 'päron', 'apelsin', 'banan']
print(alla_frukter2)
['apelsin', 'banan', 'äpple', 'päron']
Ändra på ett värde i en lista¶
- Vi kan ändra värdet på en viss position i en lista med en tilldelningssats:
values = [1, 2, 3, 4]
print(values)
[1, 2, 3, 4]
# ändra värde på index 2
values[2] = "hoppsan"
print(values)
[1, 2, 'hoppsan', 4]
Lägga till nytt värde till slutet på en lista¶
frukter = ["apelsin"]
print(frukter)
['apelsin']
frukter = frukter + ["banan"]
print(frukter)
['apelsin', 'banan']
Lägga till nytt värde till början på en lista¶
frukter = ["apelsin"]
print(frukter)
['apelsin']
frukter = ["banan"] + frukter
print(frukter)
['banan', 'apelsin']
Metoden list.append()¶
- Användning av operatorn
+
med listor ändrar inte på operanderna- nedanstående uttryck kommer beräknas, men resultatet sparas inte
characters1 = ["a", "b", "c"]
characters1 + ["d"]
print(characters1)
['a', 'b', 'c']
- Metoder är ett slags funktioner som man hänger på ett objekt med hjälp av punktnotation
- Mer om metoder i Tema 4-6
- Metoden
list.append(value)
lägger till value till en lista
tcharacters1.append("d")
print(characters1)t
['a', 'b', 'c', 'd']
Moduler¶
Moduler¶
- Specialiserade funktioner m.m. kan göras tillgängliga t.ex. genom att importera moduler i sin Python-kod.
- Varje fil med Python-kod kan användas som en modul.
- Det finns ett antal moduler som ingår i Pythons så kallade standardbibliotek (Python Standard Library).
- Moduler i standardbiblioteket finns alltid tillgängliga i alla Python-installationer utan att behöva installera något extra.
Moduler¶
- Tillhandahåller ytterligare funktionalitet, t.ex. funktioner för speciella tillämpningar
- Exempel på moduler som följer med Python
random
: har t.ex. funktioner som returnerar slumpvärdensys
: funktioner m.m. som har med systemet att göra (lägre abstraktionsnivå)os
: funktioner m.m. som har med operativsystemet att göra (högre abstraktionsnivå)
Import av modul och exempel på användning¶
- För att få tillgång till en modul behöver den importeras med en import-sats, som oftast inleds med nyckelordet
import
. - Standard är att lägga alla importsatser i början av textfilen.
import random
# funktionen random() i modulen random returnerar ett slumpmässigt
# flyttal mellan 0.0 och 1.0
slumpvärde1 = random.random()
print(slumpvärde1)
0.11297619324484309
# funktionen randint(heltal1, heltal2) i modulen random returnerar ett
# slumpmässigt heltal från heltal1 till och med heltal2.
slumpvärde2 = random.randint(10, 90)
print(slumpvärde2)
72
Import, namnrymder, punktnotation¶
import random
- Ovanstående laddar in innehållet i modulen
random
och ser till att det hamnar i namnrymdenrandom
- Funktionen
randint(heltal1, heltal2)
i modulenrandom
kommer man då åt genom att skriva
random.randint(heltal1, heltal2)
# import-exempel 1
import random
list_of_names = ["Ada", "Bea", "Cecilia", "Dolores"]
def random_greeting1(names):
# random.choice() väljer ut ett slumpmässigt element från
# en sekvens
name = random.choice(names)
print("Hello " + name + "!")
def random_greeting2(names):
# random.randint() slumpar fram ett heltal från ett slutet
# intervall
random_index = random.randint(0, len(names)-1)
print("Hello " + names[random_index] + "!")
random_greeting1(list_of_names)
Hello Ada!
random_greeting2(list_of_names)
Hello Cecilia!
#import-exempel 2
from random import *
list_of_names = ["Ada", "Bea", "Cecilia", "Dolores"]
def random_greeting1(names):
# choice() från modulen random väljer ut ett slumpmässigt
# element från en sekvens
name = choice(names)
print("Hello " + name + "!")
def random_greeting2(names):
# randint() från modulen random slumpar fram ett heltal från
# ett slutet intervall
random_index = randint(0, len(names)-1)
print("Hello " + names[random_index] + "!")
random_greeting1(list_of_names)
Hello Ada!
random_greeting2(list_of_names)
Hello Cecilia!