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.

Dokumentation för list

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

Om Caesarchiffer på Wikipedia

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

se säkerhets-SM.

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.

Atbash

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.

Kod på GitHub

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.