Valg og funktioner

Herfra begynder vi at arbejde i Thonny's øverste vindue.

Her kan vi begynde at lave rigtige programmer, som i eksemplet herunder:

"""
Mit første program
"""

længde = 10
højde = 5
areal_firkant = længde * højde
print(f"Firkantens areal er: {areal_firkant}")

Når du så trykker F5 kører programmet i shell-vinduet

Er det første gang du kører et program skal du gemme det på harddisken. Her har jeg valgt at kalde programmet test.py.

>>> %Run test.py
Firkantens areal er: 50

Første linie fortæller hvad programmet hedder og linjerne herunder viser programmets output

Du kan ikke køre programmet før det er gemt på harddisken. Jeg anbefaler dig at gøre følgende:

  1. Opret en mappe hvor du gemmer dine pythonprogrammer
  2. Opret evt. undermapper til de forskellige programtyper for at få et bedre overblik.
  3. Giv programmerne sigende navne f.eks: if_else_program1.py
  4. Programmerne skal have endelsen .py
  5. Programmerne må ikke hedde det samme som kommandoen

Nu skal vi til at bruge alt det vi har lært om variabler, input og operatorer

Vi vil lave et program der kan give os forskellige svar alt efter input

Funktioner

Funktioner kan kaldes små programmer i programmet. I dette eksempel har jeg lavet programmet i toppen til en funktion:

def areal_firkant(længde, højde):
    print(f"Firkantens areal er {længde*højde}")
    
areal_firkant(4,5)
areal_firkant(7,8)
>>> %Run test.py
Firkantens areal er 20
Firkantens areal er 56

Jeg har altså lavet min helt egen smarte måde at regne firkanters areal ud, så jeg bare skal skrive længden og bredden ind i funktionens parentes. I forhold til eksemplet øverst på siden har jeg reduceret koden fra 4 til 2 linier ... og fremover kan jeg udregne alle de arealer jeg vil.

Hvad var det jeg gjorde

def areal_firkant(længde, højde):
  1. def fortæller Python at nu kommer der en definition
  2. areal_firkant er funktionens navn
  3. (længde,højde) er de 2 variabler som funktionen skal bruge
print(f"Firkantens areal er {længde*højde}")
Her udskriver jeg firkantens areal. I den krøllede parantes udregner jeg arealet, som så bliver udskrivet.
areal_firkant(4,5)
Her kalder jeg funktionen, hvor jeg har sat længden til 4 og højden til 5. Funktionen sørger for at udskrive arealet for mig.
  • ... alle funktioner i programmet skal stå øverst i koden
  • ... at der skal være et kolon i slutningen af første linie
  • ... alle de linjer der hører til funktion skal være skubbet ind under den. Enten ved hjælp af Tab eller Mellemrum.

Return

Nogle funktioner skal ikke selv printe sit resultat, men blot levere det videre. Det kan f.eks. være en funktion der laver kvadratal. Se koden herunder:

def kvadrattal(a):
    tal = pow(a,2)
    return tal

print(kvadrattal(2))
>>> %Run test.py
4

Funktionen returnerer resultatet 2 og når vi så printer kvadrattal(2), så printer vi resultatet - altså 4.

Tomme funktioner

Funktioner behøver ikke at have variabler i sig. Funktionen kan også bare starte en eller flere kommandoer.

Det kan f.eks. være en kode der printer kontaktinformationer, som skal stå hver gang programmet melder fejl:

def tekst():
    print("""Denne software er lavet af : 
    Thomas Jensen 
    fakeuser@fakemail.dk""")
    
tekst()
>>> %Run test.py
Denne software er lavet af : 
    Thomas Jensen 
    fakeuser@fakemail.dk

En tom funktion kan også bestå af en række kommandoer der skal føres hvis noget sker - f.eks. at man klikker på en knap

if - else

if-else bruges når progammet skal køre en kode frem for en anden. Et overblik over koden ser ud som følger:

if [BETINGELSE]:
	** Gør noget **
else:
	** Gør noget andet **

If - else er smart at bruge, når man har en enten eller situation, og det bruger man meget i programmering. Det kan f.eks. være når:

  • Et tal er lige med
  • Et tal er over eller under et andet tal
  • Hvis brugeren har svaret noget
  • Hvis en funktion er noget
  • ...

Her er et eksempel på et gættespil, hvor brugeren skal gætte et tal. Har brugeren gættet rigtigt skal programmet sige "Godt gættet" og ellers "Det var forkert":

