729G04 PYTHON 6 JODY FOO Department of Computer and Information Science (IDA) Linköping University, Sweden
Dagens föreläsning Nya verktyg IPython Texteditorer Ny datatyp Dictionary Abstraktion Felhantering Referenser vs värden
IPython + Texteditor Labb 6, 7, 8: Texteditor och IPython Varför? För att prova på en annan miljö. Vanligare att använda en text-editor för att skriva kod. IPython är en bättre interaktiv miljö än Pythonskalet i IDLE.
IPython Bläddra bland tidigare kommandon med piltangenterna Tab-komplettering av anrop/variabler Tillgång till kommandon för att navigera i kataloger Magiska kommandon, t.ex. %run %run -i %reset %paste
Textfiler Minns vad en textfil (plain text) är: innehållet består av bytes som representerar tecken från en teckentabell med hjälp en specifik kodning/encoding. Exempel på textfiler: pythonkod, html-fil, css, xml, tecken-separerad data Exempel på icke-text: word-dokument, exceldokument, bilder, dokument i rtf-format, pdf-dokument
Vad gör en text-editor Redigerar textfiler, (plain text) Saknar formattering och layoutfunktionalitet (paragrafjustering, fetstil, understruket, kursivt stil etc) Har ofta funktioner och verktyg som är bra att ha vid redigering av kod- eller datafiler, men som inte behövs vid vanlig ordbehandling.
Exempel på funktionalitet redigera en kolumn använda regex-uttryck för sök och ersätt indenteringshjälp automatisk syntaxmarkering förslag på kompletteringar - variabler, funktioner stöd för olika teckenkodningar: läsa och skriva stöd för olika radbryt
Några texteditorer till Solaris emacs gedit jedit vi
Några texteditorer till Windows emacs jedit Notepad++ Komodo Edit Sublime Text vim
Några texteditorer till Mac emacs jedit Komodo Edit MacVim TextMate Textwrangler / BBEdit Sublime Text
TEXTEDITORER ÄR VIKTIGA FÖR PROGRAMMERARE
xkcd: real programmers
IPython och texteditorer i PUL Starta IPython: skriv ipython3 i skalfönster. Texteditorer: Välj t.ex. gedit eller kate. Hittas via "start-menyn" under Accessories.
Dictionaries Innan vi går vidare ska vi lära oss om datatypen dictionary.
Dictionaries - en mängd nycklar och värden nyckel:attribut {nyckel_1:attribut1, nyckel_2:attribut_2, nyckel_n:attribut_n }
Istället för index använder vi nyckeln person = {"namn":"jody", "twitter":"fnurl"} kurs = {"kurskod":"729g04", "kursnamn":"programmering och diskret matematik"} print(person["namn"]) print(kurs["kurskod"])
Vi kan ändra värden genom att använda nyckeln person = {"namn":"jody", "twitter":"fnurl"} kurs = {"kurskod":"729g04", "kursnamn":"programmering och diskret matematik"} print(person["namn"]) # kommer skriva ut 'jody' # Ändra namn på person person["namn"] = "Jody Foo" print(person["namn"]) # kommer skriva ut 'Jody Foo'
Vi kan lägga till element till ett dictionary person = {"namn":"jody", "twitter":"fnurl"} person["ålder"] = "ja"
Vi kan loopa genom ett dictionary person = {"namn":"jody", "twitter":"fnurl", "ålder":"ja"} # vanlig loop över ett dictionary går igeom nycklarna for key in person: print(key) # man kan använda nyckeln för att komma åt värdet for key in person: print(person[key]) # man kan även få ut både nycklar och värden for key, value in person.items(): print(key, value)
Dictionaries En dictionary har element precis som en lista, men istället för index, kommer man åt elementen med via nycklar. Alla datatyper som är oföränderliga (immutable) kan användas som nycklar, t.ex. numeriska värden, strängar och tupler.
ABSTRAKTION
TÄNK PERCEPTION
ABSTRAKTION: TVÅ KOMPONENTER
Datastuktur: vi använder inbyggda datatyper för att representera en typ av data som inte finns inbyggd Hjälpfunktioner: vi använder hjälpfunktioner för att lättare hantera vår egenkonstruerade datastruktur. Abstrakt datatyp (ADT): datastruktur + hjälpfunktioner
EN ADT FÖR EN FYRKANT
EN ADT FÖR EN PERSON
EN ADT FÖR EN SAMLING PERSONER
FELHANTERING
Felhantering Varför? Undvik att programmet kraschar. Ge användaren feedback om något går fel. Hur? Kontrollera indata från användaren. Kontrollera data som en funktion får - det är inte bara användaren som gör fel. Gör något vettigt om det blir fel. Ibland kan det vettiga vara att avsluta programmet - när?
REFERENSER TILL VÄRDEN KONTRA VÄRDEN
Referenser och föränderliga (mutable) datatyper s1 = "sträng1" i1 = 5 l1 = ["e1"] l2 = ["e1"] d1 = {"nyckel1":1} s2 = s1 i2 = i1 l3 = l1 l4 = l2 d2 = d1 s2 = "sträng2" # vad är s1? i2 = 4 # vad är i1? l3 = l1 + ["e2"] # vad är l1? l4.append("e2") # vad är l2? d2["nyckel1"] = 2 # vad är d1? s1: "sträng" i1: 5 l1: ["e1"] l2: ["e1", "e2"] d1: {"nyckel1": 2}
Referenser Variabler som står för datatyper som är oföränderliga innehåller ett värde. Variabler som står för datatyper som är föränderliga innehåller en referens.
Referenser i1 = 5 l1 = [1, 2, 3] i2 = i1 l2 = l1 i1 i2 l1 l2 5 5 1 2 3