Python tutorial. En intro til Python for begyndere.
juli 29th, 2008. Kategori: Programmering
I denne Python tutorial vil jeg give en kort introduktion til Python. Tutorialen henvender sig til begyndere i Python, men en smule programmeringserfaring fra et andet sprog vil nok gøre det lettere at følge med.
Jeg har udvalgt nogle af de væsentligste karakteristika ved Python og vil i de forskellige afsnit give korte programmeringseksempler. Til slut programmerer vi en lixberegner, der vil anskueliggøre de gennemgåede emner, samt tilføje et par nye vigtige detaljer om Python.
Start med Python
Du kan downloade den seneste Python version fra Python.org. Sammen med Python bliver IDLE installeret. IDLE er en lille grafisk brugergrænseflade, du kan bruge til at skrive og afvikle dine Python programmer i. IDLE bruger syntaks highlighning, som gør det lettere at overskue koden og opdage eventuelle syntaks fejl.
Åben IDLE og skriv:
print “Hello world”
OBS. Fra Python 3.0 er print blevet en funktion. Det betyder at syntaksen ved print nu er:
print (“Hello world”)
(det er kun ved print funktionen at denne tutorial bliver påvirket, af den nye syntaks.)
Python vil nu udføre programmet. I dette tilfælde vil Python skrive “Hello world” på skærmen.
Åben bagefter et nyt vindue i IDLE, skrive ovenstående kode igen og gem det som F.eks. “hello.py”. Så kan du vælge at køre programmet ved at taste “F5″eller vælge “Run module” fra menuen. Denne sidste metode er selvfølgelig den mest hensigtsmæssige, da du her gemmer dine Python programmer.
OBS. IDLE kan give problemer, når man afvikler den under Windows. Læs her hvordan du løser Problemer med IDLE.
Syntaks i Python
Pythons syntaks er meget brugervenlig og logisk. Den er simpel, minimalistisk og blottet for unødige tegn, hvilket gør den let at overskue og lære. Både for erfarne programmører og begyndere.
Et af de bærende elementer i Pythons syntaks er indrykninger af kodeblokke. Hvor man i andre sprog udelukkende bruger indrykninger, for at bevare overblikket, er indrykninger i Python en del af syntaksen. Hvis man laver fejl i indrykningerne virker python programmet ikke efter hensigten, da Python parseren så ikke kan se, hvilke kodeblokke, der hører sammen.
Det kan lyde som en begrænsning, men fordelen er, at man slipper for at holde styr på parenteser og semikolonner. En ordentlig programmør laver under alle omstændigheder de korrekte indrykninger, så det eneste det kræver er en lidt mere grundig struktur i ens arbejde i starten. For begynderen vil dette arbejde med indrykninger give en fordel, når han senere vil lære andre programmeringssprog.
x = 3
if x == 3:
print “x er lig med 3″
else:
print “x er forskellig fra 3″
Kontrolstrukturer i Python
Pythons kontrolstrukturer fungerer som kontrolstrukturerne i andre sprog. Hovedforskellen er en let ændret syntaks. F.eks. skriver man i Python “elif” i stedet for “else if”. En anden væsentlig forskel er sammenligningsoperatorerne “og” og “eller”. De hedder ganske simpelt “and” og “or”.
x = 3
y = 2
if x == 3 and y == 2:
print “x er lig med 3, og y er lig med 2″
elif x == 3 and y != 2:
print “x er lig med 3, og y er forskellig fra 2″
elif x !=3 and y == 2:
print “x er forskellig fra 3, og y er lig med 2″
else:
print “x er forskellig fra 3, og y er forskellig fra 2″
Løkker i Python
“For” løkker fungerer en smule anderledes i Python end vi er vant til fra f.eks. JavaScript, PHP eller Java. ”For løkken fungerer nærmere som en “foreach” løkke. Hvis vi opretter et array, som vi kalder liste kan vi gennemløbe alle elementerne i listen på følgende måde:
liste = (“Python”, “PHP”, “JavaScript”)
for i in liste:
print liste(i)
Programmet vil udskrive elementerne i listen et af gangen.
En anden måde at bruge ”for” løkker på i Python er gennem den indbyggede “range” funktion:
for i in range(1,10):
print i
Ovenstående vil skrive tallene 1-9. Default intervallet i “range”-funktionen er 1. Hvis vi ønsker et andet interval skriver vi istedet:
for i in range(1,10,2):
print i
Denne programstupm vil istedet udskrive: 1, 3, 5, 7, og 9.
I Python kan man også bruge “while løkker”. De fungerer som i de fleste andre programmeringssprog.
En lixberegner i Python
Som et eksempel på et lidt mere avanceret program, vil vi nu programmere en meget simpel lixtalsberegner (læs om lix og lixtal).
Udover det vi har gennemgået til nu, vil vi i lixberegneren også bruge:
- Kommentarertegn (havelåge/hash/#) – Så kan vi kommentere direkte i koden. Det gør det lettere at bevare overblikket, når andre skal se din kode eller du senere vender tilbage til koden.
- Bruger-input – For at gøre programmet interaktivt.
- Import af eksterne moduler – For at få flere funktioner til rådighed, kan vi suplere Pythons indbyggede funktioner ved at importere ekstra moduler/biblioteker/pakker, der indeholder nye funktioner.
- Definere en funktion – For at samle programmet i en kodeblok, der kan afvikles med et simpelt kald.
Her er progamkoden i sin helhed:
# -*- coding: cp1252 -*-
def lix():
import re # regular expression modul importerestext = raw_input(“Kopier din tekst ind her:”)
#Antal punktummer beregnes
pktArray = text.split(“.”)
antalPkt = len(pktArray)-1#Antal ord beregnes
textUdenTegn = re.sub(‘[\.,]‘,”,text)
textArray = textUdenTegn.split()
antalOrd = len(textArray)#Lange ord beregnes
langeOrd = 0
for i in textArray:
if len(i)>6:
langeOrd = langeOrd + 1#LIX beregnes og udskrives
if antalPkt != 0 and antalOrd != 0:
lixtal = antalOrd/antalPkt + (langeOrd*100)/antalOrd #LIX = O/P + (L*100)/O
print “Lixtal:”,lixtal
print “Antal ord i teksten:” ,antalOrd
print “Antal punktummer i teksten:” ,antalPkt
print “Antal langeord i teksten:”, langeOrd
else:
print “Lixtal kan ikke beregnes”lix() #Tilsidst kaldes funktionen igen, så programmet ikke slutter
lix()
(OBS! Vær opmærksom på at du ikke kan copy-paste scriptet ind i IDLE. Python er meget følsom overfor forkerte indrykniger. Derudover bruger bloggen “dårlige” anførselstegn, der ødelægger syntaksen.)
De indledende øvelser
Allerførst sættes en encoding. Bare accepter det forslag som IDLE selv kommer med.
Så definerer vi en funktion. Vi kalder den lix(). Det betyder i praksis, at man kan køre hele programmet ved at kalde funktionen, altså ved at skrive lix(). Det vil vi benytte os af sidst i programmet.
Øverst i vores lix()-funktion importerer vi et Python modul, der hedder “re”. ”Re” står for “regular expressions”. Det giver os mulighed for at bruge funktioner, der kan håndtere regulære udtryk.
Tekstinput fra brugeren
Og så er vi klar for alvor. Det første er at vi skal have noget tekst fra brugeren som vi kan lave beregninger på. Til det bruger vi raw_input() funktionen. Brugerens tekst gemmer vi i en variabel, som vi kalder ”text”. Parameteren (det der står inde i parantesen) i raw_input()-funktionen bliver skrevet ud på skærmen.
Antal punktummer beregnes
Vi bruger Pythons indbyggede funktion split(), som deler en streng ved det tegn man sender med som parameter. Vi deler ved et punktum, og de enkelte dele gemmes i et array, som vi kalder liste.
Bagefter finder vi længden på arrayet med den indbyggede funktion len(). Parameteren er navnet på det element vi vil finde længden på. Bemærk at vi trækker 1 fra resultatet. Det er fordi, at når vi bruger split til at dele, vil der være noget på begge sider af punktummet. Også selvom dette noget er tomt. Dvs. at hvis vi deler på en tekst, der kun indeholder et punktum, vil der komme to dele (også selvom disse to dele er tomme).
Antal ord beregnes
Først bruger vi funktionen sub(), til at fjerne punktummer og kommaer fra teksten. Det gør vi for at undgå, at de bliver regnet med i ordets længde. Vi gør Python fortolkeren opmærksom på at funktionen findes i det importerede “re”-modul, ved at skrive “re.” foran funktionen. Parametrene i sub()-funktionen er:
- Det regulære udtryk, der skal ledes efter. I vores tilfælde punktum og komma
- Det som det regulære udtryk skal udskiftes med. I vores tilfælde ingenting. Det betyder i praksis at tegnen fjernes fra teksten.
- Navnet på den variabel, som funktionen skalbruges på.
Derfeter beregner vi antallet af ord, på stort set samme måde som vi beregnede punktummerne. Forskellen er her at funktionen split() default splitter på mellemrum, når der ingen parameter er angivet. Ved at bruge den default split værdi, splitter Python kun på mellemrum mellem tegn. Ergo slipper vi her at tage højde for eksta mellemrum som kunne komme ind før, efter og inde i teksten.
Lange ord beregnes
Først opretter vi variablen “langeOrd” og giver den værdien nul.
Så løber vi med en ”for”-løkke alle elementerne (altså ordene) i listen igennem. For hvert ord undersøger vi ordets længde med len() funktionen. Hvis ordet er længere end 6 bogstaver lægger vi 1 til variablen “langeOrd”.
Lix beregnes og udskrives
Først udersøger vi om antallet af ord og punktummer er forskelligt fra nul. Ellers kan beregningen ikke laves, da det ellers vil medføre division med nul, hvilket er en matematisk umulighed. Og det vil derfor udløse en logisk fejl, og afviklingen af vores Python program vil stoppe.
Derefter laver vi selve Lix beregningen. Intet nyt i det. Python beregner det v.h.a simpel matematik.
Så skriver vi resultaterne ud.
Til sidst i den sidste kodeblog kalder vi funktionen igen, så programmet ikke afsluttes, når vores beregning er foretaget.
Aller nederst er også et funktions kald. Det er dette funktions kald, der starter hele programmet op.
Videre med python
Hvis du vil videre med Python findes der flere muligheder. En af de bedste er C H Swaroops gratis online bog: “A Byte of Python“, som er en fremragende bog for begyndere. Både begyndere i Python, men også begyndere i programmering.
Et dansk alternativ er: “Linux – Friheden til at programmere i Python“. En lidt ældre bog (2004), men nogle gange det kan være rart at læse på dansk, hvis man er begynder.
Python Rocks er en kort introduktion, der både fremhæver fordele ved Python og giver et kort overblik over simpel Ptyhon programmering.
Dive into Python henvender sig til mere erfarne programmører. Den gratis online bog behandler alle aspekter af Python programmering.
Endelig kan du også kaste dig over den officielle Python tutorial: The Python Tutorial fra Python.org.
Hvis du har spørgsmål eller synes jeg har sprunget for hurtigt over noget væsentligt, så smid endelig en kommentar. Så vil jeg prøve at hjælpe så godt jeg kan.
Tilmeld RSS
21 Responses to “Python tutorial. En intro til Python for begyndere.”
By priisholm on aug 7, 2008
Fin artikel!
Endnu et par gode online ressourcer:
Dive Into Python: http://diveintopython.org/ – en rigtig udmærket bog for de lidt mere programmerings-erfarne, her gratis tilgængelig på nettet.
The Django Book: http://www.djangobook.com/ – om det efterhånden temmelig populære Python web application framework Django, “fra hestens mule” så at sige; også en “rigtig” bog gratis tilgængelig online.
#priisholm
By Niels on aug 7, 2008
Mange tak for det priisholm.
Har lige kort bladret begge python bøger igennem. Det ligner nogle super python ressourcer.
En af de meget sympatiske forhold omkring python er netop, at man kan finde så fremragende ressourcer gratis.
By Johannes on aug 18, 2008
Jeg forstår det ikke.
By Niels on aug 18, 2008
Hej Johannes
Kunne du være lidt mere konkret. Er det python du ikke forstår, er det tutorialen eller er det programmering i al almindelighed?
By Thomas on okt 4, 2008
Fin tutorial. Du har dog lavet en lille fejl i if eksemplet. Der står 3 et par steder i print i stedet for 2.
By Niels on okt 4, 2008
Tak for det, Thomas.
Fejlen er rettet.
By Søren on jan 11, 2009
Hej Niels
jeg er uddannet web-inteagrator, så kender til php i for vejen som skulle minde lidt om python.
men jeg er måske lidt en nød, for kan ikke finde den?? er det python.exe i C:\Python30\ ??
Jeg vil gerne lærer python, og har kigget lidt rundt på nettet, men det eneste sted jeg umiddelbart kunne finde, hvor de beskrev det helt ned til der hvor man skal skrive koden altså f.eks. IDLE det er dejligt at se, var hos dig
Hilsen Søren C. H. Rasmussen
p.s. håber stadigvæk du kommentere på denne artikle
By Niels on jan 11, 2009
Hej Søren.
Hos mig ligger IDLE i: C:\Python25\Lib\idlelib\idle.py
Jeg ved ikke, om det er det samme i Python 3.0. Har ikke leget med Python siden de udgav 3.0
By Søren on jan 11, 2009
okay.. mange tak fandt det.. hehe
men får denne fejl
>>> print “Hello world”
SyntaxError: invalid character in identifier (, line 1)
og
>>> print “hello world”
SyntaxError: invalid syntax (, line 1)
>>>
det skal måske lige siges jeg bare har åbnet det, og så skrev jeg det i den hvide “terminal”
By Niels on jan 11, 2009
hmm. Du har vel ikke kopieret teksten ind fra bloggen. Det give invalide anførselstegn.
Ellers pas på med hvidtegn som tab og mellemrum foran koden, da de jo er del af syntaksen.
Ellers har jeg ikke lige se andre muligheder for fejl. Det skulle virke.
Highlighter IDLE evt. din syntaksfejl?
By Søren on jan 11, 2009
prøver lige at beskrive hvordan det ser ud..
print “hello world”
SyntaxError: invalid syntax (, line 1)
print står med lilla
“hello world” står med grønt
i samme linje som print “hello world” kommer efter “hello world” er det markeret med rødt, altså bg farven (som om der er melllemrum hele vejen)..
altså som de ville se ud i html: print “hello world”
hvis du forstår hvad jeg mener?
By Søren on jan 11, 2009
how.. den skrev ikke html koderne…
anførsels tegnen er dem som der kommer når man trykker på shift + 2
By Niels on jan 12, 2009
Hej igen Søren.
Jeg har lige installeret Python 3.0 og får nu samme fejl som dig.
Hvilket minder mig om at Python syntaksen i 3.0 er ændret på en række områder i forhold til de tidligere Python udgaver.
Det betyder bla. at print statementet er blevet ændret til en print funktion. Dvs den nye syntaks er:
print(“Hello world”)
Ganske som vi kender det fra PHP.
Hvad er nyt i Python 3.0
By Søren on jan 12, 2009
okay lyder super hehe, ej der er dog en ; til sidst i php hehe.. men ellers ja
fanme godt du yder support hehe..
er det sådan at man kan lave en fil ved navn test.py og så trække den ind i og så kører den scriptet?
By Søren on jan 12, 2009
sorry fandt ud af det
kunne også bare have læst lidt videre hehe
By Hans on sep 26, 2009
Hej Niels
Mon du stadigvæk svarer på indlæg her? Jeg håber det.
Er ved at stifte et allerførste bekendtskab med Python og prøvede derfor at indtaste og afvikle lix koden i din udmærkede artikel. Når jeg trykker på Run, Run module får jeg meddelelse om en Syntax error (There is an error in you program: EOL while scanning string literal)og cursoren placeres ved slutparentesen i:
textUdenTegn = re.sub(‘[\.,]‘,”,text)
En anden ting. Jeg har læst at korrekt indrykning er afgørende. Når jeg indtaster de to gange lix() (sidste to linjer) så kommer de med samme indrykning. Er det et problem?
Hans
By Niels on sep 26, 2009
Hej Hans. Jeg har lige tjekket sciptet (godt nok i python 2.5, men tror ikke det er det der er dit problem), og det virker fint ved mig.
OBS: hvis du bruger python 3 er der enkelte små syntaks ændringer. Se kommentar nr 13
Jeg gjorde følgende. Kopierede scriptet ind i notes blok. Erstattede samtlige ” og ‘ med nye ‘ (wordpress formaterer dem så de giver syntaks fejl). Derefter åbnede jeg idle, åbnede et nyt vindue, pastede det tilrettede script ind, gemte det og afviklede det bagefter. Det virkede helt efter hensigten.
Bemærk at i linjen, hvor du får fejlen, er der 4 apostrofer. De 2 første omkring firkant parenteserne, de 2 sidste omkring ingenting.
Endvidere er indrykningen ved de 2 gange lix() VIGTIG. Den øverste lix() kalder funktionen igen INDE fra funktionen selv. Den nederste starter funktionen første gang, hvorfor den også er i det yderste niveau af indrykninger (altså ikke rykket ind).
By Hans on sep 26, 2009
Hej igen Niels
. Jeg havde tast et dobbelt anførselstegn i stdet for to enkelte (omkring ingenting). Jeg tror det var forklaringen på den del. Men jeg må vist studere noget mere om indrykning for når jeg har rettet ovennævnte, gemt og trykket på Run så får jeg noget med “unexpected indent”. Skal man selv styre det der indent?
Tak for hurtigt svar.
Ja min nybegynderstatus fornægter sig ikke
Hans
By Niels on sep 27, 2009
Jep. Indrykninger skal styres med hård hånd, da det er pythons måde at afgøre hvilke blokken koden hører til. Det kan være svært i starten til gengæld slipper man for alle tuborgparenteserne til at holde styr på kodeblokkene.
Mit råd er simpelthen at starte med små enkle scripts, der er lette at overskue. Så kommer forståelsen for indrykninger hurtigt.
By Hans on sep 27, 2009
Point taken.
Det er faktisk ret sjovt det her.
Hans