gæt = input("Gæt et tal mellem 1 og 5: ")
if gæt == "4":
    print("Godt gættet")
else:
    print("Det var forkert")

Her har jeg først gættet på 3 og derefter 4:

>>> %Run test.py
Gæt et tal mellem 1 og 5: 3
Det var forkert
>>> %Run test.py
Gæt et tal mellem 1 og 5: 4
Godt gættet
  • ... brug dobbelt == når noget skal være det samme som
  • ... der skal være et kolon til slut
  • ... koden der skal udføres skal rykkes ind
  • ... der skal ikke være nogen betingelse for else

if - elif - else

Nogle gange er der flere end to betingelser der skal undersøges. Når der er det kan vi indsætte en elif.

if [BETINGELSE 1]:
	** Gør noget **
elif [BETINGELSE 2]:
	** Gør noget andet **
elif [BETINGELSE 3]:
	** Gør noget andet **	
...	
else:
	** Gør noget hvis ingen af betingelserne ovenfor er opfyldt **

Her er et eksempel på et program der spørger til personens øjenfarve:

farve = input(""" Hvad farve har dit øje:

- Jeg har brune øjne (brun)
- Jeg har blå øjne (blå)
- Jeg har grønne øjne (grøn)
- Jeg har en anden farve (andet)

Skriv dit svar her: """)
         
if farve == "brun":
    print("\nDu har brune øjne")
elif farve == "blå":
    print("\nDu har blå øjne")
elif farve == "grøn":
    print("\nDu har grønne øjne")
else:
    print("\nDine øjne er hverken brune, blå eller grønne")

Her har jeg kørt programmet 2 gange og først svaret brun og anden gang andet.

>>> %Run test.py
 Hvad farve har dit øje:

- Jeg har brune øjne (brun)
- Jeg har blå øjne (blå)
- Jeg har grønne øjne (grøn)
- Jeg har en anden farve (andet)

Skriv dit svar her: brun
Du har brune øjne

>>> %Run test.py
 Hvad farve har dit øje:

- Jeg har brune øjne (brun)
- Jeg har blå øjne (blå)
- Jeg har grønne øjne (grøn)
- Jeg har en anden farve (andet)

Skriv dit svar her: andet

Dine øjne er hverken brune, blå eller grønne

if - helt for sig selv

Nogle gange skal et program kun gøre noget i helt specielle situationer. Forestil dig et program der skal tænde strømmen til en blæser når temperaturen når over 20°.

Her vil det være nok med følgende linie:

if temp > 20:
	start_blæser()

if bør altid stå for sig selv hvis de betingelser der bliver undersøgt ikke hænger sammen. Tænk på et eksempel hvor koden stiller en masse spørgsmål:

  • Hvor gammel er du
  • Hvor bor du
  • Har du bil
  • ...

Her vil det give bedst mening at holde tingene helt adskilt i koden, for at det bliver tydeligt at betingelserne intet har med hinanden at gøre - altså:

if alder >= 18:
	over_18()
if by = "København":
	bopæl_københavn()
if bil = "ja":
	har_bil()

Når man læser koden her, så er man ikke i tvivl om at hver af betingelserne udløser hver sine funktioner. Det er tydeligt at de ikke har nogen sammenhæng. Se f.eks. her hvor den er sat på som if - elif - else:

if alder >= 18:
	over_18()
elif by = "København":
	bopæl_københavn()
elif bil = "ja":
	har_bil()
...	

Kode skal ikke bare virke ... den skal være til at læse... også for andre end dig selv.

Opgaver

I disse opgaver skal du bruge if-/elif-/elsestrukturer, sammen med operatorer. Der er et overblik over operatorerne herunder.

Overblik over operatorer
Operator Beskrivelse Eksempel
== Lig med 5 == 8 → falsk
> større end 5 > 8 → falsk
< mindre end 5 < 8 → sand
>= Større end eller lig med 5 >= 8 → falsk
<= Mindre end eller lig med 5 <= 8 → sand
!= Ikke lig med 5 != 8 → sand
x and y Både x og y skal være sand x=6 ; y=3

(x < 10 and y > 1) → sand
x or y Kun en behøver at være sand x=6 ; y=3

(x == 6 or y == 1) → sand

Er du myndig?

Lav en kode der undersøger om man er myndig eller ej (18+)

Pendlerkort

Lav en kode der undersøger om personen hos DSB er berettiget til et ungdomskort (under 20), et pensionistkort (over 65) eller skal købe en almindelig billet.

  • Under 20 → ungdomskort
  • 20-64 → almindeligt
  • 65-110 → Pensionistkort
  • 110+ → Spøgelser betaler ikke billetter

