729G46 Informationsteknologi och programmering¶

Tema 1, Föreläsning 1.1-1.2¶

Johan Falkenjack, johan.falkenjack@liu.se¶

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)
    • https://www.ida.liu.se/~729G46/
  • 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å
    • https://studieinfo.liu.se/
  • 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!
    • https://www.ida.liu.se/~729G46/examination
  • 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:de 8: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
  • Missad redovisning kompletteras
    • via redovisning på handlett laborationspass (i mån av tid + efter överrenskommelse med assistent)
    • via screencast som lämnas in via Lisam

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

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)

Alla på LiTH och några till läser programmering¶

  • 729G46 Informationsteknologi och Programmering, 12 hp (Kognitionsvetenskap)
    • Python
  • TDDE23/24 Funktionell och imperativ programmering, 11 hp (D, U)
    • Python
  • TDDC77 Objektorienterad programmering, 8 hp (IT)
    • Java
  • TDDE67 Programmering, grundkurs, 8 hp (I)
    • Ada
  • 725G92 Problemlösning och programmering, 7.5 hp (Systemvetenskap)
    • Ada och Python
  • 732G33 Programmering i R, 7.5 hp (Statistik)
    • R
  • TDDE54 Programmering och problemlösning, 6 hp (M, TB, KB, EMM, KA, MI)
    • Ada och Python
  • TDP002 Imperativ programmering, 6 hp (IP)
    • Python
  • TND012 Programmering grk, 6 hp (ED, KTS, MT)
    • C++
  • TDIU08 Problemlösning och programmering, 6 hp (Di, Ei)
    • Ada och Python

but_why.gif

  • utföra experiment
  • bearbeta data
  • bygga mjukvara
  • skapa prototyper
  • som en problemlösningsmetod

Hur lär man sig programmera?¶

pexels-yan-krukau-8837774_downsized.jpg

  • Genom att programmera.
  • Konstruktivism, nidbilden, misstagen, och varför jag trots allt är konstruktivist.
  • Experimentera, testa, våga göra fel.
  • Man måste öva, öva, öva.

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. "

- Encyclopædia Britannica

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"?

human_computers.jpg

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.


(Ändlig tid kan dock fortfarande vara miljontals gånger universums ålder. Dvs något opraktiskt lång tid att vänta. Mer om det i Tema 4.)

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.


(Vad man hinner med i "rimlig tid" har ökat mer eller mindre exponentiellt sedan WWII.)

Hur skriver man instruktioner?


eller


Hur programmerar man?

ENIAC¶

eniac-marlyn-wescoff-and-ruth-lichterman2.webp

Programmerarna Marlyn Wescoff och Ruth Lichterman implementerar ett program på ENIAC (sannolikt för någon form av ballistisk beräkning).

  • Vi har konstaterat att datorer är maskiner. Elektroniska datorer uttrycker i grunden bara ett elektriskt flöde. På tidiga datorer som Eniac var detta extremt tydligt.
  • I ENIAC uttrycktes programmen som hundratals telefonväxelkablar, ställdon, och brytare som tillsammans lät strömmen flöda genom maskinen enligt ett visst mönster.
  • Själva datan lästes in via hålkort.
  • ENIAC var Turing-komplett. Dvs bortsett från det oändliga lagringsutrymmet kunde ENIAC beräkna allt som Turing-maskinen kunde.

1945: John von Neumann och den fundamentala datorarkitekturen¶

von_neumann_hat.png

  • John von Neumann tyckte dock att ENIACs approach var väldigt omständig.
  • Programmering via kabel var omständigt, tidskrävande, och besvärligt att felsöka.
  • Alan Turing hade ju visat med sin Universella Maskin att även instruktionerna kunde skrivas på bandet.
  • Om datan representerades av hålkort där sekvenser av hål representerade 1:or och 0:or, så borde program kunna representeras på samma sätt.

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
  • von Neumann refererade till Alan Turing och menade att hans arkitektur bara var en realisering av vad Turing uppfunnit iom den Universella Turing-maskinen
  • Kallas mer generellt för Stored-Program Computer och är det vi normalt sett menar när vi pratar om datorer idag

