Kap 1.4
Villkor och logik i funktioner
Vi låter funktioner fatta beslut med if, elif,
else och logiska uttryck.
Mål
Efter lektionen ska du kunna...
- använda
if,elifochelsei funktioner - skriva funktioner som returnerar beslut
- använda
and,orochnot - förklara hur villkor påverkar kodens flöde
Repetition
Villkor väljer väg
if age >= 18:
print("Myndig")
else:
print("Inte myndig")
Programmet väljer gren beroende på om villkoret är sant eller falskt.
I kap 1.4 lägger vi den logiken inuti funktioner.
Helheten först
Kontrollera myndighet
def is_adult(age):
if age >= 18:
return True
else:
return False
user_age = int(input("Enter your age: "))
if is_adult(user_age):
print("You are an adult.")
else:
print("You are not an adult.")
Funktionen
Beslutet ligger i funktionen
def is_adult(age):
if age >= 18:
return True
else:
return False
Funktionen tar emot en ålder och returnerar ett sanningsvärde.
Returvärde
return skickar tillbaka ett värde
return True betyder: ja, personen är myndig.
return False betyder: nej, personen är inte myndig.
Huvudprogrammet kan sedan använda svaret.
Huvudprogram
Använd funktionens svar
if is_adult(user_age):
print("You are an adult.")
else:
print("You are not an adult.")
Här används returvärdet som villkor.
Viktig skillnad
return och print()
returnskickar ett värde tillbaka från funktionenprint()visar text för användaren- en funktion som returnerar värden är lättare att testa
Flera alternativ
elif testar nästa möjlighet
def grade_feedback(grade):
if grade >= 90:
return "Excellent"
elif grade >= 75:
return "Good"
elif grade >= 60:
return "Pass"
else:
return "Fail"
Ordning
Python läser uppifrån och ned
Först testas grade >= 90.
Om det är falskt testas grade >= 75.
Första grenen som stämmer körs.
Resten hoppas över.
Snabbtest
Vad returneras?
grade_feedback(95)→"Excellent"grade_feedback(80)→"Good"grade_feedback(65)→"Pass"grade_feedback(40)→"Fail"
Logik
Ibland behövs flera villkor
Är personen minst 18 år?
Har personen biljett?
Är personen inloggad?
Då använder vi logiska operatorer.
Operator
and: båda måste stämma
if age >= 18 and has_ticket == "ja":
print("Du får gå in.")
else:
print("Du får inte gå in.")
Villkoret blir sant bara om båda delarna är sanna.
Operator
or: minst en måste stämma
if day == "lördag" or day == "söndag":
print("Det är helg.")
else:
print("Det är vardag.")
Villkoret blir sant om någon av delarna är sann.
Operator
not: vänder villkoret
logged_in = False
if not logged_in:
print("Du måste logga in.")
not logged_in blir sant när logged_in är falskt.
Funktioner
Logik passar bra i funktioner
Funktionen får indata.
Funktionen testar villkor.
Funktionen returnerar ett resultat.
Huvudprogrammet använder resultatet.
Egen övning
Inträde till evenemang
Skapa funktionen check_entry().
Den ska ta emot ålder, biljett, vårdnadshavare och avstängning.
Den ska returnera rätt meddelande.
Startkod
Fyll i villkoren
def check_entry(age, has_ticket, has_parent, is_blocked):
# Skriv villkoren här.
# Funktionen ska returnera rätt meddelande.
pass
def main():
age = int(input("Ålder: "))
has_ticket = input("Har biljett? (ja/nej): ") == "ja"
has_parent = input("Har vårdnadshavare med? (ja/nej): ") == "ja"
is_blocked = input("Är personen avstängd? (ja/nej): ") == "ja"
Testfall
Kontrollera flera vägar
- 20 år, biljett, inte avstängd → får gå in
- 16 år, biljett, vårdnadshavare → får gå in
- 16 år, biljett, ingen vårdnadshavare → får inte gå in
- 20 år, ingen biljett → får inte gå in
- avstängd person → får inte gå in
Reflektion
Fundera
- När ska en funktion använda
return? - Varför spelar ordningen på villkoren roll?
- När passar
andbättre änor? - Vad händer om ingen gren matchar?
Sammanfattning
Kom ihåg
if/elif/elsestyr kodens väg.returnskickar tillbaka ett värde från funktionen.andkräver att båda villkoren är sanna.orkräver att minst ett villkor är sant.notvänder på ett villkor.