300 likes | 451 Views
Programmering med Python i MENA1000 Introduksjon og litt til…. Truls Norby. Truls Norby Kjemisk institutt/ Senter for Materialvitenskap og nanoteknologi (SMN) Universitetet i Oslo FERMIO Forskningsparken Gaustadalleen 21 N-0349 Oslo truls.norby@kjemi.uio.no.
E N D
Programmering med Python i MENA1000Introduksjon og litt til… Truls Norby Truls Norby Kjemisk institutt/ Senter for Materialvitenskap og nanoteknologi (SMN) Universitetet i Oslo FERMIO Forskningsparken Gaustadalleen 21 N-0349 Oslo truls.norby@kjemi.uio.no Programmering er nyttig, nødvendig og givende Direkte moro!?
Programmering med Python i MENA1000 er en miniversjon av INF1100 • En første introduksjon til å programmere datamaskiner • Programmering er svært viktig i industri og forskning • Programmering er i seg selv en akademisk utfordring og gjenstand for forskning og utvikling og kommersialisering • Programmering vil bli brukt i mange senere emner • INF1100 er koordinert med MAT1100 og MAT-INF1100: • i MAT1100 lærer du matematikk (kalkulus) • i MAT-INF1100 lærer du en ”datamaskinvennlig” versjon av matematikken • i INF1100 lærer du å skrive programmer for å regne med denne datamaskinvennlige versjonen av matematikk • Du vil se matematikk og anvendelser fra ulike perspektiver i disse tre emnene • Hvis du som MENA-student ikke får tatt INF1100 må du lære programmering bl.a. ved hjelp av tilbudet i MENA1000, samt egeninnsats
Undervisning i programmering i MENA1000 • Kollokvier (”øvelser”) i kurs-uke 1 • Introduksjon • Lære å logge inn og skrive, redigere, lagre og utføre et Python-program • Programmeringstemaer i enkelte forelesningstimer • Spesialhjelp i løpet av enkelte kollokvier • Programmeringsoppgave i hver laboppgave-innlevering • Egeninnsats • Bruk INF1100 (web, materiell, undervisningstilbud) • Programmér aktivt • Liten oppgave i programmering på del- og slutteksamen.
Hvordan du må jobbe…la oss høre Hans Petter Langtangens ord for INF1100: • Det er utviklet en egen lærebok til INF1100 (og noe for MENA1000…) • Foran hver forelesning må du ha lest ukens kapittel • Foran hver oppgaveløsning i plenum må du selv ha forsøkt å løse oppgavene for hånd eller med maskin (og selvfølgelig først ha lest ukens pensum i boken!) • Spesielt forelesningene går frem mye fortere enn klasseromsundervisningen i videregående skole • Forelesningene er basert på foiler og demonstrasjoner – foilene kan lastes ned mens demonstrasjonene må du huske... • Undervisningen forutsetter at du er forberedt! • Hver uke må du levere inn oppgaver (løst på terminalstuen) (i MENA1000 leverer du inn sammen med laboppgaver)
Om å lære programmering (fra INF1100): • Du må lære programmering gjennom å programmere selv • Programmering er krevende i begynnelsen – så blir det gøy! • Oppskrift på suksess: vær godt forberedt til undervisningen (jfr. følg forrige foil) – det gir deg mest fritid og mest læring • Forventet arbeid i INF1100: 6 t undervisning + 7 t selvstudium = 13/uke • Eksemplene i INF1100 handler om bruk av matematikk og bygger på maksimal matematikk-fordypning fra vgs • Vi antar at du tar MAT1100 og MAT-INF1100 i parallell (eller at du har tatt tilsvarende kurs) • Det er fordel med noe fysikk fra vgs for å forstå fysikk-eksemplene • INF1100 vil belyse matematikk fra en ny vinkel og hjelpe deg til å forstå matematikk bedre samtidig som du lærer å programmere • Vi bruker matematikken hovedsakelig som verktøy til å løse problemer i fag som fysikk, biologi, finans, ...
Mer om Python(fra et INF1100 lysark) • The INF1100 book contains only fragments of the Python language (intended for real beginners!) • The slides in the education are even briefer • Therefore you will need to look up more Python information • Primary reference • The official Python documentation at docs.python.org • Very useful: The Python Library Reference, especially the index • Example: what can I find in the math module? Go to the Python Library Reference index, find ”math”, click on the link and you get to a description of the module • Alternative: pydoc math in the terminal window (briefer) • Note: for a newbie it is difficult to read manuals (intended for experts) – you will need a lot of training; just browse, don’t read everything, try to dig out the key info
Kom i gang med å programmere i Python • Python er en programpakke som tolker og utfører Python-programmer som du skriver. • Som del av pakken har vi programmene emacs og/eller idle – programmer som hjelper deg med å skrive og holde orden på programmene dine. De gjør også jobben med å påkalle selve Python-programmet når du ber om få sjekket, tolket og utført programmet ditt. • Python-pakken må være tilgjengelig på din datamaskin lokalt eller via nettverk • Python-pakken skal kunne kjøres fra alle UiO sine datamaskiner. • Sett deg ved en ledig datamaskin (terminal) og logg inn med ditt vanlige brukernavn og passord.
Hvis maskinen har linux operativsystem • Hvis datamaskinen er en Linux-maskin, høyreklikk og opprett et nytt vindu. • I dette vinduet skriver du emacs testprogram1.py (og Enter). • Systemet finner da emacs-programmet og utfører dette. Det oppretter i sin tur python-programmet ditt, som vi nå har kalt testprogram1.py. Det at du har .py i navnet forteller emacs at det er et python-program, slik at emacs oppfører seg deretter. • Gå frem til lysark ”Skriv et kort program”
Hvis maskinen har Windows operativsystem • Hvis maskinen er en Windowsmaskin, klikk Start, Programmer og se etter Python. • Hvis maskinen har Python, finn og klikk på idle eller emacs. • Hvis maskinen ikke har Python: • Klikk Start, Programmer, Tilbehør, Tilkobling til eksternt skrivebord (Engelsk: Start, Programs, Accessories, Remote Desktop Application) • Det kommer opp et vindu der du skriver windows.ifi.uio.no • Du kobles da til en Windows-server på ifi (Institutt for informatikk). • Logg deg på i de neste vinduene med ditt vanlige brukernavn og passord. • Nå vil du finne Python med Idle: Klikk Start, Programmer, Python, Idle • Uansett om du kjører på maskinens Windows eller ifi’s emacs eller idle: • Det vinduet som kommer opp i først er et ”Skall” – et vindu der programmet kommuniserer med deg. • Klikk på Fil og åpne et nytt vindu. Dette er vinduet der selve programmet skrives. • I det nye vinduet Klikk på Fil og lagre som ”testprogram1.py’
Skriv et kort program • Uansett om du er på linux eller Windows kan du nå skrive linjer med kode. Hver linje avsluttes med Enter-tasten • Skriv for eksempel disse to programlinjene, helt eksakt: # Kommentar: Dette er et testprogram. print ”testing…” • Test programmet: I rullemenyene, finn og klikk Run. • Hvis alt er korrekt får du en utskrift på skjermen: Testing… • Hvis du har tastet feil, kan det hende at du får en feilmelding. Korriger og prøv Run igjen. • Utforsk menyene: Lagre filen. Lagre filen med nytt navn. Åpne en lagret fil. Rediger programmet. Lagre igjen. Utfør programmet igjen. • Når du er ferdig, lukk og logg ut. • Nå kan du begynne å lære deg programmering ved å prøve selv etter hvert som du lærer nytt stoff ved eksempler.
Om å bruke æ, ø og å • Hvis du bruker æ, ø og å vil Python komme med en advarsel når du kjører programmet. • Det foreslår å sette inn en kode i første linje, for eksempel # -*- coding: utf8-*- Ved å trykke “Edit My File” knappen som kommer opp, skrives koden rett inn for deg. Ved å trykke OK lagres filen på en måte som godtar disse bokstavene. Etter dette vil den godta æ, ø og å. • Bruk æ, ø og å bare i kommentarer og utskrift – aldri i variabelnavn.
Casting • Casting: Konvertering mellom variabel-typer Generelt: Ny_variabel = Ny_type(Gammel_variabel) Eksempler: Tekst = ‘123.4’ Flyttall = float(Tekst) Flyttall = float(Heltall) Heltall = int(Flyttall) Heltall = int(Tekst) Tekst = str(Flyttall) Tekst = str(Heltall) Den samme variabelen kan skifte type. Eksempel: Input = ‘123.4’ #Input er nå en string Input = float(Input) #Input er nå blitt en flyttallsvariabel
If- og if-else-forgreininger • Med If-forgreininger kan vi velge forskjellige løp i programmet • Eksempel med ballens høyde: Vi skriver bare ut verdien HVIS høyden er > 0, dvs. over bakken. if y >= 0: print ‘høyden er ‘,y Vi kan også bruke if else: if y >= 0: print ‘høyden er ‘,y else: print ‘Landet!’
Heltall - flyttall • Operasjoner mellom heltall resulterer i heltall: 3 / 2 = 1 • Derfor bør vi ofte gjøre om heltallsvariable til flyttall før slike operasjoner. • For konstanter kan vi bruke komma: 3.0 / 2 = 1.5
If-elif-else-forgreininger • Hvis vi har flere valg enn to kan vi bruke elif (else-if): if y > 0: print ‘høyden er ‘,y elif y==0: print ‘dunk!‘ else: print ‘Har landet!’
while-løkker • brukes når vi vil bruke samme program-del (gjøre samme operasjon) flere ganger, inntil et kriterium er nådd. • Anta at vi vil finne tiden det tar før høyden til ballen er null: v0 = 5 g = 9.81 t = 0.0 while v0*t - 0.5*g*t**2 >= 0: t = t + 0.1 # kan også skrives t += 0.1 print t Merk: Bare de linjene som er indentert etter løkka er i løkka og repeteres. Hvis du glemmer å øke t i løkka, vil løkka gå uendelig – programmet synes å ha gått i stå, men det løper egentlig i bakgrunnen. For å stoppe et løpsk program, trykk Ctrl-D.
Mer avansert: while løkke og lister • Vi vil lagre forløpet til ballkastet; alle høydene og tidene: v0 = 5 g = 9.81 t = 0.0 tider = [t] #Vi starter med en liste med bare startverdien hoyder = [0] i = 0 # en tellevariabel for antall ganger vi har gått igjennom løkka # Den teller også indeksen på listene while hoyder [i] >= 0: i += 1 # Vi øker telle-variablen tider.append(i*0.1) t = tider[i] hoyder.append(v0*t -0.5*g*t**2) print tider print hoyder
Vi bruker en while-løkke til å lage en pen utskrift av listene j = 0 n = len(tider) # Funksjonen len(x) gir lengden på listen print "|%10s|%10s|" % ("Tid", "Høyde") print "-------------------------------------" while j < n: print "|%10f|%10f|" % (tider[j], hoyder[j]) j += 1 print "-------------------------------------"
for-løkke • Samme utskrift med en for-løkke: n = len(tider) print "|%10s |%10s|" % ("Tid", "Høyde") print "-------------------------------------" for j in range(n): print "|%10f |%10f|" % (tider[j], hoyder[j]) print "-------------------------------------“ Legg merke til at for-løkken i Python ikke er som i de fleste andre språk (for j = 1 to n…) men for istedet for j in range(n)…
Funksjoner • Funksjoner i python likner på funksjoner i matematikken. • Funksjoner er definisjoner på hva som skal gjøres (funksjonsblokken) med noen parametre vi sender inn og hva som skal komme ut. Som en boks som produserer noe fra noe (annet). • En funksjon begynner med def, så funksjonsnavn, en parentes med navn på parametervariablene og et kolon. Så kommer selve funksjonsblokken. • Funksjonen kjøres bare når den kalles • Vi må definere funksjonen før vi kan kjøre den. (Høyere opp i programmet.)
Funksjoner • Funksjonen returnerer en verdi ved kommandoen return • Funksjoner kan også utføres uten å returnere noe. • Funksjoner bruker for å unngå å gjenta kode som brukes flere ganger; gir ryddigere program. • Hold funksjonene korte; del evt. opp i flere.
Funksjoner – import fra pakker • Ikke alle må finne opp kruttet på nytt • Ofte er de ferdiglagde funksjonene raskere enn det vi kan skrive selv. (python er et tregt språk, pakker er skrevet i c,c++ eller FORTRAN) • Hvordan importere alt • Hvordan importere noe • Det finnes veldig mange funksjoner. Her skal vi lære om/ bruke: • Standard python • math, random, sys, time • Tileggspakker: • numpy, scitools • Finne ut mer: pythons hjemmeside, google. Lurer du på hvordan, har noen andre sannsynligvis gjort det før.
Funksjon: Eksempel # Eksempel: Fakultet (!): def nfakultet(n): fakultet = 1 for i in range(1,n+1): fakultet = fakultet * i # fakultet *= i return fakultet print nfakultet(4), nfakultet(10), nfakultet(20) • NB: Indenteringen må være riktig!!
Import av pakke • For eksempel: Hvis vi trenger en matematisk funksjon er det sannsynlig at den ligger i pakken Math. • HVilke funksjoner som finnes hvor, hva de heter, og hvordan de brukes finnes i Python-dokumentasjon i manualer, sammen med Python, og på web. • Importere hele Math: import math print math.cos(math.pi)
Importere litt av en pakke • Eksempel: Vi importerer bare funksjonene cos og pi from math cos, pi print cos(pi) • Legg merke til at vi samtidig definerte navnet på funksjonen slik at vi ikke trenger å skrive math.cos, men bare cos • Etter at en funksjon er importert kan den brukes fritt • Dersom navnene på importerte funksjoner ikke passer deg, kan du gi dem nye ved importen. Eksempel: from math import sin as math_sin, pi as math_pi print math_sin(math_pi)
Importere hele pakken from math import * print cos(pi) print sin(e) # Her regner vi også ut ut sinus til e, # e og sin er importert fra math. I tillegg til standard python-pakker skal vi her bruke scitools og numpy
Bruker-input • raw_input(x) leser alt, som tekst. Tekst = raw_input (‘Angi temperaturen i °C: ’) TCelsius = float(Tekst) • input(x) leser tall: TCelsius = input(‘Gi temperaturen i °C: ‘)
Eval(x) Eval(x) funksjonen evaluerer (regner ut) matematiske uttrykk #-*- coding: utf8 -*- from math import * print ’Velkommen til pythonkalkulatoren \n’ while s != ’STOPP’: print ’Skriv inn uttrykket du ønsker å evaluere’ s = raw_input(’For å avslutte skriv STOPP. \n’) if s != ’STOPP’: print ’\n’ + "Resultatet ble: " + str(eval(s)) print ’På gjensyn’ • Tekststrengen \n betyr ny linje. • Hva skjer hvis du ikke svarer STOPP til slutt? Å legge sammen tekster (Tekst1+Tekst2 eller ‘tekst’+’en annen tekst’ kalles “concatenation”
Feil-håndtering • Syntaksfeil • Kompilatoren gir deg indikasjon på hvor feilen er • Men dette kan være misvisende • Innrykksfeil • Perentesfeil • NameError • IndexError • TypeError • Value • Run-time error • Feil ved brukerinput • ….og mange andre muligheter
Feilhåndtering ved try - except try: <utsagn> except: <utsagn> • Programmet prøver “try”-delen. Dersom det kræsjer hopper det til “except”-delen. Eksempel: mangler_verdi = True while mangler_verdi: try: C = float(raw_input(’Oppgi temperaturen i grader celsius’)) mangler_verdi = False except: print "Du maa oppgi et tall!“ print C, ‘ °C ‘,C+273.15,’ K’