Er det fredag?

På hjemmesiden http://www.erdetfredag.dk/ får du at vide om det er fredag. Lav en lignende kode, hvor svarene er:

  • Hvis Fredag → YES det er fredag!
  • Hvis Lørdag og Søndag → Nej... Men det er weekend!
  • Ellers → Nope .... :(

HINT: For at få det til lykkes skal du importere modulet strftime fra pakken time. Ved hjælp af den kan man finde:

Overblik over strftime()
Dato
%u dag i ugen (mandag=1, søndag=7)
%V Ugenr: 00-53 (ISO 8601)
%d Hvilken dag i måneden
%m Månede
%y Årstal - 2 cifre (17)
%Y Årstal - 4 cifre (2017)
%D Dato (Måned/dag/år)
Tid
%H Timetal (0-24)
%M Minuttal
%S Sekundtal
%R Klokken (timer:minutter)
%T klokken (timer:minutter:sekunder)

Eksempel på strftime() kørt på en onsdag:

	>>> from time import strftime
>>> strftime("%u")
'3'

Se fuldliste her: https://www.tutorialspoint.com/python/time_strptime.htm

Ændr. koden så den fortæller hvor mange dage der er til fredag.

Hvornår har du fri

Lav en kode der fortæller hvor mange timer og minutter der er til du har fri, for hver dag i ugen.

Try - fang fejl

I alle eksemplerne ovenfor forudsætter vi at brugeren gør som vi har bedt om. Altså indtaster tingene korrekt. Det kan vi bare ikke altid regne med at de gør. Derfor skal du nu lære om en metode til at fange fejl, og give brugeren besked tilbage.

Funktionen ser ud som herunder:

try:
	Kode der skal køres
except:
	Det der skal køres hvis koden under try laver fejl

Et konkret eksempel er f.eks. hvis du du vil have brugeren skal indtaste et heltal - f.eks. antallet af sodavand:

antal = 0
try:
    antal = int(input("Antal sodavand: "))
except:
    print(f"{antal} er ikke et heltal. Prøv igen!")

Her har jeg kørt koden, og indtastet et ja, 8.0 og 8

>>> %Run test.py
Antal sodavand: g
0 er ikke et heltal. Prøv igen!
>>> %Run test.py
Antal sodavand: 8.0
0 er ikke et heltal. Prøv igen!
>>> %Run test.py
Antal sodavand: 8
>>>

Læg mærke til 2 ting:

  1. Variablen skal oprettes før du anvender den i try
  2. Selvom 8.0 er det samme som 8, så brokker koden sig.

Du vil senere lære hvordan denne teknik kan bruges til at spørgsmålet bliver stillet igen.

Raise Exception

Vil du tvinge en fejl igennem, så kan det gøres ved: raise Exception

	try:
	raise Exception
except:
	print("Der er fejl i koden")	
>>> %Run test.py
Der er fejl i koden

Dette kan bruges under test, men kan også være brugbart. Det kan f.eks. være brugbart til at afbryde programmet hvis en bruger på flere forsøg ikke gør hvad han skal (eller må!). I stedet for at brugeren bliver ved med at forsøge sig, så vælger du som programmør at afbryde programmet, og kommer med en beskes om hvor brugeren skal henvende sig for at få hjælp.

Murphy's lov

Som programmør skal man prøve at forudse den slags problemer, for man skal huske på Murphy's lov: Hvis noget kan gå galt, så vil det gå galt

X in Y

Skal du finde ud af om en tekststreng findes i en tekststreng kan du bruge:

[TEKSTSTRENG] in [TEKST]

Hvis ordet står i sætningen vil der blive svaret tilbage med True, og hvis ikke False.

Der findes mange forskellige programmeringssprog, og her lærer vi om Python.

Lad os prøve at søge i denne tekst ved hjælp af shell:

>>> tekst = "Der findes mange forskellige programmeringssprog, og her lærer vi om Python."

>>> "Python" in tekst
True
>>> "sprog" in tekst
True
>>> "Java" in tekst
False 

Læg mærke til at funktionen finder sprog. Funktionen søger kombinationen af bogstaver ... ikke selve ordet sprog.

Opgaver

Ord i tekst 1

Ændr opgaven så du ved hjælp af et input kan få svar på om et ord findes i tekstrengen

Indsæt et større tekst fra nettet og lav søgninger på ord i denne tekst ved hjælp af et brugerinput.