31
MENA 1000 – Materialer, energi og nanoteknologi 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 [email protected] o

Programmering med Python i MENA1000 Introduksjon og litt til…

  • Upload
    noreen

  • View
    50

  • Download
    0

Embed Size (px)

DESCRIPTION

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 [email protected]. - PowerPoint PPT Presentation

Citation preview

Page 1: Programmering med Python i MENA1000 Introduksjon og litt til…

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

[email protected]

Page 2: Programmering med Python i MENA1000 Introduksjon og litt til…

MENA 1000 – Materialer, energi og nanoteknologi

Programmering med Python i MENA1000 er en mikrominiversjon av INF1100

• En første introduksjon til å programmere datamaskiner• Programmering er svært viktig i bl.a. 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.

• Hvis du ikke er MENA-student, er programmering kanskje ikke så viktig…

Page 3: Programmering med Python i MENA1000 Introduksjon og litt til…

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 forelesningstimer i uke 1

• 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.

Page 4: Programmering med Python i MENA1000 Introduksjon og litt til…

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 vi 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, ...

Page 5: Programmering med Python i MENA1000 Introduksjon og litt til…

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

Page 6: Programmering med Python i MENA1000 Introduksjon og litt til…

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.

Page 7: Programmering med Python i MENA1000 Introduksjon og litt til…

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”

Page 8: Programmering med Python i MENA1000 Introduksjon og litt til…

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’

Page 9: Programmering med Python i MENA1000 Introduksjon og litt til…

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! Du er jammen flink!”

• Test programmet: I rullemenyene, finn og klikk Run. – Hvis alt er korrekt får du en utskrift på skjermen: ”Hei på deg…” – 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.

Page 10: Programmering med Python i MENA1000 Introduksjon og litt til…

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.

Page 11: Programmering med Python i MENA1000 Introduksjon og litt til…

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

Page 12: Programmering med Python i MENA1000 Introduksjon og litt til…

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. Python 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.

Page 13: Programmering med Python i MENA1000 Introduksjon og litt til…

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

Page 14: Programmering med Python i MENA1000 Introduksjon og litt til…

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!’

Page 15: Programmering med Python i MENA1000 Introduksjon og litt til…

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

Page 16: Programmering med Python i MENA1000 Introduksjon og litt til…

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!’

Page 17: Programmering med Python i MENA1000 Introduksjon og litt til…

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.1

print “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.

Page 18: Programmering med Python i MENA1000 Introduksjon og litt til…

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

Page 19: Programmering med Python i MENA1000 Introduksjon og litt til…

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 "-------------------------------------"

Page 20: Programmering med Python i MENA1000 Introduksjon og litt til…

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)…

Page 21: Programmering med Python i MENA1000 Introduksjon og litt til…

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.)

Page 22: Programmering med Python i MENA1000 Introduksjon og litt til…

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.

Page 23: Programmering med Python i MENA1000 Introduksjon og litt til…

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.

Page 24: Programmering med Python i MENA1000 Introduksjon og litt til…

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!!

Page 25: Programmering med Python i MENA1000 Introduksjon og litt til…

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)

Page 26: Programmering med Python i MENA1000 Introduksjon og litt til…

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)

Page 27: Programmering med Python i MENA1000 Introduksjon og litt til…

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

Page 28: Programmering med Python i MENA1000 Introduksjon og litt til…

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: ‘)

Page 29: Programmering med Python i MENA1000 Introduksjon og litt til…

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”

Page 30: Programmering med Python i MENA1000 Introduksjon og litt til…

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

Page 31: Programmering med Python i MENA1000 Introduksjon og litt til…

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’