Kom i gang
Hvis du ikke har gjort det enda, må du installere Python og Visual Studio Code før du fortsetter.
- Hello World
- Kommentarer
- Utskrift til terminalen
- Python som enkel kalkulator
- Variabler
- Strenger
- Input fra terminalen
- Syntaksfeil, krasj og logiske feil
Hello World
Det er tradisjon for at det første programmet man skriver når man lærer seg et nytt programmeringsspråk er et program som skriver ut ordene «Hello World» til terminalen. I Python ser programmet slik ut:
print('Hello World')
Et funksjonskall er en instruksjon om å utføre en bestemt oppgave. Et funksjonskall består av to deler:
- Funksjonsnavn. I eksempelet over er
print
navnet på funksjonen. - Argumenter til funksjonen, omsluttet av paranteser. Dette er verdier vi gir til funksjonen som input. I eksempelet over er
'Hello World'
argumentet som sendes til funksjonenprint
.
Antall argumenter kan variere.
- Hvis det er to eller flere argumenter, må de skilles med komma. For eksempel er
print('Hello', 'Hello again')
et funksjonskall med to argumenter. - Hvis det er null argumenter, må det likevel være parenteser. For eksempel er
print()
et funksjonskall uten argumenter.
Kommentarer
Kommentarer er tekst i programmet vårt som blir fullstendig ignorert av Python. Alt som kommer etter en hashtag (#
) på en linje blir ignorert, og er kommentarer.
print('Hello World') # Her er en kommentar
# print('På denne linjen skjer det ingenting')
print('Her er # i en streng.') # Hashtag mellom 'hermetegn' telles ikke
Utskrift til terminalen
Print-funksjonen skriver ut verdier til terminalen. Hver print skriver ut én linje hver.
print('Hello') # Hello
print('World') # World
print(40 + 2) # 42
Flere ting kan skrives ut på sammen linje. Du kan
- bruke én print-setning med flere argumenter, eller
- legge til
end=''
som argument i print-setningen. Da kommer det ikke et linjeskift på slutten når print er ferdig.
# Hello World 42
print('Hello', 'World', 40 + 2)
# HelloWorld42
print('Hello', end='')
print('World', end='')
print(40 + 2)
Utskrift av variabler og uttrykk med f-strenger.
x = 2
y = 3
print(f'Visste du at {x} + {y} er {x + y}?') # Visste du at 2 + 3 er 5?
Hva skjer om du fjerner
f
‘en før hermetegnet i print-setningen?
Python som enkel kalkulator
Man kan bruke Python som en enkel kalkulator for å evaluere matematiske uttrykk.
print(2 + 2) # Addisjon --> 4
print(5 - 3) # Subtraksjon --> 2
print(2 * 3) # Multiplikasjon --> 6
print()
print(157 / 10) # Divisjon --> 15.7
print(157 // 10) # Heltallsdivisjon (runder alltid ned) --> 15
print(157 % 10) # Modulo (rest etter heltallsdivisjon) --> 7
print()
print(3 ** 2) # Potens --> 9
print(max(2, 3)) # Største verdi --> 3
print(min(2, 3)) # Minste verdi --> 2
print(abs(-3)) # Absoluttverdi --> 3
print()
# Man kan også ha kombinerte uttrykk.
print(2 + 3 * 4) # 14
print(max(2, 3, 199, 4, 5) + 1) # 200
print()
# Man kan bruke parenteser for å overstyre presedensen til operasjoner.
# Standard presedens (rekkefølgen operasjoner utføres i) er som i matematikk
print((2 + 3) * 4) # 20
Variabler
En variabel er et navn som refererer til en verdi. Etter at en variabel er angitt, kan navnet brukes i stedet for verdien den refererer til.
x = 2
y = 3
print(x + y) # 5
Vi velger selv hvilket navn vi vil gi våre variabler. Variabelnavn kan ikke inneholde mellomrom eller spesialtegn, annet enn understrek (_
).
work_hours_per_week = 12
number_of_weeks = 18
hourly_salary = 200
total_hours = work_hours_per_week * number_of_weeks
total_salary = total_hours * hourly_salary
print('Totalt antall timer:', total_hours) # Totalt antall timer: 216
print('Totalt lønn:', total_salary) # Totalt lønn: 43200
Strenger
En streng er en verdi som representerer tekst. En streng består av bokstaver, tallsymboler, mellomrom, linjeskift og andre tegn.
print('Strenger skrives mellom apostrofer.')
print("Man kan også bruke hermetegn.")
print(Uten noen form for anførselstegn er det ikke en streng, og det krasjer)
# En streng kan lagres i en variabel.
foo = 'bar'
print('foo') # 'foo' er en streng (skriver ut: foo)
print(foo) # foo er en variabel (skriver ut: bar)
Bakstreken \
har en spesiell betydning når man angir strenger. Den benyttes for å angi tegn man vil ha i strengen sin, men hvor selve tegnet har spesiell betydning i Python; for eksempel linjeskift og apostrof.
\n
linjeskift\'
apostrof\"
hermetegn\\
bakstrek
# En streng kan inneholde linjeskift (\n)
print('Denne strengen\ninneholder to\nlinjeskift')
# En streng kan inneholde apostrof (')
print('Her \'er\' det apostrof')
print("Her 'er' det apostrof") # bedre løsning: bytt typen anførselstegn
# En streng kan inneholde bakstrek (\)
print('C:\\mappe\\script.py')
Lengden av en streng
# len() finner lengden til en streng
x = 'foo'
print(len(x)) # 3
print(len('foobar')) # 6
print(len('foo bar')) # 7
print(len('foo\nbar')) # 7 (linjeskift \n telles kun som 1)
print(len(' foobar ')) # 9 (inkluderer mellomrom)
# En streng kan være «tom»
x = ''
print(len(x)) # 0
print(x) # printer en tom streng (altså ingenting) på denne linjen
print("---")
Operasjoner på strenger
# Strenger konkateneres (limes sammen) med pluss (+)
print('foo' + 'bar') # foobar
a = 'super'
b = 'duper'
c = a + b
print(c) # superduper
Samme operasjon (+
) fungerer ulikt på strenger og tall:
# Pluss med strenger: konkatenasjon
x = '12'
y = '34'
print(x + y) # 1234
# Pluss med tall: addisjon
x = 12
y = 34
print(x + y) # 46
# Strenger repeteres flere ganger med gangesymbol (*) og et tall
print('*' * 9) # *********
s = 'bar'
print(2 * s) # barbar
f-strenger: å putte verdier inn i en streng
Det er mulig å kombinere tekst og andre verdier med f-strenger. Legg merke til f
før apostrofen.
# Med en f-streng kan vi fleksibelt inkludere verdier i strengen
number_of_students = 550
course_id = 'INF100'
print(f'Vi ønsker {number_of_students} studenter velkommen til {course_id}')
# Uten f får vi en logisk feil -- klarer du å forutsi hva før du trykker kjør?
print('Vi ønsker {number_of_students} studenter velkommen til {course_id}')
print()
# f-strenger kan lagres i en variabel
age = 35
message = f'Jeg er {age} år gammel.'
print(message) # Jeg er 35 år gammel.
# etter opprettelsen er f-strenger helt vanlige strenger (de er ikke magiske)
age = 40
print(message) # fremdeles «Jeg er 35 år gammel.»
Input fra terminalen
# Les input og skriv ut en hilsen
print('Skriv ditt navn')
name = input()
print(f'Hei, {name}!')
Input-funksjonen returnerer alltid en streng, uansett hva brukeren skriver inn. Hvis vi skal bruke input fra brukeren som om det var et tall, må det konverteres til et tall med int
(eller float
) -funksjonen.
# Når input er et tall
print('Skriv et tall')
a = input() # f. eks. 4
print('Skriv et tall til')
b = input() # f. eks. 2
print('Før konvertering er a og b strenger. a + b =', a + b) # 42
# Konverterer til tall
a = int(a)
b = int(b)
print('Etter konvertering er a og b heltall. a + b =', a + b) # 6
Syntaksfeil, krasj og logiske feil
Kildekoden til et dataprogram kan inneholde tre typer feil:
- syntaksfeil,
- kjøretidsfeil (feil som fører til krasj), og
- logiske feil.
Syntaksfeil gjør at programmet vårt ikke starter i det hele tatt. Med litt øvelse er feilmeldingene om syntaks-feil som kommer fra Python ganske informative, og forteller oss nøyaktig hvor i programmet feilen er. For eksempel:
print('Programmet starter her') # Vi kommer ikke hit engang før krasjen
print('oj") # Syntaksfeil! (hermetegn matcher ikke apostrof rundt strengen)
print('Programmet er ferdig')
# Gir output:
#
# File "foo.py", line 2
# print('oj")
# ^
# SyntaxError: unterminated string literal (detected at line 2)
print('Programmet starter her') # Vi kommer ikke hit engang før krasjen
print(hello world) # Syntaksfeil!
print('Programmet er ferdig')
# Gir output:
#
# File "foo.py", line 2
# print(hello world)
# ^^^^^^^^^^^
# SyntaxError: invalid syntax. Perhaps you forgot a comma?
Kjøretidsfeil (krasj) skjer når programmet vårt slutter å kjøre midtveis i programmet fordi man forsøker å utføre en ulovlig operasjon, for eksempel ved å referere til et variabelnavn som ikke er definert eller å dele på 0. Kjøretidsfeil kan være vanskeligere å finne enn syntaksfeil, fordi feilmeldingen ikke alltid forteller oss nøyaktig hvor i programmet selve feilen er. Eksempler på kjøretidsfeil:
print('Programmet starter her')
hallo = 42 # Her er feilen (skrivefeil i variabelnavn)
world = 3.14
print(hello, world) # Her krasjer programmet
print('Programmet er ferdig') # Vi kommer ikke hit
# Gir output:
#
# Programmet starter her
# Traceback (most recent call last):
# File "foo.py", line 4, in <module>
# print(hello, world)
# ^^^^^
# NameError: name 'hello' is not defined.
print('Programmet starter her') # Denne linjen utføres
print('42' + 3) # Krasj! (å legge sammen en streng og et tall er umulig)
print('Programmet er ferdig') # Vi kommer ikke hit
# Gir output:
# TypeError: can only concatenate str (not "int") to str
print(1/0) # Krasj! (å dele på 0 er umulig)
# Gir output:
# ZeroDivisionError: integer division or modulo by zero
Logiske feil er den kjipeste formen for feil, fordi den er så vanskelig å oppdage. I verste fall oppdages ikke den logiske feilen før det har oppstått store kostnader et annet sted i verdikjeden (for eksempel hos en kunde).
x = 2
y = 3
z = x + y
print(f"{x} + {z} = {y}") # Logisk feil, vi har byttet z og y
# Gir output:
# 2 + 5 = 3