• No results found

TDDE44 Programmering, grundkurs

N/A
N/A
Protected

Academic year: 2022

Share "TDDE44 Programmering, grundkurs"

Copied!
127
0
0

Loading.... (view fulltext now)

Full text

(1)

TDDE44 Programmering, grundkurs

Föreläsning 1.1-1.2

Jody Foo, jody.foo@liu.se

(2)

Föreläsningsöversikt

⁃ Vad ingår i "Programmering, grundkurs"?

⁃ Kursöversikt

⁃ Datorer, program, programmeringsspråk

⁃ Beståndsdelar i ett program

⁃ Sekvensdatatyper: str och list

⁃ Komma åt funktionalitet via moduler

⁃ Skript - körbara textfiler

(3)

Grundkurs i programmering

(4)

Kursens syfte

⁃ Tredje gången kursen går.

Övergripande mål för denna kurs: se till att ni kan använda programmering som ett verktyg

(5)

Kursplan

använda aktuella datorsystem för laborativ verksamhet

redogöra för grundläggande begrepp relaterade till datavetenskap, programmering och programspråk

lösa programmeringsrelaterade problem metodiskt med hjälp av ett interaktivt arbetssätt med implementering, testning och

felsökning

konstruera abstraktioner med varierande grad av stöd i det underliggande programmeringsspråket

lösa programmeringsproblem genom att bryta ner det i delproblem

konstruera rekursiva och iterativa algoritmer

(6)

Digitala kontaktytor

Kurshemsida


https://www.ida.liu.se/~TDDE44/

Webreg (anmälan till grupper)


https://www.ida.liu.se/webreg3/TDDE44-2021-1/LAB1

Kursrum på Lisam (inlämningar)


https://liuonline.sharepoint.com/sites/Lisam_TDDE44_2021VT_NL

Kursteam i Microsoft Teams

Klassteam i Microsoft Teams

(7)

Kurslitteratur

⁃ Ingen obligatorisk kurslitteratur

⁃ Litteraturtips finns på föreläsningssidan på kurswebben

Bok på svenska: Skansholm. (2019). Python från början.

Studentlitteratur.

(8)

Personal

Examinator/Kursledare Jody Foo

Övriga lärare

Annika Silvervarg

Assistenter

Y1.a: Rasmus Jonsson & David Ångström Y1.b: Robin Keskisärkkä & Eric Ekström Y1.c: Dag Jönsson & Alexander Löfstrand

MED1: Hugo Hörnquist, Gustav Sörnäs & Emma Witt MAT1 + Yi1: Rosanna Isaksson & Liam Hawtin

Kursadministratör Sanna Karlsson

(9)

Återkoppling från förra året

150 studenter, 29 svar via Evaliuate. Utvärderingar från Y-sektionen och MatNat.

Helhetsbetyg från Evaliuate: 4,31

Överlag har kursen fungerat bra.

Upplägg för distanshandledning har fungerat bra

Lagom nivå i stort, men upplevd svårighetsgrad varierar

En svagare punkt var att redovisningarna kändes stressade (lite tid)

Åtgärd till i år: checklistor över vad som ska gås igenom

Fler avancerade exempel på rekursion önskades och kommer att finnas med i år.

Lite förvirrande i början med logistik kring redovisningstillfällena

(10)

Kursupplägg

Period 1

Grundläggande konstruktioner: inbyggda datatyper, loopar, funktioner Hur man testar program, delar upp ett program i funktioner

LAB1. U/G. 3hp. Laboration 1-4

Period 2

Introduktion till objektorienterad programmering LAB2. U/G. 3hp. Laboration 5-7

Datorsalstenta

DAT1. U/3/4/5. 2hp.

3 juni kl. 14-18: Ej klart om tentan kommer gå på distans eller på Campus

(11)

Kursupplägg

(12)

Laborationer

Period 1 (provkod LAB1)

Laboration 1-4

Förberedande lektion

Redovisning + inlämning

Period 2 (provkod LAB2)

Laboration 5-7

Förberedande lektion

Redovisning + inlämning

Anmäl er till en pargrupp för LAB2 i webreg. Samma pargrupper som för LAB1

(13)

Laborationer

Mer tid än de schemalagda tillfällen behöver läggas på uppgifterna.

Vissa moment behöver göras på i IDAs datormiljö:

Laboration 1

Automaträttade Pythonuppgifter 1-3

Övriga moment kan göras på egen dator

