Centralt innehåll
- Grundläggande kontrollstrukturer, konstruktioner och datatyper.
- Grundläggande programmering i ett textbaserat programspråk.
- Programmeringens möjligheter och begränsningar utifrån datorns funktionssätt.
- Strukturerat arbetssätt för problemlösning och programmering.
- Arbetsmetoder för förebyggande av programmeringsfel, testning, felsökning och rättning av kod.
- Gränssnitt för interaktion mellan program och användare.
Fakta
1. Strängar
Textsträngar, oftast förkortat till strängar, består av tecken inneslutna av antingen dubbla citattecken (") eller enkla citattecken (‘). Strängar kan innehålla tecken som bokstäver, siffror, symboler och mellanslag, t.ex. str = 'asdj2-@sk9'
Strängar kan adderas, man slår då ihop (sammanfogar) strängarna. Det kallas för konkatenering.
# Exempel 1.1 - konkatenering av strängar
str1 = 'Kalle'
str2 = 'Anka'
print(str1 + str2)
str3 = 'Kajsa ' + str2
print(str3)
ger utskriften
KalleAnka
Kajsa Anka
# Exempel 1.2 - konkatenering av strängar
txt1 = 'Hej'
txt2 = 'Svejs'
print(txt1 + txt2)
str1 = '2'
str2 = '3'
print(str1 + str2)
txt = txt1 + str2
print(txt)
ger utskriften
HejSvejs
23
Hej3
Det går att addera två strängar. Men koden kommer att krascha om man försöker att subtrahera, multiplicera eller dividera två strängar. Det går alltså inte subtrahera, multiplicera eller dividera två strängar.
# Exempel 1.3 - ger en felutskrift för strängar kan inte multipliceras
str1 = 'Kalle'
str2 = 'Anka'
print(str1 * str2)
ger utskriften
Traceback (most recent call last):
File "main.py", line 3, in <module>
print(str1 * str2)
TypeError: can't multiply sequence by non-int of type 'str'
Men heltal kan däremot multipliceras med strängar.
# Exempel 1.4 - heltal kan multipliceras med en sträng
str1 = 'Kalle'
str2 = 'Anka'
print(3 * str1)
print(2 * str2)
ger utskriften
KalleKalleKalle
AnkaAnka
Ett heltal kan alltså multipliceras med en sträng. Men koden kommer att krascha om man försöker att adderas, subtrahera eller dividera ett heltal med en sträng. Det går alltså inte addera, subtrahera eller dividera ett heltal med en sträng.
# Exempel 1.5 - ger en felutskrift för ett heltal och en sträng kan inte adderas
str1 = 'Kalle'
print(3 + str1)
ger utskriften
Traceback (most recent call last):
File "main.py", line 2, in <module>
print(3 + str1)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
1.1 Stränglängd
# Exempel 1.1.1 - längden på en sträng, dvs antalet tecken, kan man ta reda på med funktionen len()
str = 'Kalle'
antal_tecken = len(str)
print(antal_tecken)
ger utskriften
5
1.2 Index
Varje tecken i en sträng har en siffra som anger var i strängen den finns. Det positionstalet kallas för index och kan användas för att komma åt ett visst tecken i en sträng. När tecken i en sträng numreras börjar man alltid från 0. Det betyder att andra tecknet har position 1 och det tredje har position 2 osv.
# Exempel 1.2.1 - skriv ut tecknet på index 0 från strängen str
str = 'Matematik'
tecken = str[0]
print(tecken)
ger utskriften
M
# Exempel 1.2.2 - skriv ut tecknet på index 3 och index 5
str = 'Matematik'
tecken = str[3]
print(tecken)
print(str[5])
ger utskriften
e
a
# Exempel 1.2.3 - med två index kan man ta fram ett intervall av en sträng
# Tänk på att tecknet i den sista positionen inte tas med.
str = 'Matematik'
tecken = str[4:7]
print(tecken)
ger utskriften
mat
# Exempel 1.2.4 - från första tecknet till index 4
str = 'Matematik'
print(str[:4])
ger utskriften
Mate
# Exempel 1.2.5 - från index 5 till sista tecknet
str = 'Matematik'
tecken = str[5:]
print(tecken)
ger utskriften
atik
1.3 Operatorn in
Med operatorn in
går det att kontrollera om ett visst tecken ingår i en sträng.
# Exempel 1.3.1 - kolla om tecken a finns i strängen cykel
b = "a" in "cykel"
print(b)
ger utskriften
False
# Exempel 1.3.2 - kolla om tecken a finns i variabeln str
str = 'Matematik'
b = "a" in str
print(b)
ger utskriften
True
# Exempel 1.3.3 - kolla om strängen str2 finns i strängen str1
str1 = 'Matematik'
str2 = 'tik'
if str2 in str1:
print(str2, "finns i", str1)
ger utskriften
tik finns i Matematik
# Exempel 1.3.4 - kolla om strängen str2 finns i strängen str1
# Exemplet visar att det är skillnad på stora och små bokstäver
str1 = 'Matematik'
str2 = 'Tik'
if str2 in str1:
print(str2, "finns i", str1)
else:
print(str2, "finns inte i", str1)
ger utskriften
Tik finns inte i Matematik
1.4 Film om strängar (9:19)
1.5 Teckenkodning
För att ett program ska veta vilka tecken en text innehåller använder den sig av nummer. Varje tecken har ett speciellt nummer, en s.k. teckenkod. Tecknet a har t.ex. nummer 97 och tecknet @ har nummer 64. Det som lagras i programmet är tecknets nummer, som är ett heltal. Om man t.ex. tilldelar en variabel tecknet a, kommer variabeln att innehålla värdet 97.
En dator förstår ju bara ettor och nollor. Det binära talsystemet kan representera olika heltal och därför representeras varje tecken av ett heltal. Det är för att de ska kunna lagras i datorns minne och kunna användas av datorprogram. Varje tecken har alltså ett nummer, en s.k. teckenkod. Vilket nummer ett visst tecken motsvarar brukar kallas för teckenkodning.
Teckenkodningen är alltså kopplingen mellan det tecken man ser på skärmen och hur det tecknet lagras i datorns minne.
Vilket nummer ett visst tecken har bestäms av internationella standarder som de flesta datorsystem ansluter sig till. Den internationella Unicode-standarden definierar ca 1.4 miljoner tecken däribland alla länders specialtecken.
Den vanligaste idag är Unicode-standarden UTF-8. Olika tecken kan lagras med olika många byte i UTF-8. Tanken att de vanligaste tecknen lagras med en byte och sedan ju ovanligare kan enda upp till 4 bytes krävas. Svenska specialtecknen åäöÅÄÖ kräver var och en 2 bytes för att lagras.
En tabell över Unicode tecken 0 - 65535 finns på Unicode-tecken.
Funktionen chr()
omvandlar en nummerkod till tecknet den representerar och funktionen ord()
omvandlar ett tecken till dess nummerkod.
# Exempel 16 - vilket nummer representerar A
nr = ord("A")
print(nr)
ger utskriften
65
# Exempel 17 - vilket nummer representerar @
nr = ord("@")
print(nr)
ger utskriften
64
# Exempel 18 - vilket tecken representerar 97
tecken = chr(97)
print(tecken)
ger utskriften
a
# Exempel 19 - vilket tecken representerar 77
tecken = chr(77)
print(tecken)
ger utskriften
M
2. Formatering av utdata
Det finns flera olika sätt att styra hur text ska skrivas ut, dvs att formatera textsträngar. T.ex. kan textsträngar skrivas ut genom att omvandla variabelvärden till textsträngar och sedan konkatenerat dem.
a = 3
b = 7
svar = int(input('Vad är ' + str(a) + ' * ' + str(b) + '? '))
ger utskriften
Vad är 3 * 7?
Ett enklare sätt åstadkomma samma textsträng inuti input()
är att använda så kallade f-strängar.
2.1 F-strängar
En textsträng kan formateras genom att skriva bokstaven f
framför textsträngen och sedan skriva variabelnamn innanför krullparenteser (måsvingar).
# Exempel 2.1.1 - användning av en f-sträng för att skriva ut text
a = 3
b = 7
svar = int(input(f'Vad är {a} * {b}? '))
ger utskriften
Vad är 3 * 7?
# Exempel 2.1.2 - det går att skriva uttryck innanför måsvingarna i f-strängar
a = 3
b = 7
print(f'{a}/{b} = {a/b}')
ger utskriften
3/7 = 0.42857142857142855
# Exempel 2.1.3 - Ett flyttal med två decimaler formateras med :.2f efter flyttalet innanför måsvingarna
a = 3
b = 7
print(f'{a}/{b} = {a/b:.2f}')
ger utskriften
3/7 = 0.43
Vill man istället visa sex decimaler skriver man :.6f och så vidare.
# Exempel 2.1.4 - positivt/negativt tecken skrivs genom att skriva :+ efter talet
a = 3
b = 7
print(f'{a}/{b} = {a/b:+.2f}')
ger utskriften
3/7 = +0.43
2.2 Formatering för tabeller
F-strängar kan användas till att formatera text för att skapa tabeller.
# Exempel 2.2.1 - en tabell över några heltal och heltalen i kvadrat
print(' tal kvadrat')
print('--------------')
for tal in range(-2, 3):
print(f'{tal} {tal*tal}')
ger utskriften
tal kvadrat
--------------
-2 4
-1 1
0 0
1 1
2 4
I utskriften hamnar talen i den andra kolumnen inte rakt under varandra, vilket inte är snyggt.
# Exempel 2.2.2 - högerjustera värdena med 3 och 7 positioner, som anges efter ett kolon
print(' tal kvadrat')
print('-------------')
for tal in range(-2, 3):
print(f'{tal:3} {tal*tal:7}')
ger utskriften
tal kvadrat
-------------
-2 4
-1 1
0 0
1 1
2 4
Nu är alla tal högerjusterade.
# Exempel 2.2.3 - högerjustering och två decimaler
print(' tal kvadrat')
print('--------------')
for tal in range(-2, 3):
print(f'{tal:6.2f} {tal*tal:7.2f}')
ger utskriften
tal kvadrat
--------------
-2.00 4.00
-1.00 1.00
0.00 0.00
1.00 1.00
2.00 4.00
# Exempel 2.2.4 - värdetabell för ekvationen 2x + 3
print('Värdetabell för ekvationen 2x + 3')
print(' x y')
print('---------')
for x in range(1, 6):
print(f'{x:2} {2*x + 3:7.2f}')
ger utskriften
Värdetabell för ekvationen 2x + 3
x y
----------
1 5.00
2 7.00
3 9.00
4 11.00
5 13.00
Begrepp
Datatyp: En variabel kan innehålla värden av olika sort, t.ex. heltal, decimaltal, sträng eller bool.
Sträng: Text som består av tecken som bokstäver, siffror, symboler och mellanslag.
Konkatenering: Adderar strängar som då sammanfogas (slås ihop).
Index: Position i t.ex. en sträng.
Teckenkodning: Kopplingen mellan ett tecken och dess nummerkod, dvs hur det lagras i datorns minne.
F-sträng: Ett sätt att formatera strängar för utskrifter.
Länkar
Film
Fördjupning
Övningar
Du kan inte att lära dig att programmera genom att läsa en bok eller titta på videos. Du måste öva på att skriva kod själv och ju mer du övar desto bättre blir du.- Ett program som ska visa resultatet av beräkningen 8 + 19 ⋅ 7 - 23 är skrivet så här:
Kan du se vad som är fel?print('8 + 19 * 7 - 23')
- Vad kommer att visas när följande kod körs?
print('Python' + 'Python') print(3 * "Python")
- Skriv ett program som skriver ut ordet hej tio gånger.
- Ett program för att omvandla från liter till milliliter är skrivet så här:
Kan du vad som är fel?antalLiter = input("Ange antal liter: ") print(f'Det motsvarar {antalLiter * 1000} milliliter (ml).')
- Vad skrivs ut när följande rader körs:
print('1' + '1') print(3 * '1') print('1' + '1') print(3 * 1)
- Vad blir utskriften?
x = len('Coding is fun') print(x)
- Vad blir utskriften?
txt = 'The quick brown fox jumps over the lazy dog' print(txt[23] + txt[38] + txt[31] + txt[1] + txt[12] + txt[14])
-
Använd funktionen
ord
för att på vilket nummer i Unicode som representerar bokstaven y? - Använd Unicode-tabellen för att på vilket nummer som representerar bokstaven w?
-
Använd funktionen
chr
för att på vilket tecken i Unicode som representerar av sifferkoden 214? - Använd Unicode-tabellen för att på vilket nummer som representerar av sifferkoden 117?
-
* Vad är differensen mellan sifferkoden för lilla a och stora A, mellan
lilla m och stora M?
Är det samma differens för alla bokstäver i alfabetet eller skiljer det sig för några bokstäver? - * Använd print-funktionen för att skriv ut strängen: It’s fun to solve problems
- * Gör ett program som låter användaren skriva in ett positivt heltal. Programmet ska sedan skriva ut siffrorna i talet med en siffra per rad i omvänd ordning.
Möjlig utskrift
Skriv in ett positivt heltal: 246 6 4 2
- Vad bli utskriften?
a = -3 b = 7 c = -a/b print(f'{a}') print(f'{b}') print(f'{b:+}') print(f'{c:}') print(f'{c:+.2f}')
- Gör ett program där användaren skriver in ett positivt heltal n. Skriv ut en tabell för alla heltal fr.o.m. ett t.o.m. n som visar talet samt talets kvadrat. Exempel på en körning:
Ange det största talet: 4 tal kvadrat -------------- 1 1 2 2 3 9 4 16
- * Skriv ett program som låter användaren skriva in hur mycket pengar som ska lånas, vilken räntesats per år lånet ska växa med, hur mycket som ska betalas av per år i kronor. En körning kan t.ex. se ut så här:
Skriv in lånet: 5000 Skriv in årlig ränta i procent: 5 Skriv in årlig avbetalning i kr: 900 ---------------- år lån ---------------- 0 5000.00 1 4350.00 2 3667.50 3 2950.88 4 2198.42 5 1408.34 6 578.76 7 0.00 8 0.00
Inlämningsuppgift
Uppgift - Multiplikationstabell
Skriv ett program som skriver ut en snygg multiplikationstabell. Användaren ska välja vilken tabell som ska skrivas ut.
Använd en loop (vilken är lämpligast?) för beräkningen och f-strängar för att få en snygg tabell.
Programmets utskrifter ska se exakt ut som vid exempelkörningarna nedan. Observera de raka högerkolumnerna.
Exempelkörning 1 - om användaren svarar 2
Ange tabell: 2
--------------------
2:ans tabell
--------------------
0 * 2 = 0
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20
Exempelkörning 2 - om användaren svarar 10
Ange tabell: 10
--------------------
10:ans tabell
--------------------
0 * 10 = 0
1 * 10 = 10
2 * 10 = 20
3 * 10 = 30
4 * 10 = 40
5 * 10 = 50
6 * 10 = 60
7 * 10 = 70
8 * 10 = 80
9 * 10 = 90
10 * 10 = 100
Kom ihåg! Använd beskrivande variabelnamn och kommentera koden.
Frivillig utmaning
Användaren ska välja både tabell och vilket intervall tabellen ska visa.
Exempelkörning 3
Ange tabell: 2
Ange startintervall: 3
Ange stoppintervall: 14
--------------------
2:ans tabell
--------------------
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20
11 * 2 = 22
12 * 2 = 24
13 * 2 = 26
14 * 2 = 28
Exempelkörning 4
Ange tabell: 10
Ange startintervall: 1
Ange stoppintervall: 12
--------------------
10:ans tabell
--------------------
1 * 10 = 10
2 * 10 = 20
3 * 10 = 30
4 * 10 = 40
5 * 10 = 50
6 * 10 = 60
7 * 10 = 70
8 * 10 = 80
9 * 10 = 90
10 * 10 = 100
11 * 10 = 110
12 * 10 = 120