Binär maskinkod, vår första abstraktion i kod

  • Består av långa sekvenser av 1:or och 0: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
  • 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 heltalet 10, b för 11, osv. upp till f för 15
    • Exemplet ovan blir då b8, 00, b8, 8e, d8, c6, 06, 9e, 0f, 24, cd, 20
  • Resultat på en dator med MS-DOS på Intel 8086-hårdvara: Ett dollartecken i nedersta högra hörnet på skärmen.
  • Vi säger att maskinkod är en abstraktion av den underliggande hårdvaran.
  • Vi behöver inte längre tänka på elektroniska komponenter, vi har abstraherat bort det.

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
  • Språket är strikt bundet till en viss typ av hårdvara.

  • Inte särskilt uttrycksfullt. Vi kan hämta bit-sekvenser från minnet, placera dem i register, och utföra enkla matematiska och logiska operationer på dem.

  • Allt annat än lättläst

  • Det är ungefär allt. Vill vi göra något mer avancerat måste vi skriva väldigt många operationer.

  • Eller så bygger vi något i maskinkod som, givet vissa inputs, generera annan maskinkod.

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)
  • Samma program som ovan, fast i Assembly-kod
  • Olika assemblatorer kan vara implementerade för olika hårdvaror, men deras assembly-kod kan se likadan ut.
  • Dvs. vi kan, med vissa begränsningar, assemblera samma assembly-kod till maskinkod för olika hårdvaror.
  • Vi har abstraherat bort maskinkoden, och i någon utsträckning, beroendet av viss hårdvara.
  • Mer läsbart, men fortfarande inte så uttrycksfullt.

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.
  • Kan efter kompilering köras direkt och oberoende av kompilatorn.
  • Tillåter eller kräver ofta manuell hantering av hårdvaruresurser som t.ex. minne och man behöver ofta vara väldigt detaljerad för att kompilatorn ska producera optimal maskinkod.
  • Kompilering av stora projekt kan ta lång tid och efter kompilering är man åter bunden till viss hårdvara.
  • Kan dock ge mycket snabb kod.
  • Enormt mycket mer uttrycksfullt.

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.
  • Kräver alltid att interpretatorn för det aktuella språket är installerad för att programmet ska gå att köra.
  • Kan köras på alla plattformar till vilka det finns en interpretator.
  • Ofta en eller flera storleksordningar långsammare att köra än kompilerad kod.
  • Dock oftast mycket snabbare att skriva och testa.
  • Perfekt för att lära sig programmera.

Abstraktionshierarki


Interpreterade högnivåspråk
↑
Kompilerade högnivåspråk
 
↑
Assemblykod
↑
Maskinkod
↑
Elektroniska kretsar

Vilket programmeringsspråk är bäst?

programming_languages.png

  • Vilket snickarverktyg är bäst, en såg eller en hammare?
  • Till skillnad från snickare så brukar programmerare ha ett svar.
    • De har dock nästan alltid fel (om man frågar ett slumpmässigt urval av andra programmerare).

  • Det finns fall där en viss typ av språk definitivt är bäst, men det beror på vad programmet ska göra.
  • Program i verkligheten är ofta byggda i flera olika språk där varje språk används för det som det är bäst på.

Fråga som faktiskt kan besvaras:


Vilket programmeringsspråk är sämst?



(JavaScript)
  • För att jämföra med snickar-exemplet:
  • Du tror att du använder en hammare och slår i en spik men när du är klar inser du att du istället sågat av dig ena benet.

Python-Logo.png

Kort om Python

guido.jpg
  • 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.
  • Varför Python i den här kursen?
  • Populärt som nybörjarspråk
    • Alltså finns väldigt mycket resurser på grundläggande nivå
  • Finns till flera plattformar, även inbäddade system, och används i produktion inom många områden
    • Alltså finns väldigt mycket resurser från verkligheten

    • Snabbt och enkelt att testa

  • Stöd för flera olika programmeringsparadigm
    • Möjlighet att demonstrera olika koncept inom programmering

LiUs GNU/Linux-miljö


eller

Vad i hela fridens namn, jag har ju knappt använt en dator med tangentbord förut?!

Operativsystem¶