Rekommendation att installera Python och Visual Studio Code på egen dator för bättre samarbetesmöjligheter.

Tillägget Live Share: redigering filer samtidigt + dela terminal från Visual Studio Code

(14)

Komma åt datormiljön hemmifrån

⁃ Laboration 1 och Pythonuppgifter 1-3 behöver göras från IDAs datormiljö.

⁃ Ni kan ansluta till datormiljön genom att logga in via ThinLinc.

⁃ Ni kan också logga in på en dator i Linux-sal hemmifrån via RDP.

⁃ Salsbokningar (SU-salar) finns kvar för labbpass för att kunna använda logga in via RDP om ThinLinc blir

överbelastat.

(15)

Datorsalar på IDA

Datorsalarna finns i B-huset

SU00-SU04 på nedervåningen SU10-17

I normalläge:

fritt att använda om det finns plats

om det är bokat av annan kurs, kan ni dock bli ombedda att gå vid platsbrist/genomgång

Idag, pandemiläge 4

ni har tillträde

max 8 personer i samma utrymme mer information kommer

(16)
(17)
(18)

ThinLinc

Din dator

thinlinc.edu.liu.se

ThinLinc-server 1

ThinLinc-server 2

ThinLinc-server N

(19)

RDP

SU00

SU00 01

SU00 02

SU00 03

SU00 04

SU00 05

SU00 06

SU00 07

SU00 08

SU00 09

SU00 10

Din dator

(20)

Anmälan av pargrupper

⁃ Om det finns studenter som hellre blir indelade i en

pargrupp skicka e-post till mig med information om vilken klass ni går i så kommer ni bli inplacerade i en pargrupp.

(21)

Handledning i Microsoft Teams

⁃ För att räcka upp handen, skriv "Grupp XY räcker upp handen" i kanalen "!Handuppräckning" i ert klassteam.

⁃ Se till att ni har ett videomöte igång i er pargruppskanal där ni delar skärm.

⁃ När en assistent blir ledig ger hen er hanuppräckning

"tummen upp" och ansluter sedan till ert möte.

https://www.ida.liu.se/~TDDE44/distanslage/teams/

(22)

Redovisning av laboration: När?

⁃ Redovisningstillfälle schemalagt för varje laboration

⁃ Lägre (siffra) halvan av er webreg-grupp redovisar under första timmen

⁃ Övre halvan av er webreg-grupp redovisar under andra timmen

⁃ Redovisning vid labbtillfälle är möjligt i mån av tid, men behöver bokas med någon av era labbhandledare.

⁃ Komplettering för missad redovisning: boka in redovisning eller skicka in redovisning som screencast via Lisam.

(23)

Redovisning av laboration: Hur?

Räck upp handen i kanalen !Handuppräckning när ni är redo för redovisning.

Se till att ha ett möte igång med skärmdelning av er kod (laboration 2 och frammåt) och en terminal som ni kan använda för att demonstrera er uppgift.

Det kommer finnas en checklista som ni ska följa vid

redovisning, se till att ni har den framför er så att ni kan följa den.

(24)

Redovisning och inlämning av kod

Komplettering av kod behövs?

Redovisning vid redovisningstillfälle

Lämna in kod via Lisam

Boka in redovisning med handledare.

Spela in screencast Redovisa laboration

Komplettera kod.

Ja Nej

Återkoppling från handledare Redovisning vid laborationstillfälle

Redovisning via screencast

Ladda upp screencast och kod

via Lisam

(25)

Redovisning och inlämning av kod

Komplettering av kod behövs?

Redovisning vid redovisningstillfälle

Lämna in kod via Lisam

Boka in redovisning med handledare.

Spela in screencast Redovisa laboration

Komplettera kod.

Ja Nej

Återkoppling från handledare Redovisning vid laborationstillfälle

Redovisning via screencast

Ladda upp screencast och kod

via Lisam

(26)

Redovisning och inlämning av kod

Komplettering av kod behövs?

Redovisning vid redovisningstillfälle

Lämna in kod via Lisam

Boka in redovisning med handledare.

Spela in screencast Redovisa laboration

Komplettera kod.

Ja Nej

Återkoppling från handledare Redovisning vid laborationstillfälle

Redovisning via screencast

Ladda upp screencast och kod

via Lisam

(27)

Redovisning och inlämning av kod

Komplettering av kod behövs?

Redovisning vid redovisningstillfälle

Lämna in kod via Lisam

Boka in redovisning med handledare.

