7100 listor
Ibland blir det lättare om man kan gruppera flera variabler. Nedan följer ett exempel.
Kod följer nedan.
#Det som visas efter hashtag (#) nedan är det som
#skrivs ut av print
inköpslista = ["bröd", "smör", "ost"]
print(inköpslista)
#['bröd', 'smör', 'ost']
index: 0, 1, 2, ... och -1, -2, ...
print("element vid index 0: ", inköpslista[0])
#element vid index 0: bröd
print("element vid index 1: ", inköpslista[1])
#element vid index 1: smör
print("element vid index 2: ", inköpslista[2])
#element vid index 2: ost
print("från slutet med negativa index")
#från slutet med negativa index
print("element vid index -1: ", inköpslista[-1])
#element vid index -1: ost
print("element vid index -2: ", inköpslista[-2])
#element vid index -2: smör
print("element vid index -3: ", inköpslista[-3])
#element vid index -3: bröd
listans längd - len()
print("antal element i listan: ", len(inköpslista))
#antal element i listan: 3
lägg till element i listan - append()
inköpslista.append("fil")
print(inköpslista)
#['bröd', 'smör', 'ost', 'fil']
lägg till lista på slutet av listan - extend()
inköpslista.extend(["tomat", "gurka"])
print(inköpslista)
#['bröd', 'smör', 'ost', 'fil', 'tomat', 'gurka']
sätt in element på given plats - insert()
inköpslista.insert(1, "skorpor")
print(inköpslista)
#['bröd', 'skorpor', 'smör', 'ost', 'fil', 'tomat', 'gurka']
ta bort givet element - remove()
inköpslista.remove("fil")
print(inköpslista)
#['bröd', 'skorpor', 'smör', 'ost', 'tomat', 'gurka']
Överkurs nu: Om "fil" finns på flera ställen i listan tas bara den första förekomsten bort.
ta bort och returnera sista elementet - pop()
last = inköpslista.pop()
print("last removed: ", last)
#last removed: gurka
print(inköpslista)
#['bröd', 'skorpor', 'smör', 'ost', 'tomat']
ta bort och returnera valfritt element - pop(0)
first = inköpslista.pop(0)
print("first removed: ", first)
#first removed: bröd
print(inköpslista)
#['skorpor', 'smör', 'ost', 'tomat']
sortera - sort()
inköpslista.sort()
print("sorterad: ", inköpslista)
#sorterad: ['ost', 'skorpor', 'smör', 'tomat']
omvänd ordning
inköpslista.reverse()
print("omvänd ordning: ", inköpslista)
#omvänd sortering: ['tomat', 'smör', 'skorpor', 'ost']
ett elements index - index()
print("skorpor har index:", inköpslista.index('skorpor'))
#skorpor har index: 2
finns ett element i listan? - in
if 'skorpor' in inköpslista:
print('skorpor på listan')
else:
print('skorpor saknas på listan')
#skorpor på listan
finns ett element inte i listan? - not in
Används på samma vis som 'in' se exempel ovan.
Ett andra exempel
Kod följer nedan.
# Det som visas efter hashtag (#) nedan är det som
# skrivs ut av print
skostorlek = [40, 41, 41, 42, 42, 43, 43, 43, 43, 44, 44, 45]
minsta elementet i en lista - min()
print("min: ", min(skostorlek))
#min: 40
största elementet i en lista - max()
print("max: ", max(skostorlek))
#max: 45
antal element i listan - len()
print("antal: ", len(skostorlek))
#antal: 12
summan av elementen i listan - sum()
print("summa: ", sum(skostorlek))
#summa: 511
medel genom kombination av sum() och len()
medel = sum(skostorlek) / len(skostorlek)
print("medel: ", medel)
#medel: 42.583333333333336
Exempel på for-slinga
# Det som visas efter hashtag (#) nedan är det som
# skrivs ut av print
lista = [1, 3, 3, 4, 3, 6, 3, 2]
antalTreor = 0
for tal in lista:
if (tal == 3):
antalTreor = antalTreor + 1
print("antal treor: ", antalTreor)
#antal treor: 4
Veta mer?
Kör följande kod i python-konsollen:
type(["blå", "gul", "röd"])
Svaret blir:
<class 'list'>
I korthet kan man säga att list är en datatyp för listor.
Kolla gärna upp count()
i dokumentationen för list.
Exempel - ändra värde på element i lista mm
Kod:
import random
tärningar = []
for i in range(20):
# lägg till slumptal, 1 till 4, i listan tärningar
tärningar.append(random.randint(1,4))
print(tärningar)
print("min", min(tärningar))
print("max", max(tärningar))
print("summa", sum(tärningar))
print("antal fyror", tärningar.count(4))
# räkna antal ettor
antal_ettor = 0
for tärning in tärningar:
if tärning == 1:
antal_ettor = antal_ettor + 1
print("antal ettor", antal_ettor)
# fungerar inte om vi vill ändra på värden i listan
for tärning in tärningar:
tärning = 5 - tärning
print(tärningar)
# ändra på värden i listan
# invertera listan: 1 <--> 4 och 2 <--> 3
for i in range(len(tärningar)):
tärningar[i] = 5 - tärningar[i]
print(tärningar)
Exempel på utskrift vid körning:
[2, 3, 3, 4, 4, 4, 4, 2, 3, 1, 3, 2, 4, 1, 2, 1, 1, 4, 3, 4]
min 1
max 4
summa 55
antal fyror 7
antal ettor 4
[2, 3, 3, 4, 4, 4, 4, 2, 3, 1, 3, 2, 4, 1, 2, 1, 1, 4, 3, 4]
[3, 2, 2, 1, 1, 1, 1, 3, 2, 4, 2, 3, 1, 4, 3, 4, 4, 1, 2, 1]
Uppgifter
1 statistik för tärningskast
Gör följande
kasta en sexsidig tärning 10 gånger
spara resultat i lista
sortera med minsta först
beräkna summan
beräkna medelvärde
ange minsta
ange största
räkna antalet sexor
vilken valör är vanligast? (svår)
skriv ut för att kontrollera att det blev rätt
2 Primtal (svår)
Spara alla primtal under 100 i en lista. Skriv ut listan.
3 Rövarspråket
Skriv ett program där man kan mata in ett ord och få det översatt till rövarspråket
. Ett exempel följer.
glad bli gogloladod
Konsonanter följs av o och konsonanten en gång till. Vokaler förblir som de är.
Tips! Text kan hanteras som en lista, se exempel nedan.
ord = "gul"
print(ord[1])
# utskriften blir
# u
4A Caesarchiffer
Skriv ett program som chiffrerar en text med Caesarchiffer.
I korthet byts a mot b och b mot c och z mot a. Varje bokstav i texten byts mot nästa tecken i alfabetet. Ett exempel följer
pyton blir qzupo
Använd funktioner.
Tips från :
>>> 'PYTON'.lower()
'pyton'
>>> ord('a')
97
>>> ord('z')
122
>>> chr(97)
'a'
>>> chr(122)
'z'
Testa att programmet fungerar. Kryptera ett meddelande.
4B
Skriv sedan kod så att du kan dekryptera. Testa.
4C
Utöka programmet så att det kan skifta ett valbart antal steg. Med två steg byts a mot c.
4D
Skriv ett program som kan knäcker Caesarchiffer, det vill säga testar alla möjliga rullningar.
Kan du dekryptera:
lwthni_lnqqfw_qtb_bjnlmy_utqdstrnfq_rzqynuqjx
5 Yatzy
A. Antal ettor
Kasta fem tärningar
Räkna antalet ettor
Skriv ut antalet ettor
B. Yatzy - fem lika
Kasta fem tärningar
Visar alla tärningen samma tal?
Skriv i så fall ut: Yatzy
Om inte skriv ut: Inte yatzy
C. Yatzy 50
6 Fler chiffer eller krypteringar
Exempel på fler sätt att kryptera på följer nedan. Skriv ett program som kan kryptera och dekryptera samt knäcka kod.
7 Black Jack - större uppgift
Du ska skriva ett program där man kan spela Black Jack mot datorn.
Spelets regler
Dealern ger spelaren två kort och sig själv ett kort. Du erhåller din poäng genom att addera kortens värden.
Kortens värde i Black Jack är för korten två till tio valören som står på kortet. Knektar, damer och kungar räknas som tio och ess räknas som elva eller ett. Esset räknas alltid som elva förutom när din poäng överstiger 21, då räknas esset som ett.
Enklare regler för kortens valör
Om du vill göra det lite lättare för dig själv kan du låta kortens värde vara som följer. Korten två till tio har det värde som kortet anger, ett ess är värt 1, en knekt är värd 11, en dam är värd 12 och en kung är värd 13.
spelets gång
Spelaren måste välja ett av följande alternativ:
Hit – Om du inte är nöjd med din poäng och vill ha ett kort till. Du fortsätter att välja hit tills du är nöjd med din poäng eller blir tjock.
Stand – Om du inte vill ha fler kort.
Efter att spelaren gjort sina val spelar dealern sin hand. Dealern måste spela sin han enligt följande regler:
- Om spelaren blir tjock vinner dealern utan att behöva spela sin hand.
- Dealern måste välja att ta ett kort till om hans poäng är lägre än 17. Annars måste han välja att inte ta fler kort.
tips
Börja utan kortfärger. Gör en lista som består av fyra 1:or och lika många 2:or och så vidare. Det är kortleken.
Vem vinner?
Spelaren vinner om han har fler poäng än dealern. Spelaren förlorar om han blir tjock (mer än 21 poäng). Dealern förlorar också om han blir tjock.
Objektorienterad version av Black Jack
För den som vill lära sig objektorienterad programmering finns en start på Black Jack i länkad fil på GitHub.
Det finns tre klasser:
- Card - representerar ett kort t.ex. hjärter dam
- Deck - kortleken med 52 kort
- Hand - en spelares hand, det vill säga korten som spelaren har.
- BlackJack - Anrop av metoden play() i BlackJack startar spelet.
Arbetsgång:
*Ladda ner koden. * Kör koden och se vad som händer. * Ändra på koden så att reglerna för Black Jack följs.
8 Yatzy
Detta är en stor uppgift som tar lång tid att lösa.
Ettor
Tvåor
Treor
Fyror
Femmor
Sexor
Bonus
Ett par
Två par
Tretal
Fyrtal
Liten stege
Stor stege
Kåk
Chans
Yatzy
Fem tärningar kastas.
Välj vilka som sparas. Kasta om övriga.
Välj vilka som sparas. Kasta om övriga.
Välj en av ovanstående att skriva in summan av tärningsögonen på. Bonus kan ej väljas.
Yatzy fås om fem tärningar är lika. Det ger 50 poäng.
Bonus på 50 poäng fås om summan av ettor, tvåor, ..., sexor är minst 63.
Den som har störst totalsumma vinner.