Lektion 1: Grundläggande Python
Syfte: | Introducera grundläggande element i Python-språket. |
Viktiga begrepp: |
Tal, strängar, listor, variabler. Datatyper. |
Arbetsform: |
Arbeta gärna tillsammans med någon men skriv alltid egen kod! Diskutera med varandra! |
Uppskattad arbetstid: | Schemalagd handledningstid: 2 timmar. Utöver det räkna med eget arbete med lika många timmar. |
Redovisning: | Ingen obligatorisk, men diskutera oklarheter med lärare/labbhandledare. |
Komma igång
Vi kommer att använda Thonny som programmeringsmiljö under kursen, men om du är van med en annan miljö är det förståss ok. Nedan går vi igenom hur man installerar Thonny. När man gör det så installeras även Python på din dator automatiskt.
Thonny är ett program som är en utvecklingsmiljö (Integrated Development Environment, IDE), med funktioner
avsedda att underlätta vid programmering med Python.
För att installera programvaran (Python och Thonny) på egen dator:
För att installera Python och Thonny för Mac, Linux och Windows gå till
https://thonny.org/
Alternativ till Thonny, se i menyn "Litteratur och länkar"
Om du vill jobba i datasalarna på Polacksbacken
Python och Thonny är installerat på institutionens Linuxdatorer i datorsalarna.Först lite om Linuxdatorerna
- Logga in med ditt studentlösenord A
- Starta Thonny genom att i skärmens över vänstra hörn klicka på: Applications>Programming>Thonny
- När du önskar avsluta Thonny: Välj i Thonny's övre vänstra hörn: File>Exit
- När du önskar avsluta datorlabben (logga ut från linuxdatorn): Klicka i skärmens övre högra hörn: Välj Log out.
- Webbläsarprogram finner du: Applications>Internet>... (exvis Chrome, Firefox)
I webbläsaren: Gå till kurshemsidan: https://www.it.uu.se/edu/course/homepage/prog1/python/ht21_p12/ - Mapp- och filhantering: Mappen Home är din s.k. hemmamapp på linuxsystemet. Klicka på den och du kommer se dina mappar och filer.
Om du önskar skapa en mapp i mappen Home gör så här: Högermusklicka i fönstret för Home-mappen och skapa en ny mapp.
Alla nedanstående instruktioner gäller oavsett om du jobbar med Linux-datorerna eller med egen dator
Att använda Thonny
Starta Thonny genom att klicka på dess ikon                  

Det bör se ut ungefär så här:
          