Spela in screencast Redovisa laboration

Komplettera kod.

Ja Nej

Återkoppling från handledare Redovisning vid laborationstillfälle

Redovisning via screencast

Ladda upp screencast och kod

via Lisam

(28)

Slutdeadline och

uppsamlingstillfällen

Slutdeadline av inlämningar under pågående kurs

4 juni 2021 (sista dagen av tenta-p för VT2)

Uppsamlingstillfälle 1

28 augusti 2021 (sista dagen av omtenta-p)

Uppsamlingstillfälle 2

22 oktober 2021 (sista dagen av omtenta-p för VT2)

(29)

Programmerbar maskin

(30)

Turing-maskinen (1936)

Teoretisk beskrivning av en beräkningsmaskin / dator

Maskinens beståndsdelar:

Ett band med oändligt antal rutor som kan innehålla en symbol (eller vara tom) Ett läs- och skrivhuvud som kan läsa och skriva symboler till/från bandet

En ändlig lista över tillstånd.

Ett tillståndsregister som lagrar maskinens aktuella tillstånd.

En ändlig uppsättning instruktioner som beskriver vad som ska göras givet maskinens tillstånd, samt aktuell symbol.

En instruktion beskriver

vad som ska göras med aktuell ruta (skriva/sudda) om/hur huvudet ska flytta på sig

maskinens nya tillstånd att instruktionen har utförts

(31)

ENIAC - dator utan lagring av program (1945)

US Army Photo

(32)

von Neumann-arkitekturen (1945)

⁃ En beskrivning av en fysisk arkitektur

Central processorenhet, Central Processing Unit: styrenhet

& aritmetisk-logisk enhet

Primärminne, Random Access Memory (RAM)

⁃ Input- och output-enhet

(33)

von Neumann-arkitekturen

⁃ Data och program lagras i gemensamt minne

⁃ Instruktioner utförs sekventiellt, en instruktion i taget

⁃ En operand ("en styck data") bearbetas åt gången

(34)

von Neumann-arkitekturen

⁃ Gemensam lagring av program och data

Ett program kan skriva data som sedan används som program Vi kan skapa program som hjälper oss skapa mer avancerade program!

Sekventiell exekvering: förutsägbarhet när program körs

(35)

Blinkenlights och hålkort

By MBlairMar1n - Own work, CC BY-SA 4.0, h=ps://commons.wikimedia.org/w/index.php?curid=50243909

Frontpanelen hos en IBM System/360 Modell 91

(36)

Program

⁃ Program används som homonym - ett "ord" flera betydelser

⁃ dvs. ett ord kan användas för att representera fker än ett begrepp

program (1): instruktioner som utförs av en dator

program (2): exekverbar data som en användare kan köra på en dator

program (3): instruktioner i datorns minne

program (4): ...

(37)

CPU + Minne

Ett program sett från den lägsta abstraktionsnivån:

numeriska värden i minnet som representerar instruktioner

⁃ läses och avkodas av processorn som sedan utför den avkodade instruktionen

Ettor och nollor: binära talsystemet

0: 0 1: 1
 10: 2
 11: 3 100: 4
 101: 5

(38)

Maskinkod

⁃ Numerisk sekvens i minnet: 184, 0, 184, 142, 216, 198, 6, 158, 15, 36, 205, 32

⁃ Resultat på en PC som kör MS-DOS: ett dollartecken i vänstra nedersta hörnet på skärmen.

⁃ Det tar extremt lång tid att programmera genom att skriva maskinkod.

(39)

Assembler

MOV AX, 47104 MOV DS, AX

MOV [3998], 36 INT 32

Exempel från http://www.swansontec.com/sprogram.html

(40)

Lågnivåprogrammering

⁃ Maskinkod

⁃ Assemblerkod

(41)

Programmering på högre nivå

(42)

Högnivåprogrammering

⁃ Python

⁃ Java

⁃ JavaScript

⁃ C#

(43)

Kompilerade och interpreterade

programmeringsspråk

(44)

Kompilering och interpretering

Kompilering ~ översättning av kod

+ process för att göra kompilerade koden körbar = exekverbar fil

Interpretering = tolkning av kod

En programtolk "läser" källkod och utför det som står i koden.

Programtolken ger sedan processorn instruktioner / skapar maskinkod

(45)

Python

(46)

Kort om Python

⁃ Födelsedatum: sent 80-tal

⁃ Skapare: Guido van Rossum

