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. Samlingar
Datatyperna heltal, decimaltal (flyttal), boolean innehåller ett
värde och kallas ofta för enkla datatyper.
Variabler som kan innehålla flera värden kallas ofta för sammansatta
datatyper eller samlingar.
I Python finns samlingarna:
List
, Tuple
, Set
och Dictionary
.
Vi har redan bekantat oss med listor och ska nu
se hur den sammansatta datatypen tuple
fungerar.
I verkliga programmeringsprojekt kan det vara viktigt att välja den samling
som ger t.ex. bäst läsbarhet och prestanda. Valet av samling är beroende
på vilken typ av problem som ska lösas.
Det innebär att det inte finns någon samling som är bäst utan alla har sina
fördelar och valet beror på vilken typ av problem som ska lösas.
2. Tupel
Ibland vill man ha en variabel med flera värden som inte ska kunna ändras. I Python använder man tupler (tuples på engelska) för att åstadkomma det.
Tupler ser ut och fungerar ungefär som vanliga listor.
Skillnaden är att skapas med parenteser istället för hakparenteser
och att element inte kan ändras efter tupeln skapats.
En tupel är en slags konstant lista, vilket betyder att
den inte kan ändras efter den skapats.
Eftersom tupler aldrig ändras kommer de att ha samma storlek och innehåll. Detta gör att deras interna rutiner kan köras snabbare än listor. Tupler är alltså mer effektiva än listor och lämpar sig för tillfällen då man har konstanta värden.
- Tupler används för att lagra flera element i en variabel.
- Elementen i en tupel har ett index, en position. Man se det som att elementen har en ordning.
- Element kan inte läggas till i tupeln, ändra värde eller tas bort efter att tupeln skapats.
- Olika element kan ha samma värde, dvs dubbletter är tillåtna.
2.1 Skapa tupler
Tupler skapas med parenteser.
# Exempel 1.20 - Skapa en tupel
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
print(veckodag_tupel)
ger utskriften
('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
# Exempel 1.21 - Längden på en tupel, dvs antal element
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
antal_veckodagar = len(veckodag_tupel)
print(antal_veckodagar)
ger utskriften
7
# Exempel 1.22 - En tupel kan innehålla olika datatyper
tupel = ('måndag', 7, True, 3.14, 'söndag')
print(tupel)
ger utskriften
('måndag', 7, True, 3.14, 'söndag')
2.2 Ordning i tupler
Tupler har en ordning, som inte kan ändras. Element kan hämtas med ett index. Det kallas att tupler indexerade.
# Exempel 1.23 - Hämta först elementet
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
första_elementet = veckodag_tupel[0]
print(första_elementet)
ger utskriften
måndag
# Exempel 1.24 - Hämta sista elementet
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
sista_elementet = veckodag_tupel[-1]
print(sista_elementet)
ger utskriften
söndag
2.3 Ändring i tupler
Tupler är oföränderliga, vilket innebär att
element kan inte läggas till, ändras eller tas bort.
Det blir programkörningsfel vid försök att ändra tupler.
# Exempel 1.25 - Går inte att lägga till ett element i en tupel
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
veckodag_tupel.append('vilodag')
print(veckodag_tupel)
ger utskriften
Traceback (most recent call last):
File "main.py", line 2, in <module>
veckodag_tupel.append('vilodag')
AttributeError: 'tuple' object has no attribute 'append'
# Exempel 1.26 - Går inte att ändra ett element i en tupel
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
veckodag_tupel[0] = 'vilodag'
print(veckodag_tupel)
ger utskriften
Traceback (most recent call last):
File "main.py", line 2, in <module>
veckodag_tupel[0] = 'vilodag'
TypeError: 'tuple' object does not support item assignment
# Exempel 1.27 - Går inte att ta bort elementet ur en tupel
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
veckodag_tupel.pop()
print(veckodag_tupel)
ger utskriften
Traceback (most recent call last):
File "main.py", line 2, in <module>
veckodag_tupel.pop()
AttributeError: 'tuple' object has no attribute 'pop'
# Exempel 1.28 - Ta bort alla element ur en tupel
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
veckodag_tupel.clear()
print(veckodag_tupel)
ger utskriften
Traceback (most recent call last):
File "main.py", line 2, in <module>
veckodag_tupel.clear()
AttributeError: 'tuple' object has no attribute 'clear'
*För kännedom finns det en lösning för att lägga till, ändra och ta bort element i en tupel. Det är att omvandla tupeln till en lista göra ändringen och omvandla listan tillbaka till en tupel. Men det är inget vi använder i den här kursen.
2.4 Loopa genom en tupel
För att läsa ett element i taget ur en tupel går det att loopa genom den med hjälp av index eller utan index.
# Exempel 1.29 - Loopa genom en tupel med index
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
antal_element = len(veckodag_tupel)
for i in range(antal_element):
print(veckodag_tupel[i], end=' ')
ger utskriften
måndag tisdag onsdag torsdag fredag lördag söndag
# Exempel 1.30 - Loopa genom en tupel utan index
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
for item in veckodag_tupel:
print(item, end=' ')
ger utskriften
måndag tisdag onsdag torsdag fredag lördag söndag
2.5 Dubbletter i tupler
Tupler är indexerade. Eftersom element i tupler har ett index kan det alltså finns flera element med samma värde, dvs dubbletter.
# Exempel 1.31 - En tuple tillåter dubbletter
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag', 'måndag')
print(veckodag_tupel)
ger utskriften
('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag', 'måndag')
2.6 Metoder på en tupel
Metoden count
på en tupel räknar förekomsten av element med ett visst värde och returnerar antalet.
# Exempel 1.32 - Räkna antal förekomster av ett visst värde i en tupel
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
antal = veckodag_tupel.count('måndag')
print(f'I tupeln finns {antal} element med värdet måndag')
antal = veckodag_tupel.count('vilodag')
print(f'I tupeln finns {antal} element med värdet vilodag')
ger utskriften
I tupeln finns 1 element med värdet måndag
I tupeln finns 0 element med värdet vilodag
Metoden index
på en tupel ger index för första förekomsten av element med ett visst värde och returnerar indexet.
# Exempel 1.33 - Första förekomsten av ett visst värde
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
i = veckodag_tupel.index('lördag')
print(f'Första elementet i tupeln med värdet lördag finns på index {i}')
ger utskriften
Första elementet i tupeln med värdet lördag finns på index 5
Metoden index
på en tupel ger ett programkörningsfel om det sökta värdet inte finns i tupeln.
# Exempel 1.34 - Första förekomsten av ett visst värde
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
i = veckodag_tupel.index('vilodag')
print(f'Första elementet i tupeln med värdet vilodag finns på index {i}')
ger utskriften
Traceback (most recent call last):
File "main.py", line 2, in <module>
i = veckodag_tupel.index('vilodag')
ValueError: tuple.index(x): x not in tuple
Hur ska man kunna söka efter värde som kanske inte finns utan att programmet kraschar? Svaret är att först kontrollera om värdet finns i tupeln före anropet av metoden index.
# Exempel 1.35 - Första förekomsten av ett visst värde
veckodag_tupel = ('måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag', 'söndag')
if 'vilodag' in veckodag_tupel:
i = veckodag_tupel.index('vilodag')
print(f'Första elementet i tupeln med värdet vilodag finns på index {i}')
else:
print('Elementet vilodag finns inte i tupeln')
ger utskriften
Elementet vilodag finns inte i tupeln
Funktion | Beskrivning |
---|---|
len(tupel) | Ger tupelns längd, dvs antal element |
| |
Metod | Beskrivning |
tupel.count(e) | Räknar förekomsten av element e och returnerar antalet |
tupel.index(e) | Index för första förekomsten av elementet e och returnerar indexet |
Se mer om metoderna på w3schools: Tuple Methods.
2.7 Sammanfattning av tupler
- Skapas med paranteser ( )
- Är indexerade, vilket betyder att varje element har en given position. Elementen i listan har alltså en bestämd ordning.
- Elementen är inte ändringsbara. Kan inte skapa, uppdatera/ändra eller ta bort element.
- Dubletter är tillåtna, dvs flera element kan ha samma värde.
3. Sammanfattning
Samling | Beskrivning |
---|---|
Lista | Elementen är indexerade, dvs har en ordning. Element kan läggas till, ändras och raderas. Dubbletter är tillåtna. |
Tupel | Elementen är indexerade, dvs har en ordning. Element kan inte läggas till, inte ändras och inte raderas. Dubbletter är tillåtna. |
Samling | Syntax | Index | Lägga till, ändra, ta bort element | Dubletter |
---|---|---|---|---|
Lista | [ ] | Ja | Ja | Ja |
Tupel | ( ) | Ja | Nej | Ja |
Begrepp
Enkel datatyp: Datatyper heltal, decimaltal (flyttal), boolean som innehåller ett värde
Sammansatt datatyp: En typ av variabel som kan innehålla flera värden.
Samling: Ett annat namn för sammansatt datatyp.
Index: Position i t.ex. en lista eller tupel.
Lista: Samling där elementen har en ordning. Element kan läggas till, ändras och tas bort.
Tupel: Samling där elementen har en ordning. Element kan inte läggas till, ändras eller tas bort.
[ ] hakparenteser, square brackets
( ) parenteser, parantheses, round brackets
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.Inlämningsuppgift
Uppgift - Kasta mynt
Skapa en tupel med två element mynt = ('krona', 'klave')
som ska användas för att slumpa fram kast med ett mynt.
Skapa och initiera en variabel antal_krona = 0
som ska användas för att räkna antalet krona vid upprepade kast med myntet.
Kasta myntet 100 gånger och räkna antalet gånger det blir krona.
Vilken loop är lämplig att använda?
Använd funktionen choice
som finns i modulen random
för att slumpa kasten med myntet.
Använd inte en lista för att lagra alla kast, utan räkna
upp variabeln antal_krona
för varje kast som är krona.
Skriv ut antalet krona.
ExempelkörningEtt mynt kastas 100 gånger.
Antalet krona blev 43 stycken.
Krav: Inga break
eller continue
satser.
Använd f-strängar vid utskrifterna.
Frivillig utmaning
Deklarera en variabel, högst uppe i koden direkt efter import
och en tomrad,
där värdet talar om hur många gånger myntet ska kastas, t.ex. antal_kast = 100
ExempelkörningEtt mynt kastas 100 gånger.
Antalet krona blev 52 stycken.
Sedan ska det fungera så att om man endast byter värdet på variabeln
antal_kast = 100
till t.ex. antal_kast = 200
ska
beräkningen och utskriften bli korrekt.
ExempelkörningEtt mynt kastas 200 gånger.
Antalet krona blev 106 stycken.