Centralt innehåll

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)

Starta film om strängar

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.

Ö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.
  1. Ett program som ska visa resultatet av beräkningen 8 + 19 ⋅ 7 - 23 är skrivet så här:
    print('8 + 19 * 7 - 23')
    Kan du se vad som är fel?
  2. Vad kommer att visas när följande kod körs?
    print('Python' + 'Python')
    print(3 * "Python")
  3. Skriv ett program som skriver ut ordet hej tio gånger.
  4. Ett program för att omvandla från liter till milliliter är skrivet så här:
    antalLiter = input("Ange antal liter: ")
    print(f'Det motsvarar {antalLiter * 1000} milliliter (ml).')
    Kan du vad som är fel?
  5. Vad skrivs ut när följande rader körs:
    print('1' + '1')
    print(3 * '1')
    print('1' + '1')
    print(3 * 1)
  6. Vad blir utskriften?
    x = len('Coding is fun')
    print(x)
  7. 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])
  8. Använd funktionen ord för att på vilket nummer i Unicode som representerar bokstaven y?
  9. Använd Unicode-tabellen för att på vilket nummer som representerar bokstaven w?
  10. Använd funktionen chr för att på vilket tecken i Unicode som representerar av sifferkoden 214?
  11. Använd Unicode-tabellen för att på vilket nummer som representerar av sifferkoden 117?
  12. * 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?
  13. * Använd print-funktionen för att skriv ut strängen: It’s fun to solve problems
  14. * 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
  15. 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}')
  16. 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
  17. * 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

login     logout    

Exit tickets



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