⁃ Fyllde 2.0 i oktober 2000

⁃ Fyllde 3.0 i december 2008

⁃ Idag: 3.9.1 (och 2.7.18 - stöds ej officiellt längre)

⁃ Interpreterat, men det finns en uppsjö av möjligheter

⁃ Stöd för flera olika programmeringsparadigm

⁃ Populärt som "nybörjarspråk"

⁃ Finns till flera plattformer, även inbäddade system

(47)

Stort community

⁃ Konferenser runt om i världen av olika storlek

⁃ Många, ramverk som används i produktion inom många områden

The State of the Octoverse (2020) h=ps://octoverse.github.com/

(48)

Datormiljön på IDA

(49)

Datormiljön på IDA

⁃ Operativsystem: Linux (Ubuntu)

⁃ Inloggning med LiU-ID

⁃ Möjlighet att logga in från egen dator via ThinLinc

https://www.ida.liu.se/local/students/remote/index.sv.shtml

(50)

Terminalen som

gränssnitt

(51)

Varför använda ett textbaserat gränssnitt

Syfte: miljö för att utveckla och köra egna program

Enklare (färre rörliga delar):

Output: text (en rad/tecken i taget) Input: textkommandon

Kraftfullt

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.

(52)

Terminalen

Terminalprogrammet tillhandahåller funktionalitet för

program att visa text och ta emot tangentbordstryck från användaren.

Terminalprogrammet kör ett skalprogram/kommandoskal:

bash (Bourne Again SHell) som tillhandahåller ett interaktivt gränssnitt för att köra kommandon

Prompt: sekvens av tecken som visar att skalet är redo att ta emot ett kommando.

⁃ Tecknet $ används ofta för att representera prompten.

(53)

Skriva kommandon

⁃ I terminalen kan man köra inbyggda kommandon, kompilerade program och skript

⁃ Ingen skillnad på kommandon, program och skript till

"utseendet"

⁃ Både kommandon och program körs genom att rätt ord skrivs i prompten

Jämförelse med grafiskt gränssnitt: "i gränssnittet kan du klicka på knappar, program och skript"

⁃ I kursen kommer ordet "kommando" att användas för att referera till alla varianter

(54)

Argument

⁃ De flesta kommandon tar emot argument

⁃ Som användare använder vi argument för att styra ett programs beteende

⁃ Syntax för kommando + argument:

$ kommando argument1 argument2

(55)

Sökväg

⁃ Beskrivning av en plats i filsystemet

⁃ Filsystem: består av kataloger och filer

Kataloger kan innehålla kataloger och filer Filer innehåller data

⁃ Tecknet / används som skiljetecken mellan namnet på en katalog och kataloger eller filer som ligger i den

⁃ Om / används i början av en sökväg refererar det till filsystemets rot-katalog.

(56)

Filsystemets trädstruktur

katalog1

katalog1/katalog1_1

katalog1/katalog1_1/fil4

katalog2/hejsan/hoppsan/fallerallera

(57)

Rot-, arbets- föräldra- och hemkatalog

⁃ Toppen av filträdet, "roten": /

⁃ Aktuell katalog (arbetskatalog): ./

⁃ Föräldrakatalog: ../

⁃ Din användares hemkatalog: /home/<liuid>

/home/jodfo01

(58)

Absoluta och relativa sökvägar

⁃ Absolut sökväg har med roten

/courses/TDDE42/kursmaterial/laboration1 /home/jodfo01/katalog1/fil1

/home/jodfo01/katalog1/katalog2/fil2 /home/jodfo01/katalog1/katalog3/fil3

⁃ Relativ sökväg har inte med roten och utgår från aktuell arbetskatalog (katalogen man står i)

kursmaterial/laboration1 katalog1/fil1

../katalog3/fil3

(59)

Exempel på kommandon

echo: skriver ut dess argument

ls: visar innehåll i katalog

cd: byter katalog

mv: flytta fil eller katalog

mkdir: skapa katalog

cat: skriv ut innehåll i fil

touch: skapa ny fil/uppdatera senast ändrad hos existerande fil

man: hjälptext för kommando

(60)

Från data till program

som körs

(61)

Från data till program?

⁃ which ls

/bin/ls

⁃ Vad händer när jag kör programmet ls?

(62)

Program, process, processor

Starta program:

Programmet läses från lagring in till minnet

Operativsystemet skapar en process för programmet Processen körs på processorn

