Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 41

Välkommen till DD1321!

Tillämpad programmering och datalogi,


Föreläsning 3
Alexander Baltatzis, kursansvarig, examinator
Kristina von Hausswolff, föreläsare/övningar del 1(fram till jul)
Information
Från “Moduler”
● Övningar

Labbar:
Digitalt i zoom
och i sal: Magenta
Använd kön för hjälp.
https://queue.csc.kth.se/Queue/Tilpro (öppnar en kvart innan labben).
Vi ska börja listor för redovisning (boka en tid ev. utanför labbtid.) Glöm inte legitimation!
Läs igenom Hederskodex:https://www.kth.se/eecs/utbildning/hederskodex/inledning-1.17237
2
Vad vi har behandlat:
Vad vi har gjort:
– Utskrift, utskrift till terminal
– styrstrukturer - villkor, loppar
– grundläggande datatyper och operationer
– funktioner
– listor (börjat)
– inläsning från en textfil (tittat på)

3
Dagens agenda

– repetition funktioner
– funktionen range
Datastrukturer:
– repetition lista
– dictionary
– sträng
– tupler

4
inbyggda funktioner, exempel
Funktion Indata Utdata

type variabel typen


typ=type(variabel)

print sträng None


print("Oj!")
int nr heltal
antal=int(nr)

http://docs.python.org/3/library/functions.html
range

range(n) n övre gräns 0, 1, 2,..., n-1


range(m, n) m startvärde m, m+1, m+2,..., n-1
range(m, n, s) s steg m, m+s, m+2s,..., n-1

range är en funktion som returnerar en range typ


den har egenskapen att kunna iterera (gå igenom
något steg för steg) men är inte av typen lista.
type(range(3)) returnerar <class 'range'>
https://docs.python.org/3/library/functions.html#func-range
listan

• representerar indexerade variabler t ex x3


• en följd av data, omgiven av hakparenteser

primtal = [2,3,5,7,11,13,17,19]

• kan innehålla data av valfri typ

dagar = ["tisdag","onsdag","fredag"]

• Du skapar en lista så här:

minLista = []
listor - index

• Exempel:
vikt = [5.2, 5.7, 5.1, 4.8, 5.2]

vikt[0] vikt[1] vikt[2] vikt[3] vikt[4]


5.2 5.7 5.1 4.8 5.2
for-slingan - lista

toner = ["do", "re", "mi"]


Tre olika sätt att gå igenom listan toner:
for ton in toner:
ton print(ton)

for index in range(3):


index print(toner[index])

for i, ton in enumerate(toner)


i och ton print(i, ton)
algoritm för ordgissning
En algoritm är en stegvis beskrivning av vad programmet ska göra. Exempel:

1. Slumpa ett ord.


2. Låt användaren göra en gissning
3. Så länge som gissningen är fel:
a) Om gissningen är efter ordet:
be användaren om ett tidigare ord och läs in ny gissning.
b) Om gissningen är före ordet:
be användaren om ett senare ord och läs in ny gissning.

4. När gissningen är rätt – skriv ut beröm.


#Ordgissning
def ordgissning(ordet):
""" Parameter är ordet som ska gissas """
gissning = input("Gissa ordet: ")
n=1
while gissning != ordet:
if gissning > ordet:
print("Ordet jag tänker på är före", gissning)
elif gissning < ordet:
print("Ordet jag tänker på är efter", gissning)
gissning = input("Gissa igen: ")
n += 1
print("Rätt på bara", n, "gissningar!")
def skapaLista():
""" Skapar en lista med frukter """
fruktlista = ["apelsin",\
"banan",\
"citron",\
"fikon",\
"granatäpple",\
"hallon",\
"mango",\
"nektarin",\
"papaya",
"satsuma",\
"vattenmelon",\
"yuzu",\
"äpple"]
return fruktlista
import random

def skapaLista...

def ordgissning...

def main():
fruktlista = skapaLista()
ordet = random.choice(fruktlista)
ordgissning(ordet)

main()

Från dokumentationen:
random.choice(seq)

Return a random element from the non-empty sequence seq.


