variabler
loops
læse og skrive excel filer
funktioner
for print se her
Hvis du vil lære hvordan variabler og funktioner bruges så denne her film. Den tager 4 timer men så kan du også programmere :-)
Vil du lære python fra denne side start her på "Lær python" siden og arbejd dig igennem. Det tager nogle timer. Lær python siden refererer tilbage til denne her.
I python skal variabler ikke initialiseres, dvs man behøves ikke at definere typen af variablerne på forhåndt som i de fleste andre computersprog. Vil man
En liste defineres sådan her:
minliste=["Ole", "Martina", 4, 5, 6.45]
kommandoen
print(minliste[3])
vil give et 5 tal da listenummereringen starter med 0,1,2 .. læg mærke til brugen af de kantede parenteser for elementer.
tilføje et element til en liste:
minliste.append(5) #tilføjer 5 til listen.
minliste.insert(3,"Markus")#tilføjer midti listen på 4. position
minliste.pop() #sletter det sidste element
minliste.count(3) # tæller 3 taller i listen
len(minliste) # giver længden på listen
Scroll lidt ned der er der en liste over de vigtigste kommandoer med lister.
Fantastisk dokumentation er her.
OBS: pakken numpy arbejder med arrays python selv gerne med lister derfor bruger man meget tit disse to linjer som laver de genererede lister om til arrays så numpy kan arbejde med dem.
Lave lister om til arrays:
x_vaerdier = np.array(x_python_list)
y_vaerdier = np.array(y_python_list)
Arrays er sammenligneligt med lister, men har nogle klare fordele i matematikken. De bliver brugt en del på disse sider da de er en del af pakken "NUMPY" som bruges ekstremt meget i til matematik. En array er en liste eller en matrix (2 eller 3 dimensionel liste som fx data i en tabel) hvor hver enkelt element igen er en variabel. Se her definitionen af to arrays. x og y. np.array betyder at array funktionaliteten bliver hentet i pakken numpy (np)
x = np.array([1, 2, 3, 9])
y = np.array([100, 50, 25, 10])
Se definitionen blive brugt her
Se nu nedenstående lille programm. Rød er plot, blå er beregning, sort er programoutput.
Det her kan man ikke direkte med lister.
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3, 9])
y = np.array([100, 50, 25, 10])
z = x*y
print(x,y,z)
plt.scatter(x,y)
Resultater er :
[1 2 3 9] [100 50 25 10] [100 100 75 90]
Det samme med lister giver en error :
xlist = [1, 2, 3, 9]
ylist = [100, 50, 25, 10]
zlist = xlist*ylist
print(zlist)
TypeError: can't multiply sequence by non-int of type 'list'
Det kan dog reddes ved at omdanne lister til arrays
resultat = np.array(xlist)*np.array(ylist)
print(resultat)
Giver:
[100 100 75 90]
Array reshape til lineær regression
import numpy as np
x_vaerdier = np.array([5, 15, 25]).reshape((-1, 1))
y_vaerdier = np.array([6, 20, 14.6])
print(x_vaerdier,y_vaerdier)
Output giver:
[[ 5]
[15]
[25]] [ 6. 20. 14.6]
0 eller 1, False eller True, boolean variablen kan kun have de to værdier.
list1 = ["Ole", "Martina", "Michael"]
list2 = [5, 3.5, 7E-4, 14]
list3 = [True, True, False]
print(type(list1[1]))
print(type(list2[1]))
print(type(list3[1]))
Output:
<class 'str'>
<class 'int'>
<class 'bool'>
Tal kan være integer (int), boolean (0,1) eller kommatal (float). Programmet finder selv ud af hvad der er smart, men nogle gange kan det være vigtig at "typecaste" dvs at lave en variable om fx fra en int til en float osv.
a = 4
b = 5
print(a+b)
#skrev du print(a+mitnavn) vil du få en error da a er et tal og mitnavn er en streng
Spyder har en totalt genial feature her. Den hedder "Variabel explorer" se screenshot her:
Bruger du Jupyter skriv %whos
Se at "minlegende" er en streng (str) som "efter" programmet har kørt indeholder y = 46.543 Ohm ....
minliste er af typen "list" og indehodet kan ses
n_0 er en integer nlist_array er af typen Array bestående af (64bit = et tal med højst 20 ciffre) integers.
Er rimelig straight forward
x = 3
y = 5
print(x+y) #8
print(x*y) #15
ptint(x-y) #-2
print(x/y) #0.6
print(x**y) #243
y -= x # samme som y-x
print(y) #2
Se flere operatorer her. Jeg har en lommeregner på denne side som indeholder alle fysiske konstanter. Vil du bruge CAS klik her.
Et stykke tekst kaldes en "string" strings skal stå i "minstring" eller 'minstring'
mitnavn = "Ole"
print("Mit navn er", mitnavn)
eller
mitnavn = "Ole"
tekst = "Mit navn er "
nytekst = tekst + mitnavn
print(nytekst)
Hvordan får man plottet sine data fra variabler sammen med noget tekst:
Løsning 1 med variabler:
a=1
b=2
c=3
print("Koefficienterne er {a}, {b} og {c}")
Løsning 2 med .format() kommandoen:
a = "Ole"
b = 20
c = "mit navn er " + a
print("Jeg er {0} år gammel og {1}".format(b,c))
Output:
Jeg er 20 år gammel og mit navn er Ole
a=46.543
b=0.0908
minlegende=("y={0}Ohm * x + {1} V".format(a,b))
plt.scatter(xarr,yarr,label=minlegende) #scatter tegner x,y-punkter
plt.plot(x,y,'r--') #plot tegner regressionslinjen
plt.xlabel('I i A')
plt.ylabel('U i V')
plt.title("Strøm spændings karakteristik")
plt.legend(loc='upper left')
Der er flere typer af variabler som jeg ikke har brugt på mine sider.
Så er der alle de >< => osv operatorer som kan ses på denne her side.
xlist = [1,2,3,9,12] #er en liste af tal
navnelist = ['Martin','Knud', 'Maria', 'Amanda'] # er en liste af tekst
xlist.insert(3,17) #indsætter 17 i 4. position [1,2,3,9,17,12]
xlist.remove(17)#fjerner 17 fra listen
xlist.pop(9)#fjerner 9 tallet fra listen
xlist.reverse()#reverser hele listen
print(len(xlist)) # længden af listen
print(max(xlist))# det største element
print(min(xlist))# det mindste element
print(xlist.count('Knud'))# tæller antal knud i listen.
print(xlist.index('Knud')# printer positionen af 'knud' i listen
minliste = [4,5,7,1.2,114,17,-30]')
minliste.sort() #sorterer min liste fra -30 til 114
Disse to variabel typer bliver brugt meget lidt på disse sider men de er her som reference.
Dictionary er en liste hvor hver element har et navn. fx har tallet 42 navnet "første".
Dictionaries defineres med tuborg parenteser og kaldes med kantede parenteser. Elementerne adskilles med komma ligesom listeelementer.
mindict={'første':42,'anden':43,'tredie':'Knud'}
print(mindict['anden'])
43
print(mindict['tredie'])
Knud
Man tilføjer et element til en Dictionary ved følgende kommando:
mindict['fjerde'] = 'Maria'
Lige som med lister kan man bruge .pop til at fjerne elementer
mindict.pop('anden') #fjerner 'anden':43
Se her
list_num = [1,2,3,4] #definiton af en liste
tup_num = (1,2,3,4)#definition af en tuple
print(list_num)
print(tup_num)
I modsætning til lister kan elementerne i tuples ikke ændres efter de er blevet defineret.
a = [(2,4), (5,7), (3,8), (5,9)]
a er en liste [kantede parentes] som indeholder tuples (runde parentes)
print(tup_num[0]) #printer 1
print(tup_num[3]) #printer 4
print(a[3]) #printer (5,9)
Se mer om tuples her.
På siden om fysiske konstanter er der et eksempel med en dictionary som indeholder tuples.
import scipy.constants as sc
print('alfa-p-masse =',sc.physical_constants['alpha particle mass'][0])
Navnet på konstanten er 'alpha particle mass' og den har en tuple som indhold hvoraf det første element er talværdien i SI enheder
2. element er enheden og 3. element er usikkerheden
print(sc.physical_constants['alpha particle mass'][0]) #talværdien
print(sc.physical_constants['alpha particle mass'][1]) #enheden som string
print(sc.physical_constants['alpha particle mass'][2]) #usikkerheden
Med loops, eller sløjfer, kan du udføre den samme handling mange gang i træk.
If loop
if tal < k:
print('lille')
elif tal == k:
print('OK')
else:
print('stor')
For loop med range
x = 0
n = 1000
for i in range(n):
x=x+1
print(x)
For loop med list
x = [4,5,7,10]
for i in x:
print(i)
Resultat:
(4,5,7,10)
While loop
x = 0
n = 1000
i=0
while i < n:
x=x+1
i=i+1
print(x)
Læg mærke til at i er ikke elementnummeret (0,1,2..) men indholdet af listen til den pågældende position.
x = int(input("Skriv et tal: "))
if x < 0:
x = 0
print('Alle negative tal er 0')
elif
x == 0:
print('Null')
elif x == 1:
print('Et nice 1 tal')
else:
print('Større end 1')
while t < 1000 :
n1 += -n1*k1*dt #ny=ngammel-n1*k1*dt
n2 += -n2*k2*dt
t += dt #tiden stiger med et sekund
n1list.append(n1) #kernerne skrives til n1list
n2list.append(n2)
tlist.append(t)
Den nemme brug
for i in range(10):
print("Hallojsa")
Dobbeltloop med For og If statements. Programmet bruges her og skriver 100 "sekunders" henfald af 1000 kerner med en henfaldskonstant på k = 0,02 til to lister (nlist indeholder antal tilbageblevende kerner og tlist som indeholder x-aksen med tidsværdier)
antalgange = 100
n_kerner = 1000
k = 0,02
nlist=[]
tlist=[]
for j in range(antalgange):
for i in range(n_kerner):
tal = np.random.random()
if tal < k:
n_kerner=n_kerner-1
nlist.append(n_kerner)
tlist.append(j)
Der er mange plotte funktioner og flere af dem er ret svært at huske klik her for flere funktioner så du kan klippe koden over til dit program.
Det er standard at importere plottefunktionen som plt
import matplotlib.pyplot as plt
Her til højre ses de features som
import matplotlib.pyplot as plt
indeholder. Her er en gennemgang af mulighederne.
Det nemmeste er at kopiere koden fra programmerne.
Se de tre grafer her nedenunder
import matplotlib.pyplot as plt
plt.plot(x,y,'r--',linewidth=3)
plt.plot(x,z,'k:',linewidth=3)
plt.legend(['y','z'])
plt.xlabel('x-værdier')
plt.ylabel('Kraft målt i Newton')
plt.savefig('myFigure.png')
plt.plot(x, y, 'go--', linewidth=2, markersize=12)
plt.plot(x, y, color='green', marker='o',linestyle='dashed',linewidth=2, markersize=12)
Ofte vil man inkludere "legend" direkte i plot
Fx her
plt.plot(x,y,'r+',label=minlegende)
Det er meget nemt at skrive til "tekst filer" vil du skrive til excel og word filer skal du scrolle længere ned.
I python er der mange måder at skrive til filer på. Hvis I googler efter det vil I få mange tilbud om forskellige moduler som kan interagere med harddisken og dermed filerne på den. Bruger man Jupyter, som er en omline python editor skal filerne ligge online. Almindelige tekstfiler skrives nemmest til direkte med python. Ens for alle måder er at filen skal
For at læse og skrive til filer se teksten her til højre
For at lave regression fra en excelfil se denne fil.
For at skrive til excelfiler se denne her fil.
Du skal have en textfil "minfil.txt" liggende i den samme mappe som dit python program.
Åbn filen med følgende command
minfil = open("minfil.txt", "r")
print(minfil.read())#printer hele filen
print(minfil.readline()[1] # printer 1 linje
minfil.close()#husk at lukke filen igen ellers "hænger den" når du lukker pyton.
For at printe hele filen kunne man også bruge følgende for loop:
minfil = open("minfil.txt", "r")
for minfil in minfil
Vil du skrive til filen skal du ændre "r" til "w". Se super dokumentation her
Vil du skrive og læse wordfiler se denne her vejledning.
Det her lille program læser excelfilen
"reg-excel-1.xlsx"
som ligger i samme mappe som *.py filen.
Filen ser ud som vist nedenunder og se hvordan den henter kolonnen med navn plot x I i A fra filen og læser den i in xarr som den så bruger til at regne med.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_excel('reg-excel-1.xlsx')
xarr = df["plot x I i A"].to_numpy().reshape(-1,1)
yarr = df["plot y U i V"].to_numpy()
Men kodenstumpen er simpel og genererer excelfilen vist nedenunder :
import pandas as pd
alder=[45,56,32,85,16]
navne=["Knud","Ole","Jette","Mille","Albert"]
bil=["Saab","Honda","Saab","Volvo","VW"]
minfil = pd.DataFrame.from_dict({'Navne':navne,'alder':alder,'bil':bil})
minfil.to_excel('info.xlsx',sheet_name='første',header=True,index=False)
Man kan definere sine egne funktioner med kommandoen "def"
Gentager man den samme matematiske funktion flere gange i samme program så kan det være smart at definere en funktion.
Kør koden til højre og se hvad den gør.
Forstil dig at du har en liste med x-værdier som indeholder længder af 9 kasser i cm.
xlist = [6,14,3,4.5,18.3,2.2,21.2,8.4,9.0]
og du vil beregne volumen af disse kasser.
Et lille program som
def volumen(laengde,bredte,hoejde):
return laengde*bredte*hoejde
xlist = [6,14,3,4.5,18.3,2.2,21.2,8.4,9.0]
Vlist = []
for i in range(len(xlist)):
Vlist.append(volumen(xlist[i],4,5))
print(Vlist)
will beregne 9 kassevolumina med bredte 4 og højde 5 og lægge dem i Vlist
def volumen(laengde,bredte,hoejde):
return laengde*bredte*hoejde
print(volumen(2,3,4))
Ovenstående kode definerer en funktion volumen. Navnet har du selv valgt. Den har tre input: laengde,bredte,hoejde. Du kan se at dens syntaks er lidt som et loop, med kolon og indryk. Kommandoen "return" betyder "beregn" og giv outputtet tilbage. Man kunne derfor skrive
VolKasse =(volumen(2,3,4))
print(VolKasse)
Vil så udskrive kassens volumen til konsollen.
import numpy as np
def vol(r):
return 4/3*np.pi*r**3
def radius(V):
return (3*V/(4*np.pi))**(1/3)
Vkugle = 4 #m^3
r=radius(Vkugle)
print(r,'m')