Processen tilldelas minne och andra resurser

Operativsystemet hanterar processen och ser till att den sköter sig.

Process Program

Processor

(63)

Skriva och köra pythonprogram

(64)

Två sätt

1.Interaktivt genom att skriva in ett kommando i taget 2.Genom att skriva programmet i förväg

Interaktiv användning: använda IDE eller starta Python i terminalen

Skriva program i förväg: skriv programkod i textfil och starta Python och ange textfilen som program

(65)

Interaktiv användning

⁃ Starta pythontolken genom att skriva kommando i terminalen

python3

eller

ipython3

⁃ Avsluta med Ctrl-D

(66)

Köra ett program som skrivits i förväg

Gör så här:

Från terminalen, kör programtolken och skicka sökvägen till textfilen med pythonkoden som argument

exempel:

$ python3 hello.py

(67)

Beståndsdelar i ett program

(68)

Beståndsdelar i ett program

värden (value)

operatorer (operators)

variabler (variable)

uttryck (expression)

nyckelord (keywords)

skiljetecken (punctuators)

sats (statement)

(69)

Beståndsdelar i ett program

värden (value): t.ex. siffror eller text

(kallas för strängar)

(70)

Datatyper: Heltal och flyttal

⁃ De flesta programmeringsspråk skiljer på heltal och decimaltal (eller flyttal som det kallas för inom

datavetenskapen)

Flyttal och heltal är olika datatyper, float och int

⁃ Flyttal skrivs i Python med punkt. 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.

(71)

Datatyp: sträng

⁃ En sträng är en sekvens av tecken.

⁃ Skiljer på sträng och variabel genom att en sträng skrivs inom citattecken.

"Ada"

"boll"

"far är rar"

(72)

Beståndsdelar i ett program

operatorer (operators): token/symbol som likt en funktion appliceras på

värden

(73)

Matematiska operatorer

⁃ Matematiska operatorer

addition: +

subtraktion: -

multiplikation: *

division: /

division trunkerat till resulterande heltal //

modulo (rest vid division): %

(74)

Användning av operatorer

Operatorer vi kan använda på siffror

5 + 5 → 10

10 - 198 → -188

8.9 * 10 → 89.0

29 / 3 → 9.666666666666666

29 // 3 → 9

29 % 3 → 2

Operatorer vi kan använda på strängar

"hej" + "san""hejsan"

"hej" * 2"hejhej"

(75)

Beståndsdelar i ett program

variabler (variable): namngivna referenser till värden

uttryck (expression): ett uttryck kan beräknas till ett värde (ibland säger man även utvärderas

istället för beräknas)

(76)

Variabler, tilldelning och uttryck

Tilldelning: =

Exempel

x = 5

x = 7 + 9

voltage = 5 * (3 + 6)

Variabeln i vänsterledet tilldelas värdet till i högerledet.

Om högerledet är ett uttryck beräknas det innan tilldelningen kan ske

Ett uttryck kan utvärderas eller beräknas till ett värde

Exempel på uttryck:

användning av operatorer funktionsanrop

uppslag av värdet på en variabel

(77)

Variabler, tilldelning och uttryck

⁃ För att öka värdet på en variabel med 1 skrivs

min_variabel = min_variabel + 1

⁃ Nedanstående förkortade syntax kan också användas

min_variabel += 1

⁃ Följande förkortningar finns

+=

-=

*=

/=

(78)

Inbyggda funktioner för

omvandling mellan datatyper

⁃ Ett heltal kan omvandlas till ett flyttal genom att använda funktionen float(). Exempel: float(5)5.0

⁃ Flyttal kan omvandlas till ett heltal genom att använda

funktionen int(). Vid omvandlingen huggs alla decimaler bort. Exempel: int(3.1415)3

⁃ Vill man ha avrundning används funktionen round(). Som också kan ta emot ett andra argument för antal decimaler.

Exempel:

round(3.1415)3

round(3.1415, 2)3.14

(79)

print() - en inbyggd funktion som skriver ut värden

print("Hej") x = 56

namn = "Beata"

print(namn)

print(x + 487)

(80)

Beståndsdelar i ett program

nyckelord (keywords): speciella ord som refererar till instruktioner som ska utföras

skiljetecken (punctuators)

(81)

Nyckelord och betydelsebärande tecken

⁃ Vissa ord har speciell betydelse i Python

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.

(82)

Funktionsanrop, en typ av uttryck

⁃ Skillnad på definition av funktion och anrop (användning) av funktion