operating-system-logos1.jpg

  • Mest fundamentala mjukvaran på en dator.
  • Ger andra mjukvaror en miljö att verka i utan behöva arbeta direkt mot hårdvara.
  • Filsystem.
  • Nätverk.
  • Ytterligare ett sätt att abstrahera bort onödig komplexitet.

It's a UNIX System!¶

unix_system.gif

  • Lex Murphy tittar på 3D-animerad filnavigering och hackar en hel nöjesparks säkerhetssystem på under 30 sekunder.
  • Tekniskt sett helt korrekt. Det här systemet fanns faktiskt. Silicon Graphics 3D File System Navigator
  • Inte på något sätt typiskt för hur UNIX eller en UNIX-liknande miljö brukar se ut, varken då eller nu.

Hur brukar det se ut?

  • Demonstrera inloggning via ThinLinc.

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
    • https://liuonline.sharepoint.com/sites/student-under-studietiden/SitePages/Fjarrinloggning.aspx
    • https://www.ida.liu.se/~TDDE44/distans/thinlinc/
    • https://www.ida.liu.se/~TDDE44/distans/rdp/

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.
  • Gränssnitt
    • Hårdvarugränssnitt, fysiska anslutningar mellan apparater, t.ex. USB, SATA, XLR, etc.
    • Nätverksgränssnitt, mellan apparat och nätverk, t.ex. Ethernet, WiFi, Fiber, etc.
    • Mjukvarugränssnitt, mellan olika program och/eller hårdvaror, t.ex. operativsystem, drivrutiner, API:er.
  • Ofta pratar vi om användargränssnitt, där det ena systemet är en människa och det andra är ett tekniskt system som hen använder, t.ex. en mjukvara.

Kommandoradsgränssnitt (CLI - Command Line Interface)¶

