Ofte har man brug for at ens program skal gøre forskellige ting ved forskellige betingelser. Dette gøres med if-elif-else strukturer. Forestil dig der skal laves et vælg mellem om man er en dreng eller pige. Herunder er der lavet et eksempel hvor indtastningen 1 giver en dreng og 2 giver en pige:
Læg mærke til at der er lighedstegn efter hinanden (==). Det bliver vi nød til at gøre fordi python ellers tror at vi opretter en ny variabel
valg = int(input("Tast 1 for dreng og 2 for pige: "))
if valg == 1:
print ("\nDu valgte dreng")
if valg == 2:
print ("\nDu valgte pige")
Herunder vælges 2
Tast 1 for dreng og 2 for pige: 2 Du valgte pige ------------------ (program exited with code: 0) Press return to continue
Når vi spørger med if er syntaksen
if *** betingelse *** :
Betingelsen i eksemplet herover er, at variablen valg skal være 1. Læg mærke til, at hele sætningen afsluttes med et kolon - :, og det som skal udføres under det valg er tabuleret ind. På den måde ved Python hvad der skal udføres hvis man har valgt 1 eller 2.
Vi kunne også lave dette eksempel på følgende måde:
valg = int(input("Tast 1 for dreng og 2 for pige: "))
if valg == 1:
print ("\nDu valgte dreng")
else:
print ("\nDu valgte pige")
Denne kode fungerer ved at den evalurer om valget var 1 eller ej. Problemet er bare, at hvis nu brugeren taster 3, så vil programmet også svare at man valgte pige. Men det var jo en fejltastning. Vi har altså brug for at kunne smide en ekstra mulighed ind. Det kan vi gøre ved hjælp af at tilføje elif imellem if og else.
valg = int(input("Tast 1 for dreng og 2 for pige: "))
if valg == 1:
print ("\nDu valgte dreng")
elif valg == 2:
print ("\nDu valgte pige")
else:
print ("Du skal vælge enten 1 eller 2")
Det som koden gør nu er:
Koden er stadig ret mangefuld, da den jo ikke gentager spørgsmålet hvis brugeren svarer forkert. Det er noget vi vil kigge på i afsnittet om løkker. Læg mærke til, at der skal anvendes en fast struktur. elif anvendes kun hvis der er mere end 2 betingelser der skal undersøges. Der skal altid afsluttes med else. Generelt kan disse betingelser skrives op på følgende formel
if *Betingelse*:
*Gør noget*
elif *Ny betingelse*:
*Gør noget andet*
else:
*Gør noget tredie
Man kan indsætte alle de elif man vil, men man skal huske at der skal afsluttes med else.
Ofte har man brug for at finde ud af om en tekststreng findes i en sætning, f.eks. om et navn er nævnt i en sætning. Det kan man gøre ved at bruge in. Det får programmet til at svarer tilbage med enten True eller False. Dette enten/eller svar kaldes på progammeringssprog for "boolean". Lad os afprøve det herunder.
"Der findes mange programmeringssprog, og de kan stort set det samme. Men de gør den på en forskellig måde. C er et meget præcist, men også meget omstændigt sprog, hvorimod Python er noget lettere at gå til."
Lad os undersøge denne sætning for følgende tekst: Python, C og Java.
tekst = "Der findes mange programmeringssprog, og de kan stort set det samme. Men de gør den på en forskellig måde. C er et meget præcist, men også meget omstændigt sprog, hvorimod Python er noget lettere at gå til."
prg_python = "Python" in tekst
prg_c = "C" in tekst
prg_java = "Java" in tekst
print ("Findes Python i sætningen: {0}".format(prg_python))
print ("Findes C i sætningen: {0}".format(prg_c))
print ("Findes Java i sætningen: {0}".format(prg_java))
Findes Python i sætningen: True Findes C i sætningen: True Findes Java i sætningen: False ------------------ (program exited with code: 0) Press return to continue
Lav en kode der undersøger om man er myndig eller ej (18+)
Lav en kode der undersøger om personen hos DSB er berettiget til et ungdomskort (under 18), et pensionistkort (over 65) eller skal købe en almindelig billet.
Ændr opgaven så du ved hjælp af et input kan få svar på om et ord findes i tekstrengen - og hvor mange gange de optræder.
Indsæt et større tekst fra nettet og lav søgninger på ord i den tekst.
På hjemmesiden http://www.erdetfredag.dk/ får du at vide om det er fredag. Lav en lignende kode, hvor svarene er:
HINT: For at få det til lykkes skal du importere modulet datetime og anvende datetime.datetime.today().weekday() til at returnere en talværdi for dagen. Mandag er 0 og søndag er 6.
Eksempel på datetime kørt på en torsdag:
import datetime
today = datetime.datetime.today().weekday()
print(today)
3 ------------------ (program exited with code: 0) Press return to continue
Ændr. koden så den fortæller hvor mange dage der er til fredag.
Ofte har man behov for at noget skal udføres gentagne gange. Det kan f.eks. være at udskrive et logo, eller en if-else struktur der skal køres ofte. Her anvender man funktioner, så man kan skrive koden en gang, men "kalde" på den lige så ofte man vil.
Lad os prøve at lave et simpelt eksempel, hvor vi anvender en funktion til at indsætte noget f.eks:
╔═══════════════════╗ ║ ║ ║ Velkommen ║ ║ ║ ╚═══════════════════╝
Øverst skriver vi def Velkommen(). Det betyder at vi nu definerer en funktion der hedder velkommen. Det som står i funktionen bliver først kørt når programmet kalder funktionen, og det gøres ved at skrive Velkommen(). Se her eksemplet:
def Velkommen():
print("╔═══════════════════╗")
print("║ ║")
print("║ Velkommen ║")
print("║ ║")
print("╚═══════════════════╝")
print("Herunder udskrives funktionen\n")
Velkommen()
Herunder udskrives funktionen ╔═══════════════════╗ ║ ║ ║ Velkommen ║ ║ ║ ╚═══════════════════╝ ------------------ (program exited with code: 0) Press return to continue
Som du kan se springer programmet selve funktionen over, og udfører den først når programmet rammer Velkommen(). Definitioner skal derfor placeres øverst i programmet, da programmet ellers ikke vil ane, at det skal gøre når det rammer Velkommen().
Forestil dig en situation hvor vi skal have en blæser til at tænde når temperaturen overstiger et vist gradtal°. I eksemplet herunder angiver vi selv temperaturen, men temperaturen kunne lige så godt have kommet fra en aflæsning af et digitalt termometer. Vi sætter a til at være rummets temperatur og b til at være den temperatur der skal til for at tænde blæseren.
def turn_on (a,b):
if a > b:
return True
room_temp = 19 # rummets temperatur
turn_on_temp = 18 # Tændningstemperaturen
if turn_on(room_temp,turn_on_temp) is True:
print ("tænd")
else:
print ("Sluk")
tænd ------------------ (program exited with code: 0) Press return to continue
Ved at angive to konstanter i funktionen kan vi "kalde" parametre fra koden ind i funktionen. På den måde kan vi lave funktioner der er meget fleksible.
Lad os forestille os at vi vil lave en funktion der ganger et indtastet tal med 2. I selve funktionen laver vi den nye variabel, som efterfølgende skal skrives ud:
def skriv_tal():
valgt_tal=int(input("Skriv et tal: "))
dobbelt_a=valgt_tal*2
skriv_tal()
print("Det fordoblede tal er: {0}".format(dobbelt_a))
Skriv et tal: 5 Traceback (most recent call last): File "test.py", line 10, inprint(dobbelt_a) NameError: name 'dobbelt_a' is not defined ------------------ (program exited with code: 1) Press return to continue
Fejlkoden fortæller os at den ikke kan finde variablen dobbelt_a. Det skyldes at variablen er sat inde i funktionen skriv_tal() og derfor kun kan anvendes der.
For at omgå dette må vi gøre sådan at variablen bliver tilgængelig i hele programmet. Det opnås ved at oprette variablen globalt før værdien sættes ved at skrive: global dobbelt_a
def skriv_tal():
valgt_tal=int(input("Skriv et tal: "))
global dobbelt_a
dobbelt_a=valgt_tal*2
skriv_tal()
print("Det fordoblede tal er: {0}".format(dobbelt_a))
Skriv et tal: 5 Det fordoblede tal er: 10 ------------------ (program exited with code: 0) Press return to continue
Et trick man kan anvende når man programmerer og ønsker at følge udviklingen af ens variabler er, at lave en chk() funktion. Det betyder at når vi sætter variablen check = 1, så vil de udføre funktionen ellers ikke. På den måde kan man under kodningen følge med hvad der sker.
def chk(a):
if check == 1:
print (a)
check = 1
mail = "hansboedker@dkmail.dk"
mail_len = len(mail)
chk(mail_len)
21 ------------------ (program exited with code: 0) Press return to continue
Ændres værdien check til 0, vil outputtet være tomt
------------------ (program exited with code: 0) Press return to continue
Lav funktionen Factor(a,b) der undersøger om a er en faktor i b. Lav et output der ligner nedestående:
Undersøger om 2 er en faktor i 10 2 er en faktor i 10 ------------------ (program exited with code: 0) Press return to continue
Lav funktionen linie(a,b), der udregner skæringspunktet med x-aksen ud fra ligningen \( y = ax+b \), og hvor den skærer y-aksen.
Lav funktionen 2grad(a,b,c) der udregner parablens sækæring(er) med x-aksen.. Anvend formlen:
\( x = \frac{-b \pm \sqrt D}{2a}~, ~~ hvor~~D = b^2-4ac\)
Output skal fortælle:
Ofte har man brug for at computeren skal kunne levere et tilfældigt tal. Det kan feks. være hvis computeren skal udvælge et element i en liste eller skal simulere terningkast. For at kunne anvende Random skal det først importeres, hvorefter vi får adgang til dets funktioner. Den væsentligste forskel ligger i hvordan det bliver præsenteret i koden. Lad os se på det første eksempel:
from random import random, randrange
tilfældigtal = random()
terningkast = randrange(1,6)
print("Et tilfældigt tal: {0}".format(tilfældigtal))
print("\nEt terningkast: {0}".format(terningkast))
Et tilfældigt tal: 0.5522756126989775 Et terningkast: 5 ------------------ (program exited with code: 0) Press return to continue
I dette eksempel importeres enkelt elementerne fra modulet. Det gør at vi kan kalde modulets funktioner direkte i vores kode. Dvs. for at kunne lave et random tal skal vi blot angive random().
Hvis vi blot importerer modulet skal vi hver gang vi anvender noget fra modulet angive både modulets navn og funktion (random.random()).
import random
tilfældigtal = random.random()
terningkast = random.randrange(1,6)
Begge metoder har deres fordele. Fordelen ved at importere de enkelte moduler hver for sig er, at man i koden kan kalde den konkrete funktion uden at skulle skrive modulets navn først, samt at alle anvendte funktioner står i toppen af dokumentet. Fordelen ved at kalde hele funktionen er, at man i koden kan se når funktioner kaldes fra moduler. Du skal vælge ud fra hvad der giver dig det bedste overblik.
Hvis du senere skal kompilere koden er der en anden overvejelse du skal gøre dig. Hvis du vælger kun at importere elementer fra et modul, så er det kun dem du tager med i det endelige program. Det kan få betydning for programmets størrelse og hastighed.
Lav et program hvor man skal spille terning mod computeren.
Ændre koden så:
Herunder er et eksempel på en udskrift.
Spil terning mod computeren Hvad er dit navn: Thomas 4) D4 6) D6 10) D10 20) D20 Hvilken terning vil du slå med. Vælg antallet af sider på terningen. (4, 6, 10, 20): 20 Hvor mange omgange skal der spilles?: 10000 ----------------------------------------- Her er resultatet af spillet mellem dig og computeren Der blev spillet med en D20 terning og var med 10000 slag Lige: 543 Thomas: 4730 Computer: 4727 ----------------------------------------- Thomas vandt (program exited with code: 0) Press return to continue
Lav et program der ved hjælp af random() udskriver et ud af mindst 4 forskellige ordsprog.