729G74 IT och programmering, grundkurs Tema 3. Föreläsning 1 Jody Foo, jody.foo@liu.se
Föreläsningsöversikt Tema 3: Experiment Verktyget Python Vad kan man använda Python till? Python-paket Lite mer om terminalen, kommandon och skalet MuddyCards Python for-loopen dictionaries
Muddy Cards Skriv 3 positiva saker med Tema 2/Kursen hittills Skriv 3 negativa saker med Tema 2/Kursen hittills
Tema 3: Verktyget Python
Python som verktyg för kognitionsvetare? Artificiell intelligens: maskininlärning, kunskapsrepresentation, programmera robotar Lingvistik: språkteknologiska tillämpningar, korpuslingvistik Psykologi: Utforska data, räkna statistik, visualisera data Neurovetenskap: simulering, modellering, processa t.ex. fmri-bilder Allmänt: Automatisering, databearbetning, kognitionsvetenskapliga experiment, webbtjänster, IoT m.m.
Pythonpaket och moduler Pythonpaket tillhandahåller moduler som innehåller funktionalitet som inte finns med i Python "från början" Exempel pep8 och flakes: kontrollera pythonkod för fel och stilbrott requests: enklare HTTP-requests (kommunikation med webbservrar) beautifulsoup: paket för hantering av HTML och XML (t.ex. extrahera information från webben) bokeh: datavisualisering SciPy: databeararbetning, diagram och grafer (statistik, linjär algebra, m.m.) NLTK: naturligt språkbehandling Django och Flask: två ramverk för webbutveckling
Kort om att installera paket Kommandot pip Installera paket på IDA måste använda virtualenv virtualenv: ett sätt att skapa en egen pythonmiljö där man själv får bestämma vad som ska finnas med och inte (ungefär som ett eget rum när man bor hos sina föräldrar)
Terminalen, skalet, kommandon, program
VT100-terminal Server Terminal Terminal Terminal Terminal
Terminalen, skalet, kommandon, program Terminalen kommunicerar med servern Användaren kör ett skal (shell) som fungerar som användargränssnittet mot servern Via skalet kör kommandon och program
Standard input, standard output, standard error Skalet hanterar input och output som strömmar (tänk kanaler, slangar, rör). Terminal (emulerad) Skal (t.ex. bash, zsh, sh) Display Program Kommandon Skalet kan dirigera om information som ett program skickar till stdout (standard output) så att det används som input till ett annat program. Detta görs med 'pipe'-tecknet Disk Filer Man kan skicka en fil till ett program Standard input Standard output Standard error med < Man kan skicka output från ett program till en fil med >
Introuppgift 3 Lediga datorsalar
Ny datatyp: dictionary
Dictionaries Ett 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. Till skillnad från en lista, finns det ingen bestämd ordning på nyckel-värde-paren i ett dictionary.
Dictionaries - en mängd nycklar och värden # Ett dictionary omges av {} och består av nycklar och värden: # { nyckel_1:värde1, # nyckel_2:värde2, #..., # nyckel_n:värde_n } # Exempel dictionary1 = {"nyckel1":"värde 1", 345:"värde 2", (3):54 } Ett dictionary används för att lagra värden med associativ åtkomst, dvs att en nyckel kan användas för att komma åt ett värde. Som en lista, men med nycklar istället för index. Som nyckel kan alla oföränderliga (immutable) datatyper användas. Alla datatyper kan vara värden.
Istället för index använder vi nyckeln In [1]: dictionary1 = {"nyckel1":"värde 1", 345:"värde 2", (3):54 } In [2]: dictionary1["nyckel1"] Out[2]: 'värde 1' In [3]: dictionary1[345] Out[3]: 'värde 2' In [4]: dictionary1[(3)] Out[4]: 54 In [5]: Jämfört med en lista så använder vi nyckeln istället för index för att "komma åt" värdena.
Vi kan ändra värden genom att använda nyckeln In [5]: dictionary1 = {"nyckel1":"värde 1", 345:"värde 2", (3):54 } In [6]: dictionary1["nyckel1"] Out[6]: 'värde 1' In [7]: dictionary1["nyckel1"] = 1024 In [8]: dictionary1["nyckel1"] Out[8]: 1024 Precis som att man kan ange ett index vid tilldelning av ett värde på ett element i en lista, så kan man ange en nyckel vid tilldelning av ett associerat värde i en dictionary.
Vi kan lägga till element till ett dictionary In [9]: dictionary1 = {"nyckel1":"värde 1", 345:"värde 2", (3):54 } In [10]: dictionary1["ny nyckel"] = "nytt värde" In [11]: dictionary1["böcker"] = ["bok 1", "bok 2", "bok 3"] In [12]: dictionary1["ny nyckel"] Out[12]: 'nytt värde' In [13]: dictionary1["böcker"] Out[13]: ['bok 1', 'bok 2', 'bok 3'] Till skillnad från att använda index som är större än längden på listan, så kan man lägga till nya värden i ett dictionary genom att använda en ny nyckel.
Repetition: block
Exempel på block # I Python är block och indenteringsnivå samma sak! if i_am == "happy": print("inside the if block") print("still inside the if block") print("outside the if block")
Ny loop: for-loopen
for element in a_sequence: statement1 statement2 statement3...
Gå igenom en lista med for names = ["Adam", "Bethany", "Chris"] # gå igenom alla element i names. det aktuella elementet # refereras till via variabeln name i loopen. for name in names: # skriv ut det aktuella elementet i listan names print(name)
Ny datatyp: dictionary
Vi kan loopa genom nycklar i ett dictionary # loopa genom nycklar, explicit (ingen _bestämd_ ordning finns) for key in dictionary1.keys(): print("key: " + key) print("value: " + dictionary1[key]) # loopa genom nycklar, implicit (ingen _bestämd_ ordning finns) for key in dictionary1: print("key: " + key) print("value: " + dictionary1[key]) Vi kan komma åt alla nycklar antingen implicit eller explicit. Operatorn in kan också användas på nycklarna implicit: if key_i_am_looking_for in dictionary1
Vi kan loopa genom värden i ett dictionary # loopa genom värden, explicit (ingen _bestämd_ ordning finns) for value in dictionary1.values(): print("value: " + value) dict.values(), precis som dict.keys() ger en struktur (ett view objekt) som beter sig som en lista (men det är ingen riktig lista). Se https://docs.python.org/release/3.3.0/library/stdtypes.html#dict-views för mer information.
range() range() skapar en "virtuell lista med heltal" (en generator) som man kan använda som en vanlig lista med heltal. range(stop): lista med heltal från 0 och som är stop lång range(start, stop): lista med heltal från start till stop-1 range(start, stop, step): lista med heltal från start till
range() >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(range(4,6)) [4, 5] >>> list(range(10, 101, 10)) [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] >>> list(range(10, 0, -1)) [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
for med range() # Skriv ut siffrorna 0 till 9 (10 siffror) for i in range(10): print(str(i))