bash_shell.png

  • Syfte: miljö för att utveckla och köra egna program
  • Enklare (färre rörliga delar) än ett grafiskt gränssnitt:
    • Output: text (en rad/tecken i taget)
    • Input: textkommandon
  • Kraftfullt, nästan ett programmeringsspråk i sig.
  • Jämfört med grafiskt gränssnitt:
    • Output: fönster med olika interaktiva grafiska komponenter
    • Input: musposition, musklick, tangenttryckningar, objekt som dras och släpps m.m

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
  • Alla är delar av ett Kommandoradsgränssnitt
  • Skalet/skalprogrammet (eng. shell)
    • Exempel, Unix/Linux: sh (Thompson, senare Bourne, Shell), bash (Bourne Again), csh (C), ksh (Korn), tcsh (TENEX C), zsh, scsh (Scheme), dash (Debian Almquist), fish (kolla in https://fishshell.com/)
    • Exempel, Windows: COMMAND.COM, CMD.EXE, PowerShell

fish_shell.png

Var är vi?

travolta_lost.gif

  • I skalet, t.ex. i bash, så befinner vi oss alltid någonstans i filsystemet och kommandon som körs, körs alltid i katalogen vi står i. Kallas för arbetskatalog.
  • Om vi t.ex. kör ett kommando som skapar en fil, så skapas den i katalogen vi står i. Samma om vi sedan kör ett kommando för att ta bort en fil med samma namn.
  • Ett filsystem är hur data är organiserad på någon typ av media för långtidslagring, t.ex. en hårddisk, ett USB-minne, eller, på den gamla onda tiden, en diskett.

Katalogstruktur i UNIX-liknande system¶

file_system.png

  • Katalog == Directory
    • /var är förälder parent directory till /var/tmp
    • /var/tmp är underkatalog subdirectory till /var
  • Självklart finns många, många fler kataloger.
  • Filträd - hierarkisk struktur
  • Jämför med mappar i Windows, macOS, eller Google Drive.

Jaja, men var är vi nu?


Svar: ~


Symbolen `~` utläses som "tilde" och är ett alias till den inloggade användarens hemkatalog. Den "riktiga" sökvägen till en användares hemkatalog är `/home/användarnamn`
  • Bash startar "by default" alltid i hemkatalogen om man inte angett något annat.

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
  • Notera skillnaden mellan ~/Downloads och ~adalo256

  • Hemkatalogen

    • Dokument
    • Inställningar
    • Program som bara du ska ha tillgång till

Absoluta sökvägar¶

filsystemets_tradstruktur.png

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¶

filsystemets_tradstruktur.png

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?

  1. 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.
  2. Kommandot pwd : print working directory
    • Skriver ut sökvägen i terminalen.

Kommandot cd : change directory

  • Flytta till en annan katalog, en sökväg skickas med som argument till kommandot.
  • Exempelvis:
    • cd / : flytta till rotkatalogen
    • cd .. : flytta till föräldrakatalogen
    • cd - : flytta tillbaka till den senaste katalogen vi var i
    • cd katalognamn : flytta till underkatalog till arbetskatalogen med namnet katalognamn (ger fel om den katalogen inte finns)
    • cd : specialfall som flyttar till hemkatalogen

Delar av ett kommando¶

delar_av_ett_kommando_ls.png

option = flaggor/växlar (olika för olika kommandon), t.ex. -l för kommandot ls

Delar av ett kommando¶

delar_av_ett_kommando_cp.png

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 terminalen
    • cd: byter katalog (arbetskatalog - katalogen man "står i")
  • Externa
    • ls: visar innehåll i katalog
    • mv: flytta/döp om fil eller katalog
    • mkdir: skapa katalog
    • cat: skriv ut innehåll i fil
    • touch: skapa ny fil/uppdatera senast ändrad hos existerande fil
    • man: visa hjälptext för kommandon
  • Interna kommandon
    • Inbyggda i skalet
    • Körs direkt
  • Externa kommandon
    • Separata program
    • Skalet måste leta upp dem
    • Kan läggas till
    • Vi kan göra egna
  • Inte alltid självklart vilka som interna och vilka som är externa, och ibland finns flera med samma namn.

Kan det finnas flera kommandon med samma namn?!¶

what the fudge

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 kommandot ls.
  • Kommandot ls är alltså ett program lagrad i filen ls i katalogen /bin.
  • För interna kommandon eller kommandon som inte finns kommer which inte ge något svar.
  • Unix har ganska smarta namn på sina standardkommandon.

Kommandot python3¶

  1. Interaktiv användning: $ python3

  1. Skriv och kör ett skript: $ python3 filnamn
  • Side note: Vi skriver python3 för att på LiUs system så finns fortfarande en del gamla grejer som förutsätter att python pekar på Python 2.x. Så därför kör kommandot python en äldre version

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 exitutan några argument

Skriv och kör ett skript¶

  1. Starta en text-editor (t.ex. VSCode)
  2. Skriv kod och spara i en fil med exempelvis namnet hello.py.
  3. 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.

Äntligen, dags för Python!¶

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.

Enkla satser¶

enkel sats (simple statement): fullständig instruktion (motsvarar en "mening")¶

In [11]:
1
Out[11]:
1
  • En enkel sats motsvarar "en mening", dvs minsta beståndsdelen i programmeringsspråk som har betydelse.
  • Ett program består av en eller flera satser.
  • Felskriven sats → syntaxfel
  • Exempel på satser:
    • uttryck
    • tilldelningssats
    • korrekt användning av nyckelord

Värden¶

värde (value): t.ex. t.ex. ett tal eller text¶

  • I Python är alla värden objekt.
  • Alla objekt har en klass som beskriver vilken typ av värde det innehåller och hur det kan användas.
  • Mer om att skapa egna klasser under andra halvan av kursen, nu använder vi bara Pythons inbyggda klasser.

  • I många andra programmeringsspråk skiljer man på datatyp och klass men i Python är de samma sak.
In [15]:
[1, 2]
Out[15]:
[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 och int
In [ ]:
 
  • Flyttal skrivs i Python med decimalpunkt. Exempel: 1.0, 3.1415, -4.5
  • Heltal skrivs som vanligt. Exempel: 1, -10, 6000
  • Både flyttal och heltal kan vara antingen positiva eller negativa i Python.

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.
In [17]:
["hej", 1]
Out[17]:
['hej', 1]
  • Både dubbla och enkla citationstecken kan användas, i en sträng startad med dubbla ciationstecken kan man använda enkla citationstecken utan att strängen slutar, och vice versa.
    • "Ada Lovelace anses vara den första programmeraren.", 'Barbara Liskov uppfann abstrakta datatyper.', "Rina Dechter hittade på termen 'deep learning'", 'Grace Hoppper hittade på termen "kompilator"'

Operatorer¶

operator (operator): token/symbol som står för en instruktion¶

Operatorer, operationer, operander?¶

  • Operatorer beskriver någon form av operation, dvs något som skall utföras.
  • En operator opererar på en eller flera operander, dvs det som något ska utföras med eller på.

  • Antalet operander som en viss operator opererar på kallas för dess aritet (eng. arity) eller ställighet, de operatorer vi är vana vid tar oftast 1 eller 2 operander, dvs har en aritet på 1 eller 2.

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)
In [23]:
1%3
Out[23]:
1

Matematiska operatorer¶

In [ ]:
 
In [3]:
print(10 + 3)
print(10 - 3)
print(10 * 3)
print(10 / 3)
10 ** 3
10 // 3
10 % 3
13
7
30
3.3333333333333335

Operatorer och operander som inte är tal¶

In [29]:
1.0+1
Out[29]:
2.0
  • Många operatorer kan användas för annat än bara matematiska operationer.
  • Operandernas klass avgör vilken operation som utförs, finns ingen giltig operation får vi ett fel
  • Exempelvis kan operatorn + användas för att konkatenera, dvs sammanfoga, strängar eller listor:
    • "hej" + "san"
    • "hej" * 2
    • "2" + 2

Uttryck¶

uttryck (expression): ett uttryck kan beräknas till ett värde (ibland säger man även utvärderas eller evalueras istället för beräknas)¶

In [ ]:
1+1
  • Allt som kan beräknas till ett värde är ett uttryck.
  • Exempel
    • användning av operatorer; 5 + 3
    • funktionsanrop; len("hejsan")
  • Varje uttryck kan stå som en självständig sats.
  • MEN, alla satser är inte uttryck

Variabler¶

variabel (variable): namngiven referens till ett värde¶

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.
In [35]:
hej = 1

hej = 3

hej = [1, 2]

hej
Out[35]:
[1, 2]
  • Exempel
    • x = 5
  • Värdet i högerledet tilldelas till variabeln i vänsterledet.
  • Om högerledet är ett uttryck beräknas det innan tilldelningen kan ske
    • x = 7 + 9
    • voltage = 5 * (3 + 6)

Lämpliga variabelnamn¶

  • I Python använder vi substantivlika namn på variabler
    • t.ex. value, filename, player, age
  • 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
  • SHODDY VARNAMES-anekdot

Ä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.
    • +=, -=, *=, /=,

Block¶

block (block): en del av ett program som kan betraktas som en enhet¶

indentation_yes_but_no.jpg

  • Block existerar på flera nivåer och block kan innehålla andra block i flera nivåer.
  • En fil med python-kod är ett block på en relativt hög abstraktionsnivå.
  • Block avgränsas med indentering, dvs inskjutning eller indrag av texten (i Python använder vi alltid 4 mellanslag för varje nivå av indentering som definierar ett block).
  • Alla andra block är de som tillhör olika sammansatta satser.

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.
  • Nödvändig byggsten för allt annat än mycket enkla program.
  • Ibland existerar flera klausuler, t.ex. i villkorssatser, mer om det i föreläsning 2.

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
  • Inbyggda funktioner kontra egendefinierade funktioner

Funktioner som skapar objekt kan användas för typomvandling¶

  • T.ex. mellan olika typer av tal:
In [42]:
round(2/3)
Out[42]:
1
float(5) # Funktionen `float()` omvandlar värden till flyttal
int(3.1415) #Flyttal kan omvandlas till ett heltal genom att använda funktionen `int()`. Vid omvandlingen trunkeras alla decimaler på samma sätt som vid heltalsdivision.
int(3.9)
round(3.9) # Vill man ha avrundning används funktionen `round()`, som också kan ta emot ett andra argument för antal decimaler.
round(3.1415, 2)

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.
  • Jämför med operatorer och deras operander.

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.)
  • När vi använder en funktion behöver vi inte veta koden inuti ser ut.

