Nettleseren Chromium som viser nettsiden https://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:
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.
3.x.x
)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.
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 (#)
Fra XKCD.
Hvis x
, gjør y
.
Følgende i fil:
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:
og test den i skallet:
fordi funksjoner er viktig.
Definerer i fil:
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.
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.
er OK.
f
i f(x)
har x
som parameterg
i g(x,y)
har x
og y
som parametreTips: Bruk if-setninger!
input()
gir ut tekstint()
konverterer tekst til tallstr()
konverterer tall til tekstNå 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:
>>> 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!
Lag et multiplikasjonsspill!
while
?Tilfeldige tall:
for
?for
gjør noe med hvert element i en liste:
For på én linje er fint i skallet:
I kildekode legger vi for
over flere linjer:
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!
n
gangerfor
-løkke til å skrive ut 7-gangeren.0
7
14
21
28
35
42
49
56
63
70
Løsningsforslag:
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:
Hvordan fungerer denne? Vi kjører modulen i IDLE, så vi kan leke med verdiene.
Wops, guess var en funksjon. Vi trenger paranterser for å kalle en funksjon:
… så low starter på 0, og high på 100. Hva om vi endrer på dette?
Vi svarer datamaskinen ved å kalle funksjonen lower()
eller higher()
:
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:
plate_4_6_0.26_20000
Parametriser over tykkelse og kraft
generate_single_plate.py
til generate_multiple_plates.py
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:
IN
og OUT
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
M(8,30000,3)
? Test i IDLE.Python Script
-node i Dynamo.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.
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.
Point.ByCoordinates
for å lage punkterPolyCurve.ByPoints
for å lage strekerVelg 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:
d
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) = …
h(L,q,As,x)
i Python: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.
http://teodorlu.github.io/python-intro/
, og blir her.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.