On Github teodorlu / python-intro
Nettleseren Chromium som viser nettsiden http://teodorlu.github.io/python-intro/ i fullskjerm.
Gå inn her på egen maskin! Da kan du se tidligere lysbilder, og er ikke avhengig av hvor vi er.
Du er på Python-kurs! Kurs med fartstid:
Ryddig første vei inn i Python-programmering
Referanse til videre bruk.
Teodor Heggelund
Alexander Perry
Forståelig syntaks med lite støy:
>>> navn = "Teodor" >>> navn 'Teodor' >>> "Hei! Jeg heter " + navn 'Hei! Jeg heter Teodor'
Når vi utvikler Python, trenger vi to verktøy:
Når vi installerer programmeringsspråket Python, følger miljøet IDLE med. IDLE gir oss et skall og en teksteditor.
Et skall lar oss skrive en linje og tolke den.
Tre piler (>>>) dukker automatisk opp i skallet. Når vi skriver tre piler her:
>>> 4 + 4 8
skal du skrive 4 + 4 og trykke enter.
Vi åpner teksteditoren ved å lage en ny fil fra Python-skallet:
File --> New file (Ctrl+N) gir oss en tom fil:
Først lagrer vi filen der vi vil ha den, og kaller den hello.py ...
... så kjører vi den for å se at alt er i orden ...
... og en tom fil gjør ... ingenting.
>>> navn = "Alexander Perry" >>> navn 'Alexander Perry' >>> alder = 27 >>> alder 27
Lagre alderen til 3 familiemedlemmer i variabler
tim_age = 19 teodor_age = # ... # ... og så videre # Dette er en kommentar. Python ignorerer # alt som kommer etter en hash (#)
>>> navn1 = "Alexander" >>> navn2 = "Teodor" >>> navn1 + navn2
>>> navn1 = "Alexander" >>> navn2 = "Teodor" >>> navn1 + navn2 'AlexanderTeodor'
>>> navn1 = "Alexander" >>> navn2 = "Teodor" >>> navn1 + " " + navn2 'Alexander Teodor'
Fra XKCD.
Hvis x, gjør y.
Følgende i fil:
aar = 2001 print("Over if") if aar > 2000: print("Over 2000!") print("Under if")
gir følgende ut:
Over if Over 2000! Under if
Dokumentasjonen til Python 2.7 eller Python 3.5 forklarer hvordan å bruke æøå i fil.
Hvis ikke x, gjør ingenting.
Følgende i fil:
aar = 1999 # Bruker ikke norske bokstaver print("Over if") if aar > 2000: print("Over 2000!") print("Under if")
gir følgende ut:
Over if Under if
Følgende i fil:
aar = 1999 # Bruker ikke norske bokstaver print("Over if") if aar > 2000: print("Over 2000!") else: print("Under 2000!") print("Under if")
gir følgende ut:
Over if Under 2000 Under if
Lag et program som
Den viktigste byggeblokken i programmene vi skriver.
Definér hei() i en fil:
def hei(): return "Hei!"
og test den i skallet:
>>> hei <function hei at 0x7f8c0f5005f0> >>> hei() 'Hei!'
fordi funksjoner er viktig.
Definerer i fil:
def tusen(): t = 10 * 1000 return t
Vi bruker variabler i funksjoner for å splitte arbeidet i mindre biter.
... og tester i skallet:
>>> tusen <function tusen at 0x7f8c0f500668> >>> tusen() 1000
Funksjoner må defineres før de brukes.
message = hei() def hei(): return "Hei!"
gir
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "func_fail.py", line 1, in <module> message = hei() NameError: name 'hei' is not defined
Funksjoner må defineres før de brukes.
def hei(): return "Hei!" message = hei()
er OK.
def f(x): return x + 1 def g(x,y): return (x + 1) * y
# Ikke parametrisert kode a = 3 * (10 + 1) * (10 + 2) b = 3 * (11 + 1) * (11 + 2) a = 3 * (12 + 1) * (12 + 2) a = 3 * (14 + 1) * (14 + 2)
# Parametrisert kode def f(x): return 3 * (x + 1) * (x + 2) a = f(10) b = f(11) a = f(12) a = f(13)
def er_myndig(alder): if alder > 17: return "Du er myndig!" else: return "Du er ikke myndig :("
>>> er_myndig(18) 'Du er myndig!'
def addition(tall1, tall2): return tall1 + tall2
>>> addition(2, 3) 5
Tips: Bruk if-setninger!
>>> kalkulator("*", 3, 4) 12
navn = input("Hva heter du?") print(navn)
age_text = input("How old are you? ") age = int(age_text)
age_text = input("How old are you? ") age = int(age_text) # Obs: "in five " + "years" blir "in five years"! print("In five years, you are " + str(age + 5) + " years old!")
Nå skal vi utvide oppgaven fra tidligere. I stedet for å lagre alderen til familiemedlemmer i programmet, spør brukeren! Skriv så ut gjennomsnitt og total alder.
Funksjoner vi har brukt:
input() # Spør brukeren int() # Konverterer fra tekst til tall str() # Konverterer fra tall til tekst print() # Forteller brukeren noe
navn = input("Hva heter du?") print(navn)
>>> mine_tall = [1,2,3,42,1337,-55] >>> mine_tall [1, 2, 3, 42, 1337, -55] >>> mine_tall[0] 1 >>> mine_tall[-1] -55 >>> mine_tall[-3] 42 >>> len(mine_tall) 6 >>> mine_tall[6-1] -55
>>> mine_tall = [1,2,3,42,1337,-55] # Samme som før >>> mine_tall[6] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range >>> mine_tall [1, 2, 3, 42, 1337, -55] >>> mine_tall[2:] [3, 42, 1337, -55] >>> mine_tall[:2] [1, 2] >>> mine_tall[2] 3 >>> [1, 2, 3] + [10, 11, 12] [1, 2, 3, 10, 11, 12]
Gjør følgende i Python-skallet:
Tips: list[-3] henter element 3 bakfra!
print("Dette er en huskeliste-app") huskeliste = [] while True: svar = input("Legg til noe på huskelisten: ") huskeliste.append(svar) print(huskeliste)
Lag et multiplikasjonsspill!
Be brukeren gange to tall Sjekk svaret! Gjør dette mange ganger ... while?Tilfeldige tall:
from random import randint x = randint(0, 6) # gir x = 0, x = 1, ..., eller x = 5
for gjør noe med hvert element i en liste:
>>> numbers = [1,2,42] >>> for number in numbers: print(number) ... 1 2 42 >>> for number in numbers: print(2*number) ... 2 4 84
For på én linje er fint i skallet:
>>> for number in numbers: print number
I kildekode legger vi for over flere linjer:
mange_tall = [101,102,103] for x in mange_tall: print(x) print("Hei!")
skriver ut
101 Hei! 102 Hei! 103 Hei!
mange_tall = [101,102,103] for x in mange_tall: print(x) print("Hei!") # Fjernet indent --> * Ikke del av for # * Kjøres én gang, _etter_ at # for er ferdig!
skriver ut
101 102 103 Hei!
>>> range(4) [0, 1, 2, 3] >>> range(2,4) [2, 3] >>> for n in range(4): print n*n ... 0 1 4 9
0 7 14 21 28 35 42 49 56 63 70
Løsningsforslag:
for n in range(0, 11): print(7*n)
mange_tall = [1,2,3,4,5,6,7,8,9] for tall in mange_tall print("Sjekker om " + str(tall) + " er et partall") if tall % 2: print(str(tall) + " er et oddetall") else: print(str(tall) + " er et partall")
Spill og illustrasjon er hentet fra den strålende boka "Land of Lisp" av Conrad Barski, og tilpasset Python.
Musikkvideo:
Slik kan det fungere ...
Sider under beskriver hvordan gjettespillet kan implementeres. Prøv først selv, og gå videre nedover om du trenger et tips!
Gitt at vi har en øvre og nedre grense, kan vi gjette at tallet ligger midt i mellom:
# Gjettespill! low = 0 high = 100 def guess(): total = high + low # f.eks 75 + 50 = 125 average = total / 2 # 125/2 = 62.5 next_guess = int(average) # int(62.5) = 62 return next_guess
Hvordan fungerer denne? Vi kjører modulen i IDLE, så vi kan leke med verdiene.
>>> guess <function guess at 0x7fee85ff9840>
Wops, guess var en funksjon. Vi trenger paranterser for å kalle en funksjon:
>>> guess() 50
>>> high 100 >>> low 0
... så low starter på 0, og high på 100. Hva om vi endrer på dette?
>>> low = 75 >>> guess() 87
>>> # Hemmelig tall er 42! >>> guess() 50 >>> lower() 24 >>> higher() 37 >>> higher() 43 >>> lower() 40 >>> higher() 41 >>> higher() 42
Vi svarer datamaskinen ved å kalle funksjonen lower() eller higher():
def lower(): # global lar oss endre en global variabel # inne i en funksjon global high high = guess() - 1 return guess() def bigger(): global low low = guess() + 1 return guess()
>>> # Guessing 77 >>> guess() 50 >>> higher() 75 >>> higher() 88 >>> lower() 81 >>> lower() 78 >>> lower() 76 >>> higher() 77 >>> correct() 'Yippie!!!'
Gratulerer, dere har nå implementert et binærsøk! Binærsøk er en av grunnene til at Google-søk er raske.
På min maskin ligger Abaqus' Python på C:\SIMULIA\CAE\2016\win_b64 \code\bin\python.exe
Store deler av Abaqus CAE er skrevet i Python, og kjører på en tilpasset Python-plattform.
Når vi kjører kode på Abaqus' Python-plattform, får vi tilgang til å lage bokser, endre en CAE-modell og hente ut data fra ODB-er.
Du har allerede en Python-tolker! >>> tyder på at du kan skrive Python.
Lag en ny Python-fil på valgfri måte
Trykk Run Script
og og velg scriptet ditt:
Hva du skriver ut med print dukker opp her:
og ting du definerer i filen blir tilgjengelig fra skallet:
Jeg bruker Github Atom. Denne er god.
Modeller fritt opplagt plate i Abaqus: plate.cae
Gjør om til script
Kopier journal (plate.jnl) til generate_single_plate.py. Endre koden til å generere en annen modell:
Parametriser over tykkelse og kraft
plate_4_6_160_7000 plate_4_6_160_10000 plate_4_6_160_10000 plate_4_6_200_7000 plate_4_6_200_10000 ...
Len deg tilbake og nyt hva du har fått til.
Muligheter videre:
"Scripting" er grunnleggende funksjonalitet. Nyttig til små og store prosjekter.
"GUI" er grafikk til større programmer.
Dynamo bruker et bibliotek som heter IronPython. IronPython er en python-implementasjon som kjører på .NET. Det vil typisk si at Dynamo inneholder en fil som heter python.dll, som kan tolke Python-script.
Script du skriver kjøres i et modifisert miljø, der variabelen IN automagisk inneholder hva du kobler til scriptet ditt på venstre side og variabelen OUT hva du vil sende ut på høyre side.
Python-script lagres inne i Dynamo-filer (.dyn).
Fra høyreklikk:
Fra funksjonslisten:
Dobbeltklikk "nede" i boksen:
Hva kommer inn, hva går ut?
Kobler på en Number Slider:
Jeg bruker Github Atom. Denne er god.
Definer en momentdiagrammet matematisk for en fritt opplagt bjelke med jevnt fordelt last.
M(L,q,x) = ...
Hva er M(8,30000,3)?
Implementer M(L,q,x) i en python-fil
def M(L,q,x): # Regn ut moment! moment = # ... unngår å bruke navnet på funksjonen (M) return moment
Endre Python-koden til å ta inn en liste av x-verdier
Oppgaven kan løses med funksjonen map. Gjør først oppgaven i fil, og test i IDLE.
>>> def addone(x): return x + 1 ... >>> addone(5) 6 >>> addone(6) 7 >>> addone(7) 8 >>> map(addone, [5,6,7]) [6, 7, 8]
Behandle liste av x-verdier i Dynamo
Generer liste av gyldige x-verdier (0 <= x <= L).
Bruk Number til å definere 0 og steg, og Range til å generere liste.
Endre Python-koden til å ta inn en liste av x-verdier i stedet for en enkelt x-verdi.
Får du fremdeles samme verdi av M(8,30000,3)?
Vis momentdiagrammet med streker.
Velg passe skala. 50 000 meter er litt mye. 50 kNm <--> 1 m OK?
Nå skal vi velge høyde på bjelken. Dette gjør vi enkelt:
Regner ut nødvendig indre momentarm d Legger på 100 mm for å få ca nødvendig høydeVi neglisjerer effekt fra skjærkrefter.
Definer en matematisk funksjon for berening av nødvendig høyde.
h(L,q,As,x) = ...
def h(L,q,As,x): moment = M(L,q,x) height = # ... unngår å bruke navnet på funksjonen (h) return height
Hva beregner funksjonen din for h(8,30000,3,0.00164)?
Test i IDLE, og implementer i Dynamo.
Github Atom er en meget god teksteditor til Python.
En teksteditor er et godt valg for å redigere én fil. Jeg bruker Atom til nesten alt jeg skriver av Python-kode.
PyCharm er et godt IDE til Python.
IDE-er er større og mer kompliserte enn teksteditorer. PyCharm kan være et godt valg til større prosjekter. Jeg bruker delvis PyCharm når jeg utvikler på ANDIM.