Programmering med Python i MENA1000€¦ · Samme program, men med bruk av variabler Skriv...
Transcript of Programmering med Python i MENA1000€¦ · Samme program, men med bruk av variabler Skriv...
20/08/2012
1
MENA 1000 – Materialer, energi og nanoteknologi
Programmering med Python i MENA1000
Introduksjon og litt til…
Truls NorbyTruls NorbyKjemisk institutt/Senter for Materialvitenskap og nanoteknologi (SMN)Universitetet i Oslo
FERMIOForskningsparkenGaustadalleen 21N-0349 Oslo
MENA 1000 – Materialer, energi og nanoteknologi
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
20/08/2012
2
MENA 1000 – Materialer, energi og nanoteknologi
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.
MENA 1000 – Materialer, energi og nanoteknologi
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, ...
20/08/2012
3
MENA 1000 – Materialer, energi og nanoteknologi
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
MENA 1000 – Materialer, energi og nanoteknologi
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.
20/08/2012
4
MENA 1000 – Materialer, energi og nanoteknologi
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”
MENA 1000 – Materialer, energi og nanoteknologi
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’
20/08/2012
5
MENA 1000 – Materialer, energi og nanoteknologi
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 ”Hei på deg! Denne testen gikk fint!”
• 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.
MENA 1000 – Materialer, energi og nanoteknologi
Høyden til en ball som kastes rett opp
Vi vil regne ut
y(t) = v0 t − ½ g t2
for v0 = 5, g = 9,81 og t = 0,6:
y = 5・0.6 − ½・9,81・ 0,62
Python-program for beregningen:
print 5*0.6 - 0.5*9.81*0.6**2
Skriv programmet, lagre det som ball_numbers.py og kjør det.
Det skal skrive 1.2342 som resultat.
20/08/2012
6
MENA 1000 – Materialer, energi og nanoteknologi
Samme program, men med bruk av variabler
Skriv programmet
v0 = 5
g = 9.81
t = 0.6
y = v0*t - 0.5*g*t**2
print y
Det bruker variablene v0, g, t og y
MENA 1000 – Materialer, energi og nanoteknologi
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-*-eller# -*- coding: latin-1 -*-
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. Pythin leser og bruker med andre ord enkelte “kommentarlinjer”, som den ovenfor.
Etter dette vil Python godta æ, ø og å i programmet. Men bare i kommentarer og utskrift – aldri i variabelnavn.
20/08/2012
7
MENA 1000 – Materialer, energi og nanoteknologi
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
MENA 1000 – Materialer, energi og nanoteknologi
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!’
20/08/2012
8
MENA 1000 – Materialer, energi og nanoteknologi
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
MENA 1000 – Materialer, energi og nanoteknologi
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!’
20/08/2012
9
MENA 1000 – Materialer, energi og nanoteknologi
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 = 5g = 9.81t = 0.0while v0*t - 0.5*g*t**2 >= 0:
t = t + 0.1 # kan også skrives t += 0.1print “Ballen er i lufta i ”, t, “sekunder.”
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.
MENA 1000 – Materialer, energi og nanoteknologi
Mer avansert: while løkke og lister
• Vi vil lagre forløpet til ballkastet; alle høydene og tidene:
v0 = 5g = 9.81t = 0.0tider = [t] #Vi starter med en liste med bare startverdienhoyder = [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-variablentider.append(i*0.1)t = tider[i]hoyder.append(v0*t -0.5*g*t**2)
print tiderprint hoyder
20/08/2012
10
MENA 1000 – Materialer, energi og nanoteknologi
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 "-------------------------------------"
MENA 1000 – Materialer, energi og nanoteknologi
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 istedet for j in range(n)…
20/08/2012
11
MENA 1000 – Materialer, energi og nanoteknologi
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. (Den må stå høyere opp i programmet.)
MENA 1000 – Materialer, energi og nanoteknologi
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.
20/08/2012
12
MENA 1000 – Materialer, energi og nanoteknologi
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.
MENA 1000 – Materialer, energi og nanoteknologi
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!!
20/08/2012
13
MENA 1000 – Materialer, energi og nanoteknologi
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)
MENA 1000 – Materialer, energi og nanoteknologi
Importere deler 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)
20/08/2012
14
MENA 1000 – Materialer, energi og nanoteknologi
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
MENA 1000 – Materialer, energi og nanoteknologi
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: ‘)
20/08/2012
15
MENA 1000 – Materialer, energi og nanoteknologi
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”
MENA 1000 – Materialer, energi og nanoteknologi
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
20/08/2012
16
MENA 1000 – Materialer, energi og nanoteknologi
Feilhåndtering ved try - excepttry:
<utsagn>except:
<utsagn>
• Programmet prøver “try”-delen. Dersom det kræsjer hopper det til “except”-delen. Eksempel:
mangler_verdi = Truewhile 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’