⁃ En funktion, definierad med matematisk notation

f(x) = 2x

⁃ Ett anrop till funktionen, vi "stoppar in ett värde"

f(10) → 20

Ett funktionsanrop är ett uttryck som beräknas till ett värde.

(83)

Funktioner i Python

⁃ Definition av funktion med matematisk notation: f(x) = 2 * x

⁃ Definition av samma funktion i Python

def f(x):

return 2*x

Syntax:

def funktionsnamn(argument1, argument2, ..., argumentN):

sats1 sats2 sats3 ...

(84)

Definiera en funktion i Python

def f(x):

return 2 * x resultat = f(10)

Med hjälp av nyckelorden def och return samt skiljetecknet : kan vi definiera funktionen f(x) = 2x i Python.

När funktionen anropas returnerar den värdet som fås när uttrycket 2*x beräknas.

(85)

Definiera en funktion i Python

def f(x):

print("Nu körs funktionen!") uträkning = 2*x

print("Nu har vi räknat ut något.") return uträkning

resultat = f(10)

Vi kan ha hur många satser vi vill inuti en funktionsdefinition.

(86)

Nyckelordet return

⁃ Nyckelordet return kan användas i en funktion.

När Python kommer till nyckelordet return avslutas

funktionen och dess anrop ersätts av det värde som funktionen returnerar.

⁃ Tänk på return som "gå tillbaka till dit funktionen blev anropad från" + lämna ut funktionens värde

(87)

Funktioner och returvärden

Alla funktioner i Python returnerar ett värde när de anropas.

⁃ För att Python-tolken ska kunna utföra en sats måste alla uttryck i satsen beräknas/utvärderas.

⁃ Efter att ett uttryck beräknats/utvärderats ersätts det av sitt värde i satsen.

⁃ Ett funktionsanrop är ett uttryck och måste därför alltid returnera ett värde.

(88)

Block

⁃ Vissa nyckelord påbörjar ett eget block (t.ex. nyckelordet

def)

⁃ För att visa vad som ingår i ett block används indentering i Python

Indentering: inskjutning av textrad med tab-tecken eller blankstegstecken (standard är 4 blanksteg per nivå)

(89)

Beståndsdelar i ett program

sats (statement): fullständig

instruktion

(90)

Satser och uttryck

En sats motsvarar "en mening", dvs minsta beståndsdelen i programmeringsspråk som har betydelse.

Exempel på satser:

uttryck

korrekt användning av nyckelord tilldelning

Ett uttryck kan beräknas till ett värde (ibland säger man även utvärderas istället för beräknas)

Exempel på uttryck

användning av operatorer funktionsanrop

(91)

Beståndsdelar i ett program

värden (value): t.ex. siffror eller text (kallas för strängar)

operatorer (operators): token/symbol som står för en instruktion

variabler (variable): namngivna referenser till värden

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

nyckelord (keywords): speciella ord som refererar till instruktioner som ska utföras

skiljetecken (punctuators)

sats (statement): fullständig instruktion

(92)

Sekventiella värden.


Strängar och listor.

(93)

Strängar

Datatypen str

(94)

Datatypen str

⁃ Datatypen str (eng. string) används för att representera en sekvens av tecken, kallas för teckensträng eller sträng

⁃ Tecken som ingår i en sträng omges av enkel- eller dubbelcitattecken

⁃ Exempel

"hej"

'hej'

"detta är en längre sträng"

(95)

Osynliga tecken

⁃ Vissa tecken är "osynliga", t.ex. tab och radbryt

⁃ För att skriva dem används följande teckenkombinationer

tabtecken: "\t"

radbryt: "\n"

(96)

Operatorer som kan användas med strängar

⁃ Följande operatorer kan användas med strängar

+: slår ihop två strängar och returnerar en ny sträng

*: returnerar en sträng som slagits ihop med sig själv ett antal gånger

⁃ Exempel

namn = "Ada"

hälsning = "Hej på dig "

print(hälsning + namn) print("hej" * 5)

(97)

Åtkomst av tecken på en viss position i en sträng

⁃ Vi kan använda följande syntax för att komma åt ett tecken på en viss position i en sträng

sträng[index]

⁃ index är ett heltal

⁃ Strängars index börjar på 0, dvs sträng[0] är det första tecknet i variabeln sträng.

⁃ Negativa index kan användas för att titta "bakifrån"

sträng[-1] ger det sista tecknet i variabeln sträng

sträng[-2] ger det näst sista tecknet i variabeln sträng

osv.

(98)

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"

namnlängd = len(namn) print(namnlängd)

(99)

Delsträngar

⁃ Vi kan även plocka fram delar av en sträng

sträng[start:slut:steg]


använd tecken från index=start, fortsätt med tecken på med index=index+steg så länge som index<slut

namn = "Birgitta"


namn[0:4:1]→ "Birg"


namn[0:7:2]→ "Brit"

B i r g i t t a

0 1 2 3 4 5 6 7

-8 -7 -6 -5 -4 -3 -2 -1

(100)

Delsträngar

⁃ Om start utelämnas antas det vara 0

⁃ Om slut utelämnas antas det vara len(sträng)

⁃ Om steg utelämnas antas det vara 1

⁃ Vi måste ha med minst ett kolon (:)


sträng[start:]


sträng[:slut]


sträng[::steg]


sträng[start:slut]


sträng[start::steg]

sträng[:slut:steg]

(101)

Input från användaren

⁃ Den inbyggda funktionen input(prompt) visar strängen prompt och väntar på att användaren ska skriva in något följt av enter. Funktionen returnerar sedan en sträng som innehåller det användaren skrev in.

⁃ Exempel

svar = input("Skriv något följt av enter: ") print("Du skrev: " + svar)

(102)

Omvandla mellan datatyper

⁃ Vi kan använda funktionen str() för att få en sträng- representation av vilket värde som helst.

⁃ Exempel:

str(3.1415)"3.1415"

str(True)"True"

(103)

Listor

Datatypen list

(104)

Datatypen list

⁃ Används för att lagra en sekvens av värden.

⁃ 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]]

(105)

Datatypen list

⁃ 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. och negativa index börjar bakifrån.

⁃ Funktionen len() kan också användas på listor

namn = ["Ada", "Bertil", "Cecilia", "Eskil"]


namn[0]"Ada"

namn[-1]"Eskil"

len(namn)4

(106)

Del-listor

⁃ Vi kan även plocka fram delar av en lista

lista[start:slut:steg]


använd tecken från index=start, fortsätt med tecken på med index=index+steg så länge som index<slut

namn = ["Ada", "Bertil", "Cecilia", "Eskil"]


namn[0:2:1] ["Ada", "Bertil"]

namn[1:4:2] ["Bertil", "Eskil"]

Ada Bertil Cecilia Eskil

0 1 2 3

-4 -3 -2 -1

(107)

Del-listor

⁃ Om start utelämnas antas det vara 0

⁃ Om slut utelämnas antas det vara len(sträng)

⁃ Om steg utelämnas antas det vara 1

⁃ Vi måste ha med minst ett kolon (:)


lista[start:]


lista[:slut]


lista[::steg]


lista[start:slut]


lista[start::steg]

lista[:slut:steg]

(108)

Operatorer som kan användas med listor

⁃ Operatorn + kan användas för att slå ihop två listor till en ny lista.

⁃ Exempel

frukter1 = ["äpple", "päron"]

frukter2 = ["apelsin", "banan"]

alla_frukter = frukter1 + frukter2 print(alla_frukter)

(109)

Ändra på ett värde i en lista

⁃ Vi kan ändra värdet på en viss position i en lista med en tilldelning:

värden = [1, 2, 3, 4]

print(värden)

värden[2] = "hoppsan"

print(värden)

(110)

Lägga till nytt värde till slutet på en lista

frukter = ["apelsin"]

print(frukter)

frukter = frukter + ["banan"]

print(frukter)

(111)

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

frukter = ["apelsin"]

print(frukter)

frukter = ["banan"] + frukter print(frukter)

(112)

Metoder - speciella funktioner som hör ihop med värden

characters1 = ["a", "b", "c"]

# metoden list.append(value) lägger till value till en lista characters1.append("d")

print(characters1) # kommer skriva ut ["a", "b", "c", "d"]

# användning av operatorn + med listor ändrar inte på operanderna

# nedanstående uttryck kommer beräknas, men resultatet "sparas"

# inte

characters1 = ["a", "b", "c"]

characters2 = ["d"]

characters1 + characters2

print(characters1) # kommer skriva ut ["a", "b", "c"]

(113)

Moduler

(114)

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.

⁃ Ett antal moduler följer med Python

(115)

Moduler

⁃ tillhandahåller ytterligare funktionalitet, t.ex. funktioner

⁃ 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

(116)

Import av modul och exempel på användning

⁃ För att få tillgång till en modul behöver den importeras 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()

# 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)

(117)

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() i modulen random kommer man då åt genom random.randint()

⁃ Man kan också importera innehållet i en modul och låta det hamna i samma namnrymd som resten av koden i filen:

from random import *

⁃ Då kommer man åt funktionen randint() utan att ange namnrymd.

(118)

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] + "!")

(119)

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] + "!")

(120)

Exekverbara filer - skript

(121)

Syntax för kommandon i terminalen

⁃ Kommandon i terminalen ($-tecknet representerar prompten)

$ ls ../

⁃ Kommandon som skrivs i terminalen kan ta argument

⁃ T.ex. när vi använder en pythontolk med ett filnamn är filnamnet ett argument.

$ ipython3 pythonkod.py

(122)

Säga åt systemet att automatiskt

använda en programtolk på innehåll i textfil

⁃ I Linux kan vi ändra på rättigheter på en fil. En användare kan ha rätt att läsa (read), skriva (write) och köra

(execute) en fil.

⁃ För att ge dig själv (user) rätt att köra en fil:

$ chmod u+x filnamn

⁃ När en textfil är exekverbar (körbar) kommer systemet titta på den första raden i textfilen för att få information om

vilken tolk som ska användas för att tolka textfilen (tolkdirektiv).

#!/sökväg/till/programtolk

(123)

Exempel med Python

#!/usr/bin/env python3

# ovanstående rad, som måste vara den första i textfilen

# används för att systemet ska använda programmet python3

# för att tolka resterande innehåll i textfilen print("Hello world!")

(124)

Skript - exekverbara filer

⁃ En textfil som är exekverbar (filrättigheter), har information om vilken programtolk ska användas kallas för ett skript

⁃ Vi kan alltså förbereda Python-kod så att den kan användas som om de vore vanliga program.

(125)

Anrop av skript i aktuell katalog

⁃ När vi kör ett skript i terminalen bryr sig inte skalet om skriptets filnamn.

⁃ Om en textfil är exekverbar och har ett tolkdirektiv som första rad så skulle vi t.ex. kunna döpa filen till "ls"

⁃ För att förhindra att användare kör skadliga skript krävs det att man anropar skript från den katalog man står i med ./

som prefix.

./ls anropa skriptet ls från den katalog vi står i

ls anropar systemprogrammet ls som listar kataloginnehåll

(126)

Modulen sys

⁃ Genom att importera modulen sys kan vi få tillgång till de argument som skrivs efter ett pythonskript

import sys

⁃ Variabeln args i modulen sys är en lista där elementet med index 0 är själva kommandot som skrevs

⁃ Övriga element är de argument som skrevs (datatyp: str)

(127)

Exempel på skript som skriver ut alla dess argument

#!/usr/bin/env python3 import sys

print(sys.args)

References

Related documents

det gångna året därför ägnats åt att steg för steg öka produktionen. Full kapacitet uppnåddes under fjärde kvartalet. Rönnskär har tillstånd att producera 300 000 ton

&#34;!CA-handlarna satsar på Värmland/Dals- land&#34; är också en faktor som påverkat årets positiva utveckling. !CA-butikerna redovisar en volymökning på 2,9

Resultatet efter finansnetto plus räntekostnader på konverti- belt förlagslån med avdrag för minoritetsandel och 30 pro- cent schablonskatt (50% 1988 och tidigare) dividerat med

l resultaträkningsposten Skatter redovisas aktuell och uppskjuten inkomstskatt för svenska och utländska koncernenheter. Bolagen i koncernen är skattskyldiga enligt

Bygg- och miljönämnden beslutar att hos Mark- och miljödomstolen vid Nacka tingsrätt, ansöka om utdömande av vite om 3000 kronor (tre tusen kronor) vardera för XXXXX och XXXXX

Bygg- och miljönämnden beslutar att Samhällsbyggnadsförvaltningen ges i uppdrag att upprätta en ny detaljplan för del av fastigheten Lövkojan 10 (gamla hotellet),

tillämpas också på allmänna platser och på områden för andra anläggningar än byggnader dock att personer med nedsatt rörelse- eller orienteringsförmåga ska kunna

Arbetsmarknads- och vuxenutbildningsnämnden ställer sig bakom ansökan om stadsbidrag för yrkeshögskoleutbildningar med utökat stöd med intag hösten