Funktion som returnerar ett värde¶

return_hello.drawio.png

Funktionen return_hello tar inga argument och returnerar alltid strängen "hello".

In [9]:
return_hello()
Out[9]:
'hello'

Funktion som tar ett argument och returnerar ett värde¶

double_value.drawio.png

Funktionen double_value tar ett värde och returnerar det dubbla.

In [35]:
double_value(2)
Out[35]:
4

Funktion som tar två argument och returnerar ett värde¶

avg_value.drawio.png

Funktionen avg_value tar två värden och returnerar genomsnittet av dem.

In [54]:
avg_value(1, 3)
Out[54]:
2

Definiera nya funktioner¶

  • Vi definierar (skapar) egna funktioner för att
    • använda samma kod flera gånger
    • dela upp ett problem i mindre delproblem
    • göra kod lättare att läsa
  • Namngivning av funktioner
    • använd namn som beskriver vad de gör
    • använd verb-liknande namn
    • Exempel: calculate_average, get_number_of_votes

Funktioner i Python¶

  • Definition av dubbleringsfunktionen med mer bekant notation.

    • Det beräknade uttrycket är det som funktionen returnerar.
    • $f(x) = 2x$
  • I Python:

In [ ]:
 
  • Sammansatt sats, def inleder huvudraden
  • Nyckelordet return instruerar pythontolken att ett värde ska returneras.
  • Raden som börjar med return är en retursats.