Man kan använda Python på två sätt:
-
Script mode:
I det övre fönstret som fått namnet untitled skriver man vanligen sekvenser av kommandon (s.k. script eller program). Kommandona kallas även för Python-satser, det är sådant som ingår i språket Python. Olika script (program) sparas i filer. I och med att du just nu inte har skrivit något Pythonprogram så står det untitled i fönstret.
Resultatet (utskrifter) av ett program visas i det nedre fönstret shell. -
Interactive mode
Det nedre fönstret kallas shell. Där kan man utföra ett kommando (en Pythonsats) i taget, och få resultatet av detta på nästa rad. Du ser att det står >>> i fönstret. Detta kallas för prompter. Du skriver en Python-sats efter promptern och trycker på Enter eller Return så utförs satsen. Därefter visas promptern igen och du kan skriva nästa Python-sats.
Man kan säga att Python i interactive mode fungerar som en avancerad räknedosa.I denna lektion skall du arbeta i interactive mode, dvs i shell-fönstret. Dvs skriva en Python-sats i taget och få den utförd. Det som händer när du skriver en Python-sats är att den s.k. Python-interpretatorn tolkar det du skrev och utför detta. Om det ej gick gick att tolka skrivs ett felmeddelande. När Python skriver ut promptern är det att tecken på att Python är beredd på nästa kommando.
Här är en inledning med ett exempel där man gör följande:
I shell Förklaring >>> x = 4 >>> x 4 >>> y = x * x >>> y 16
En variabel x tilldelas värdet 4 Man skriver ut värdet genom att ange variabelns namn 4 skrivs ut av Python En variabel y tilldelas värdet av x ggr x Man skriver ut värdet genom att ange variabelns namn 16 skrivs ut av Python
Så här ser det ut i shell-fönstret
Egna övningar i shell-fönstret i Thonny
Tips 1: När du skriver satser i shell: Det går bra att ta tillbaka, redigera och göra om det man skrivit tidigare med hjälp av pilarna på tangentbordet.
Tips 2: Gör shell-fönstret större genom att klicka på ramen och dra den uppåt, det övre fönstret blir mindre.Aritmetiska uttryck
Tal skrivs som vanligt (med eller utan decimalpunkt).
Aritmetiska operatorer:+
,-
,*
,/
,//
,%
och**
.De fyra första har sin vanliga betydelse.
Operatorn//
står för heltalsdivision d.v.s. eventuella decimaler stryks.
Operatorn%
ger resten vid heltalsdivision.
Operatorn**
står för upphöjt till.Testa detta genom att skriva några beräkningsuttryck. Prova bl.a. följande:
Prova detta! Kommentar 4 + 3*5 - 2*2 Vanlig beräkningsordning d.v.s. * och / före + och - 4 + 3*(5-2)*2 Kan ändras med parenteser 4+2+1 4+2+1.0 Samma värde som ovan men med decimaldel utsatt. Notera decimalpunkt skrivs med punkt, ej komma. 5/2 Värde med decimaldel 5//2 Heltalsdivision, ger trunkering 2+0.5, "kastar bort" decimaldelen -5//2 Heltalsdivision, är lika med -3+0.5, "kasta bort" decimaldelen -(5//2) Annat resultat än ovan! är lika med -(2+0.5) och "kasta bort" decimaldelen som alltid är positiv 37%10 Procent-tecknet är rest-operator 1234567//1000%10 Fjärde siffran från slutet 1/0 3e2 + 1e4 + 2.5e-2 3·102 + 1·104 + 2.5·10-2 3*10**2 + 10**4 + 2.5*10**-2 Samma värde men klumpigare 0.1*0.1 Antagligen inte alldeles rätt svar. Beror på att flyttal lagras speciellt, se Föreläsning 2 om detta. 10**1000 10.**1000 -1**0.5 Först upphöjt, sedan minus (-1)**0.5 Först minus, sedan upphöjt Lärdomar
-
Det finns två typer av tal i Python (liksom i de flesta andra programmeringsspråk): heltal och så kallade flyttal.
Heltal skrivs utan och flyttal med decimaldel.
Man säger att heltal och flyttal är olika datatyper. Namnen på dessa två typer ärint
respektivefloat
. - Om minst den ena operanden i en operation är av flyttalstyp så blir resultatet av flyttalstyp.
-
Om båda operanderna är av heltalstyp bli resultatet av heltalstyp förutom för division (
/
) som alltid ger resultat av flyttalstyp. - Det är viktigt att veta i vilken ordning operationer utförs!
- Python har i princip samma prioritetsordning för operatorer som matematik: parenteser har högst prioritet, sedan exponenter (**), därefter multiplikation och division som har samma prioritet. Exempel: 4*2**3 blir 32 medan (4*2)**3 blir 512.
- Datorer räknar inte alltid helt rätt! I Python är heltalsräkningen exakt medan räkning med flyttal kan ge avrundningsfel.
- Det finns uppenbarligen en begränsning på hur stora flyttal som kan bli. Heltalen verkar inte ha samma begränsning.
- Det sista exemplet visar att Python kan hantera komplexa tal. Det kommer vi dock inte utnyttja i denna kurs.
Övningar
Använd Python-satser för lösa nedanstående uppgifter!-
Hur många sekunder går det på ett år?
Skriv:
>>> 365*24*60*60
som ger31536000
-
Antag att du tänker mycket långsiktigt och sätter in 1 kr på konto nu och att du får 2 procents årlig ränta.
Vad blir kapitalet med ränta på ränta om 2000 år?
Skriv:>>> 1.02**2000
som ger1.586147327603768e+17
kronor.
Variabler och tilldelningar
En variabel är en namngiven storhet som kan ha ett värde. I Python gäller:
-
Variabler skapas genom att man ger dem ett värde i en tilldelningssats:
variabel = uttryck
. I Python har således variabler alltid värden. - Därefter kan variabeln användas i uttryck i stället för värdet.
- Variabler kan ges nya värden med nya tilldelningssatser.
-
Variabelnamn kan innehålla bokstäver, siffror och understrykningstecknet (
_
). Första tecknet får inte vara en siffra. Python skiljer mellan små och stora bokstäver så att t.ex.page
ochPage
är olika namn!
-
Det är tillåtet att använda nationella bokstäver (t.ex. â, å, å, ö, ç, é, è, ï, ...) men det gör programmen svårlästa och ännu svårare att underhålla så vi avråder från det.
Variabelnamn som börjar med understrykningstecknet (
_
) har en speciell betydelse i vissa sammanhang. -
I våra små exempel använder vi ofta väldigt korta variabelnamn.
När man skriver riktiga program är det viktigt att använda namn som
anger vad variabeln används till. Exempel på beskrivande namn:
weekday
,lines_per_page
ochnumber_of_convolutions
.Observera att etablerad stil i Python är att använda tecknet
_
mellan ord inom samma variabelnamn för att öka läsbarheten.
Prova i tur och ordning:
Prova! i = 2 x = 4.5 y = i*x y = i*y x = i + 2 Tag reda på variablernas värde genom att skriva namnen ett på varje rad efter promptern.
Variabelni
har ett värde av heltalstyp ochy
har ett värde av flyttalstyp medanx
först får ett värde av flyttalstyp och sedan ett nytt värde av heltalstyp.Man kan få alla variablers värden t.ex. genom att skriva
print(i, x, y)
.Prova! x = 2 x += 4 x x *= 2 x x -= 11 x x /= 2 x Uttrycket
(Anmärkning: Om du har programmerat i språk som t.ex. C, C++ eller Java så har du kanske använt operatorernax += 4
betyder alltså att värdet påx
ska ökas med 4 d.v.s. uttrycket är ekvivalent medx = x + 4
.++
och--
. Dessa finns inte i Python! Det är extra lurigt eftersom det inte är säkert att man får någon diagnos om man råkar använda dem. T.ex. är3 + ++x
legalt även i Python men det har en helt annan betydelse! Prova gärna och inse varför det blir som det blir!)Matematiska funktioner
Standardpaketet
math
innehåller matematiska funktioner. För att få tillgång till dessa används kommandotimport math
Exempel: Beräkna hypotenusan i en rätvinklig triangel
Prova! import math k1 = 3 k2 = 4 hyp = math.sqrt(k1*k1 + k2*k2) hyp Exempel på andra funktioner i
math
ärsin
,cos
,exp
ochlog
. De trigonometriska funktionerna använder radianer ochlog
avser den naturliga logaritmen. Andra varianter finns dock.Kommandot
dir(math)
ger en lista på funktioner och konstanter. Prova kommandothelp(math)
som ger lite mer förklaringar. Antagligen får du meddelandetSqueezed text
. Dubbelklicka på detta meddelande så får du se hela texten!Ännu mer information finns i den officiella dokumentationen!
Modulen
math
innehåller också konstanternapi
oche
som alltså skrivs sommath.pi
ochmath.e
.Om man ska använda t.ex.
sqrt
på många ställen i koden kan man skrivafrom math import sqrtvarefter man inte ska angemath.
-prefixet vid anropen.Om man ska använda många olika funktioner så kan man i stället skriva importsatsen så här:
from math import *Då kan man anropa funktionerna direkt utan att skriva
math.
framför varje anrop. Rekommendationen är dock att explicit tala om vilka funktioner man tänker använda.Strängar
Strängar är en annan inbyggd datatyp med följande egenskaper:- En sträng är en följd av noll eller flera tecken (bokstäver, siffror, specialtecken, ...).
- Strängar ("strängkonstanter") omges av citationstecken (exempel: "Ciao!") eller apostrofer (exempel 'Han sa "Ciao!"'). Strängar omgivna av apostrofer kan innehålla citationstecken och tvärt om.
-
Datatypen för att hantera strängar heter
str
. - En sträng kan inte ändras men en strängvariabel kan naturligtvis tilldelas en annan sträng.
-
Operatorn
+
används för att sätta ihop (konkatenera) strängar.
Exempel:
Prova! Kommentar name = 'Kalle' family_name = 'Andersson' age = '12' full_name = name + " " + family_name Konkatenering full_name + " är " + age + " år" Sätt
age
till12
(d.v.s. talet12
, inte strängen'12'
) och prova den sista raden igen! (Kom ihåg att du kan ta fram givna kommando med piltangenterna!)Det fungerade alltså inte. Problemet är att man inte kan blanda typer hur som helst. Operatorn
+
är definierad för både strängar och tal men med helt olika funktion. När det operanderna är av olika typer så vet inte Python vad som ska göras. Programmeraren måste med typkonvertering ange hur det ska tolkas.f-strängar
Ett, oftast bättre, alternativ till konkatenering av strängar är att använd s.k. f-strängar som introducerades i Python 3.6.En f-sträng inleds med
f'
ellerf"
och avslutas som vanliga strängar med'
respektive"
.För att få samma resultat som i tabellen ovan kan vi skriva som i tabellen nedan:
Prova! Kommentar name = 'Kalle' family_name = 'Andersson' age = 12
Nu som intfull_name = f'{name} {family_name}' f'{full_name} är {age} år' {}
. När värdet av strängen beräknas ersätts{}
-uttrycket av variabelns värde. Det blir är kortare att skriva, enklare att läsa och vi slipper skriva explicita typkonverteringar.Innehållet i
{}
-uttrycket är inte begränsat till att vara variabler utan kan vara generella uttryck som då kommer att beräknas. Exempel:f'{x} i kvadrat är {x*x}'Listor
En lista består av ett antal värden. Värdena kan vara av olika typ. En lista kan definieras genom att man räknar upp elementen, kommaseparerat, inom [ ]-parenteser. Man använder även [ ]-parenteserna för att nå enskilda element genom dess index. Första elementet har alltid index 0.Uttryck Värde Kommentar x = 4 n = [2, 3, x, x*x] [2, 3, 4, 16]
En lista med heltaln[0] + n[3] 18 Första plus sista elementet n[1] = n[2] + 3 n [2, 7, 4, 16] Element kan tilldelas nya värden n.append(25) n [2, 7, 4, 16, 25] Element kan läggas till på slutet.
Observera syntaxen!len(n) 5 Funktionen len ger längden av listan ['Eva', 'Åke'] Lista med strängar ['Eva', 22, 'Åke', 24] Lista med blandade typer Observera hur listor kunde utökas med
append
! Listor har ett antal metoder varavappend
är en. Metoder används för att hämta information om eller påverka enskilda objekt. Vi kommer ta upp flera metoder både för listor och andra datatyper längre fram.Listor är ett mycket kraftfullt begrepp i Python med stora användningsområden.
Typkonverteringar
För att översätta en typ till en annan skriver man typnamnet (
Exempel:int
,float
,str
...) följt av det uttryck som man vill konvertera inom parentes.Uttryck Värde Kommentar str(12) '12' Heltal till sträng str(-12.5) '-12.5' Flyttal till sträng str([1, 2, 3]) '[1, 2, 3]' Lista till sträng list('abc') ['a', 'b', 'c'] Sträng till lista int('12') 12 Sträng till heltal int(12.8) 12 Flyttal till heltal. Decimaler trunkeras! float('12.8') 12.8 Sträng till flyttal Funktionen
str
kan användas på alla typer medanint
ochfloat
kräver att argumentet går att tolka som ett tal. Uttrycketfloat('1x42')
kommer alltså att ge en felutskrift.
Frågor och övningar
-
Vid omvandling från flyttalstyper till heltalstyper trunkeras
värdena d.v.s. decimalerna stryks. Hur kan man göra om man vill att värdet
av
x
rundat till närmaste heltal?int(x + 0.5)
(förutsätter attx
≥ 0)
Det finns också en funktionround
som gör detta fast den inte nämnts tidigare. -
Vilka datatyper har du sett under denna lektion?
int
för heltal,
float
för flyttal,
str
för strängar och
list
för listor. -
Vilka aritmetiska operatorer har du sett
under denna lektion?
+, -, *, /, //, %, **,
+=, -=, *=, /=, %= -
Vad är det för skillnad mellan heltals- och flyttalsaritmetik?
Heltal representeras exakt och heltalsaritmetiken ger exakta resultat.
Flyttalen kan inte alltid representeras exakt och aritmetiken kan ge avrundningsfel. -
Vilka regler gäller det när man blandar heltal och flyttal i samma uttryck?
Python behandlar varje enskild operation för sig. Om båda operanderna är av heltalstyp så blir resultatet av heltalstyp. Om den ena är av heltalstyp och den andra av flyttalstyp så konverteras först heltalsoperanden till flyttal och resultatet blir ett flyttal.
Resultatet av/
-operatorn är dock alltid ett flyttal.
Exempel: Uttrycketfloat(1//2 + int(3/2 + 2))
har värdet 3.0 -
Vad finns i modulen
math
? Hur används den?Ett antal matematiska funktioner somsin
,cos
,exp
,log
....
För att använda dessa måste modulen importeras. -
Vad är en variabel och vilka egenskaper har den?
En variabel har namn och värde.
Värdet kan ändras med tilldelningsoperatorn (=
). -
Vilka typkonverteringar kan ske automatiskt?
Från
int
tillfloat
-
Hur gör man explicita typkonverteringar?
Genom att använda funktionerna
int
,float
ochstr
.
Exempel:x = int(10*math.sin(z)) ans = 'Svaret är ' + str(x)
-
Sätt en variabel
x
till ett heltalsvärde som står för ett antal månader.
Skriv en rad som skriver ut vad detta blir uttryckt i år och månader. Ignorera skottår!
Exempel: Om x är satt till 208 så ska utskriften bli17 år och 4 mån
.
Prova med olika värden påx
!x = 208 str(x//12) + ' år och ' + str(x%12) + ' månader'
ellerprint(x//12, ' år och ', x%12, ' månader')
eller, med en f-strängf'{x//12} år och {x%12} månader'
Läs mer om Thonny här 1 och här 2
Om du har tid över gå vidare till nästa lektion eller gå tillbaka
-
Det finns två typer av tal i Python (liksom i de flesta andra programmeringsspråk): heltal och så kallade flyttal.
Heltal skrivs utan och flyttal med decimaldel.