Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
1
Föreläsning 5Programmeringsteknik och
Matlab DD1312
• Hashtabeller• filer• Särfall (exception)
1/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Dictionary (Hashtabell)
• En hashtabell kan ses som en listadär programmeraren associeraregna nycklar (index) till varjeelement som ska läggas i tabellen :
”dec””jan””maj”Element:
1215Nycklar:
2/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Skapa hashtabell
• Skapa med måsvingar och par av nyckeloch värde, enligt nedan:
ht={1:”jan”, 12:”dec”, 5:”maj”}
• Skapa med dict():ht=dict()ht[1]=”jan”ht[12]=”dec”ht[5]=”maj”
2
3/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Identifiera element• Element identifieras mednyckelobjekt, men det måste finnasett objekt lagrat med given nyckel:
print (ht[1])print (ht[5])print (ht[15])
Vad skrivs ut av ovanstående?
4/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Kontrollerad åtkomst• Alternativ 1: Kontrollera förekomstinnan åtkomst.if 15 in ht:
x = ht[15]
• Alternativ 2: Använd get() meddefault-värde:x = ht.get(15, ”FINNS EJ!”)
y =ht.get(15)
Vad får x och y för värde om 15 inte finns itabellen?
5/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt Skapa hashtabell frånlistor
• Hashtabell kan skapas från tvålistor som att dra ihop ettblixtlås:
keys= [1,12,5]
values=[”jan”,”dec”,”maj”]
parvis=zip(keys,values)
ht=dict(parvis)1 12
jan dec
5
maj
zip
3
6/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt Listor med nycklaroch värden
• Metoden keys() returnerar enlista med alla nycklar• Metoden values() returerar enlista med alla värden
keyList = list(ht.keys())
valList = list(ht.values())
7/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt Ytterligareoperationer
• Antalet element i tabellen:len(ht)
• Ta bort element:del ht[12]
• Kopiera hela tabellen:htcopy = ht.copy()
8/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Listor och forlista = 3*[2] #skapar en lista med 3matris=4*[3*[2]]print (matris)matris[0][1]= 5print (matris)
Vad skrivs ut? Varför?Rita en minnesbild som kan förklara detta.
4
9/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Minnesbilder
2 2 2 2 2 2
2 2 2
2 2 2
2 2 2
matris matris
10/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Lösning
matris=[3*[2] for i in range(4)]
print matris
matris[0][1] = 5
print(matris)
Vad skrivs ut av ovanstående kod?
11/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Öppna filEn fil kan öppnas för olika ändamål:• För läsning:
file = open(”filename.txt”, ”r”)
• För skrivning (skriver över befintlig fil)file = open(”filename.txt”, ”w”)
• För tillägg till slutet av filen:file = open(”filename.txt”, ”a”)
• Ytterligare alternativ ”r+”, ”w+”, ”a+”fungerar som utan plus fast man kan bådeskriva och läsa.
5
12/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Läs från öppen fil• Hela filen:
contents = file.read()
• Bestämt antal tecken:fiveChars = file.read(5)
• En rad:oneLine = file.readline()
• Alla rader till en lista:allLines = file.readlines()
13/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt Skriv till öppen fil ochstäng
• Skriv strängfile.write(”Hejsan hoppsan”)
• Elementen i en lista:file.writelines(stringlist)
• När du läst eller skrivit klart från/tillen fil så stänger du den:file.close()
14/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Exception
• try och except är reserverade ordsom används för hantering avexekveringsfel.
plista= ['s','v','m','mp','fp','c','kd']try:
i=int(input(”Ange index: ”))
parti=plista[i]except:
print (”Nagot fel intraffade”)
6
15/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Syntax
try:
Kod som kan orsaka något typav exekveringsfel
except:
Kod som exekveras om ochendast om det blir något fel ikodblocket efter try
16/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Så här går det till
Kod i blocket mellan try: ochexcept: börjar exekvera, men såfort ett fel uppstår i någon radavbryts exekveringen direkt,resterande rader i blocketexekveras inte och koden somfinns i blocket efter except: börjarexekvera i stället.
17/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Mer detaljeradpista= ['s','v','m','mp','fp','c','kd']
try:
i=int(input('Ange index: '))
parti=plista[i]
except IndexError:
print 'ogilltigt index'
except ValueError:
print 'index maste var ett tal'
except:
print ’uppstod något tokänd fel!’
7
18/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Olika typ av fel
Uppstår när divisor i en divition är 0ZeroDivisionError
Uppstår när funktion används medett parameter med korrekt typ menfel värde
ValueError
Uppstår när en inbyggd operationeller funktion tillämpas på ett objektav olämplig typ
TypeError
Uppstår när en nyckel inte finns iuppsalgslista
KeyError
Uppstår vid tillgång till ett index i enlista som inte finns
IndexError
uppstår när man vill öppna en filsom inte finns.
IOError
BeskrivningTyp
19/20
Sammanfattning
Felhantering
Filhantering
Referenser
Dictionary(Hashtabell)
Översikt
Sammanfattning
• Dictionary, är väldigt lämplig försnabba sökningar
• Var noga med referenser, det ärendast typen tal (int, float) som inteanvänder referenser.
• Filer kan öppnas för olika ändamål,lösning,skrivning och tilläggning avdata
• try, except används för atthantera exekveringsfel.