def f(x):
    return 2 * x

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.

Definiera och kör (anropa) en funktion i Python¶

  • Med nyckelorden def och return 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.
In [57]:
# 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

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 returnerar None
  • 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
In [58]:
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"

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 variabeln my_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
In [63]:
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 index start, inkludera tecknen på alla index mindre än end
  • my_string[:end] från första tecknet, inkludera tecknen på alla index mindre än end
  • my_string[start:] alla tecken från index start till slutet av strängen
h e j s a n
0 1 2 3 4 5
In [66]:
my_string = "hejsan"
my_string[1:4]
Out[66]:
'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:
In [1]:
3+3
Out[1]:
6
In [2]:
str(3) + str(3)
Out[2]:
'33'
In [69]:
str(True)
Out[69]:
'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 index start, inkludera alla värden med index mindre än end
  • my_list[:end] från början, inkludera alla värden med index mindre än end
  • my_list[start:] från index start till slutet av listan
'h' 'e' 'j' 's' 'a' 'n'
0 1 2 3 4 5
In [3]:
my_list = ['h', 'e', 'j', 's', 'a', 'n']
my_list[1:4]
Out[3]:
['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!
In [4]:
frukter1 = ["äpple", "päron"]
frukter2 = ["apelsin", "banan"]
alla_frukter1 = frukter1 + frukter2
alla_frukter2 = frukter2 + frukter1
In [5]:
print(alla_frukter1)
['äpple', 'päron', 'apelsin', 'banan']
In [6]:
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:
In [7]:
values = [1, 2, 3, 4]
print(values)
[1, 2, 3, 4]
In [9]:
# ä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¶

In [10]:
frukter = ["apelsin"]
print(frukter)
['apelsin']
In [11]:
frukter = frukter + ["banan"]
print(frukter)
['apelsin', 'banan']

Lägga till nytt värde till början på en lista¶

In [12]:
frukter = ["apelsin"]
print(frukter)
['apelsin']
In [13]:
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
In [15]:
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
In [16]:
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ärden
    • sys: 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.
In [17]:
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
In [18]:
# 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 namnrymden random
  • Funktionen randint(heltal1, heltal2) i modulen random kommer man då åt genom att skriva
random.randint(heltal1, heltal2)
In [19]:
# 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] + "!")
In [46]:
random_greeting1(list_of_names)
Hello Ada!
In [49]:
random_greeting2(list_of_names)
Hello Cecilia!
In [50]:
#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] + "!")
In [46]:
random_greeting1(list_of_names)
Hello Ada!
In [49]:
random_greeting2(list_of_names)
Hello Cecilia!
In [ ]: