Programmering nivå 2

Kap 1.4 – Villkor och logik i funktioner

Använd if/elif/else för att fatta beslut i funktioner.

Mål med lektionen

  • Kunna använda if, elif och else i funktioner.
  • Veta hur du strukturerar logik för att fatta beslut i kod.
  • Kunna använda logiska uttryck med and, or och not.
  • Förstå hur kodflöde och returvärden fungerar i funktioner med villkor.
  • Kunna skriva funktioner som tar beslut baserat på indata.

Så här lär du dig bäst

Gå igenom exemplen, skriv om dem och testa med olika indata. Fundera på ordningen i dina villkor och när en funktion ska returnera ett värde istället för att skriva ut något direkt.

Exempel – 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.")

Interaktiv övning: villkor i en funktion

Testa hur funktionen is_adult() returnerar True eller False beroende på åldern. Kör med flera olika värden.

Prova till exempel att:

  • skriva 17 och se att else-grenen körs
  • skriva 18 och se att if-grenen körs
  • skriva text i stället för ett tal och se felmeddelandet
Tryck på Kör kod för att testa programmet.

Programmering 2-koppling: funktionen returnerar ett värde, och huvudprogrammet använder värdet för att välja vilken utskrift som ska visas.

Flera alternativ med elif

def grade_feedback(grade):
    if grade >= 90:
        return "Excellent"
    elif grade >= 75:
        return "Good"
    elif grade >= 60:
        return "Pass"
    else:
        return "Fail"

# Exempel: fråga användaren om poäng och skriv ut feedback (utan undantagshantering)
score = int(input("Skriv in poäng (0-100): "))
print("Resultat:", grade_feedback(score))

Interaktiv övning: flera alternativ med elif

Testa hur programmet går igenom villkoren uppifrån och ned. Den första grenen som stämmer används, och resten hoppas över.

Prova till exempel att:

  • skriva 95 och få Excellent
  • skriva 80 och få Good
  • skriva 65 och få Pass
  • skriva 40 och få Fail
Tryck på Kör kod för att testa programmet.

Programmering 2-koppling: med elif kan en funktion hantera flera möjliga resultat utan att skriva flera separata if-satser.

Logiska uttryck

Ibland räcker det inte att kontrollera ett enda villkor. Ett program kan behöva kontrollera flera saker samtidigt. Då använder man logiska operatorer.

De tre vanligaste logiska operatorerna i Python är and, or och not.

and – båda villkoren måste vara sanna

and betyder att båda delarna måste vara True för att hela villkoret ska vara sant.

age = int(input("Ålder: "))
has_ticket = input("Har biljett? (ja/nej): ")

if age >= 18 and has_ticket == "ja":
    print("Du får gå in.")
else:
    print("Du får inte gå in.")

Programmet skriver bara Du får gå in. om personen både är minst 18 år och har biljett.

or – minst ett villkor måste vara sant

or betyder att det räcker att ett av villkoren är True.

day = input("Vilken dag är det? ")

if day == "lördag" or day == "söndag":
    print("Det är helg.")
else:
    print("Det är vardag.")

Här blir villkoret sant om dagen är lördag eller söndag.

not – vänder på ett villkor

not betyder inte. Det vänder ett villkor från True till False, eller från False till True.

logged_in = False

if not logged_in:
    print("Du måste logga in.")

Eftersom logged_in är False blir not logged_in sant.

Exempel kopplat till kap 2.7

I bibliotekskatalogen används or för att söka i antingen titel eller författare:

if query in book["title"].lower() or query in book["author"].lower():
    print("Boken matchar sökningen.")

Det betyder: om sökordet finns i titeln eller om sökordet finns i författaren, då räknas boken som en träff.

Du behöver inte förstå hela bibliotekskoden just nu. Poängen är att känna igen att logiska operatorer som or kommer tillbaka senare i kursen.

Interaktiv övning: logiska uttryck

Testa skillnaden mellan and och or. Ändra ålder, biljett och operator och se när villkoret blir sant.

Prova till exempel att:

  • använda and med ålder 18 och biljett ja
  • använda and med ålder 17 och biljett ja
  • byta till or och jämföra resultatet
Tryck på Kör kod för att testa and och or.

Programmering 2-koppling: logiska uttryck används när ett program behöver kombinera flera villkor, till exempel vid behörighet, sökning eller validering.

Fundera: Vilken operator, and eller or, gör att programmet fungerar bäst i verkligheten om personen både måste vara minst 18 år och ha biljett?

Öva själv

Samlad övning: inträde till evenemang

Skriv in koden i din editor och spara filen som kap1-4-event.py. Programmet kontrollerar om en person får komma in på ett kvällsevenemang. Här tränar du på funktioner, return, if, elif, else, and, or och not i samma exempel.

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"

    message = check_entry(age, has_ticket, has_parent, is_blocked)
    print(message)

main()

Programmet ska hantera

  • Ogiltig ålder: 0 eller negativa tal.
  • Avstängd person.
  • Person utan biljett.
  • Person som är minst 18 år och har biljett.
  • Person som är under 18 år men har biljett och vårdnadshavare med.
  • Person som är under 18 år, har biljett men saknar vårdnadshavare.

Testa programmet med

  • Ålder 20, biljett ja, vårdnadshavare nej, avstängd nej.
  • Ålder 16, biljett ja, vårdnadshavare ja, avstängd nej.
  • Ålder 16, biljett ja, vårdnadshavare nej, avstängd nej.
  • Ålder 20, biljett nej, vårdnadshavare nej, avstängd nej.
  • Ålder 20, biljett ja, vårdnadshavare nej, avstängd ja.
  • Ålder 0 eller -3.

Fundera: Var används and, or och not? Varför ligger kontrollen för avstängd person före kontrollen för biljett?

När du har försökt själv kan du ladda ner ett lösningsförslag: kap1-4-event-losningsforslag.py

Reflektion

  • Vad är skillnaden mellan att skriva `print()` och `return` i en funktion?
  • Hur påverkar villkor flödet i ett program?
  • Vad är skillnaden mellan and och or?
  • Vad händer om du utelämnar `else` och inget villkor uppfylls?

Tillbaka till Kapitel 1