listmetoder
Metod Beskrivning
li.append(x) Lägger till x sist i listan.
li.sort() Sorterar i stigande ordning.
li.reverse() Vänder listan.
li.insert(i,x) Stoppar in x på plats i.
li.pop(i) Plockar ut elementet på plats i.
li.remove(x) Tar bort första förekomsten av x.

https://docs.python.org/3/tutorial/datastructures.html#

li är här en lista. li.insert(3,”ros”) ändrar på listan li genom att lägga till “”ros” på platsen med index 3.
Flerdimensionella listor

Det går att ha listor i listor:


matris = [[9.2, 9.3, 9.8],
[5.4, 8.1, 6.5],
[7.1, 7.3, 7.1]]

matris[1] ger hela mittenraden[5.4, 8.1, 6.5]

matris[1][2] ger sista elementet på mittenraden, 6.5


algoritm för ordgissning
En algoritm är en stegvis beskrivning av vad programmet ska göra. Exempel:

1. Slumpa ett ord.


2. Låt användaren göra en gissning
3. Så länge som gissningen är fel:
a) Om gissningen är efter ordet:
be användaren om ett tidigare ord och läs in ny gissning.
b) Om gissningen är före ordet:
be användaren om ett senare ord och läs in ny gissning.

4. När gissningen är rätt – skriv ut beröm.


Exempel: kalender
def kalender(startdag, veckodag, månad):
"""Skriver ut en kalender
med veckodag, dag och månad"""
index = 0
for dag in range(startdag,31+1):
print(veckodag[index], dag, månad)
index = (index + 1) % 7

def main():
veckodag = ["måndag","tisdag","onsdag","torsdag","fredag","lördag","söndag"]

månad = "november"
startdag = 7
kalender(startdag, veckodag, månad)

main()
utskrift
måndag 7 november
tisdag 8 november
onsdag 9 november
torsdag 10 november
fredag 11 november
lördag 12 november
söndag 13 november
måndag 14 november
tisdag 15 november
onsdag 16 november
torsdag 17 november
fredag 18 november
lördag 19 november
söndag 20 november
import random

def skapaLista...

def ordgissning...

def main():
fruktlista = skapaLista()
ordet = random.choice(fruktlista)
ordgissning(ordet)

main()

Från dokumentationen:
random.choice(seq)

Return a random element from the non-empty sequence seq.


Exempel: kalender
def kalender(startdag, veckodag, månad):
"""Skriver ut en kalender
med veckodag, dag och månad"""
index = 0
for dag in range(startdag,31+1):
print(veckodag[index], dag, månad)
index = (index + 1) % 7

def main():
veckodag = ["måndag","tisdag","onsdag","torsdag","fredag","lördag","söndag"]

månad = "november"
startdag = 7
kalender(startdag, veckodag, månad)

main()
utskrift
måndag 7 november
tisdag 8 november
onsdag 9 november
torsdag 10 november
fredag 11 november
lördag 12 november
söndag 13 november
måndag 14 november
tisdag 15 november
onsdag 16 november
torsdag 17 november
fredag 18 november
lördag 19 november
söndag 20 november
dictionary - exempel

dagantal = {"januari":31,"februari":28,"mars":31}
print(dagantal["mars"])
kalenderprogrammet version 2
#Nu med en dictionary för antal dagar per månad
def kalender(startdag, veckodag, månad):
"""Skriver ut en kalender med veckodag, dag och månad"""
dagantal = {"januari":31,"februari":28,"mars":31,"april":30,"maj":31,"juni":30,"juli":31,\
"augusti":31,"september":30,"oktober":31,"november":30,"december":31}
slut = dagantal[månad] + 1
index = 0
for dag in range(startdag,slut):
print(veckodag[index], dag, månad)
index = (index + 1) % 7

def main():
veckodag = ["måndag","tisdag","onsdag","torsdag","fredag","lördag","söndag"]
månad = "oktober"
startdag = 11
kalender(startdag, veckodag, månad)

main()
dictionary

{"one":1, "two":2, "three":3}


dictionary = uppslagslista på svenska

• Två olika sätt att skapa en tom dictionary:


engelska = {}
engelska = dict()
• Lagrar datapar:
engelska["läsa"] = "read"
• Varje datapar har en nyckel och ett värde.
• Nycklarna kan vara strängar eller tal (eller tupler).
nyckel = key
• Värdena kan vara av vilken typ som helst.
värde = value
dictionary - metoder

Metod Beskrivning
d.keys() Ger alla nycklar
d.values() Ger alla värden
d.items() Ger nyckel & värde
d.pop(n) Plockar ut det värde som har
nyckel n
if n in d: Finns nyckeln n i d?

https://docs.python.org/3/library/stdtypes.html#dict
for-slingan - dictionary

pets = {"cat":5, "dog":2, "bird":4}

Två olika sätt att gå igenom dictionary:n pets

for pet in pets:


print(pet)

for pet, number in pets.items():


print(number, pet)
sträng
"abcde"
strängar - index
• Varje tecken i en sträng har ett index.
• Exempel:
mat="pizza"

mat[0] mat[1] mat[2] mat[3] mat[4]


"p" "i" "z" "z" "a"
for-slingan strängar
s = "supercalifragilisticexpialidocious"

for bokstav in s:
print(bokstav, end=” “)
print(“\n”)

for index in range(len(s)):


if (index == len(s)-1):
print(s[index])
else:
print(s[index], end=”, “)
immutable - går inte att ändra
mat[0]➔"p" Titta går bra…

mat[0] = "m" ...men inte ändra värdet.


slicing - delsträngar
mat[1:3]➔"iz" Från position 1 och fram till position 3.
Delsträng (3:e ingår inte).
mat[:4]➔"pizz" Från början till 4:e.

mat[2:]➔"zza" Från 2:a till slutet.

mat[-3:]➔"zza" Tar med 3 från slutet

mat[2:-1]➔"zz" Börjar på position 2 men tar bort en i slutet

mat[:]➔"pizza" Från början till slutet.


Uppgift: Vad blir s[3:]?

s = ”aktie” A. akt
print(s[3:])
B. ie

C. t

D. tie
strängmetoder
Metod Beskrivning
s.upper() returnerar s med versaler
s.lower() returnerar s med gemena
s.isalpha() returnerar True om bara bokstäver
s.strip() returnerar strängen utan " abc "
s.split() returnerar en lista med varje ord
strängmetoden split()
mening = "Det var en gång"
mening2= " Så bra ! "
orden = mening.split()
nyMening=mening2.strip()

split delar vid mellanslag


Returnerar en lista med orden
["Det", "var" "en", "gång"]
strip tar bort mellanslag i bö rjan och slutet, returnerar strängen
"Så bra !"
tupel
(1, 2, 3, 4, 5)
tupler

En tupel är ungefär som en lista omgiven av ()


prima =(2,3,5,7,11,13,17,19)
print(prima[0])

Men en tupel är konstant - den går inte att ändra:


prima[0] = 1
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
prima[0] = 1
TypeError: 'tuple' object does not support item assignment
datastrukturer

• sträng " N O U G A T "

• lista 'blå' 'grön' 'röd' 'gul'

• tuppel 'blå' 'grön' 'röd' 'gul'

• dictionary 'blå' 'grön' 'röd' 'gul


'bleu' 'vert' 'rouge' 'jaune'
random-funktioner
Funktion Resultat

tärningskast=random.randint(1,6) Slumpar ett heltal: 1,2,3,4,5 eller 6

uddatal=random.randrange(1,6,2) Slumpar ett udda heltal: 1,3 eller 5

decimaltal=random.random() Slumpar ett decimaltal mellan 0.0


och 0.999…

namn = ["Kit", "Nour", "Grace"] Slumpar ett av namnen


slumpnamn = random.choice(namn)
random.shuffle(namn) Blandar om namnen
Lite om Python
I den här kursen kommer vi använda Python som programspråk.
Lite info om språket:
Python - interpreterande språk (ej kompilerande som Java).
Python - dynamiskt typat (man behöver inte ange vilken typ till skillnad från
Java).
Python - flerparadigmspråk ( språket stödjer flera olika sätt att strukturera kod).
Python - listor är mycket användbara, indrag har betydelse ger kompakt text.
(https://sv.wikipedia.org/wiki/Python_(programspr%C3%A5k)

41

You might also like