Kombinera villkor
Logiska operatorer
Du kan kombinera flera villkorsuttryck med de logiska operatorerna and
och or
. Operatorn and
innebär att alla ingående villkorsuttryck måste vara sanna samtidigt. Operatorn or
kräver att minst ett av villkorsuttrycken är sant.
Till exempel villkoret tal >= 5 and tal <= 8
anger att tal måste samtidigt vara minst fem och högst åtta – alltså mellan fem och åtta.
tal = int(input("Ge ett tal: "))
if tal >= 5 and tal <= 8:
print("Talet är mellan 5 och 8")
Villkoret tal < 5 or tal > 8
anger att talet måste vara mindre än fem eller större än åtta – alltså inte mellan fem till åtta.
tal = int(input("Ge ett tal: "))
if tal < 5 or tal > 8:
print("Talet är inte mellan 5 och 8")
Den här sanningstabellen beskriver hur operatorerna fungerar i olika situationer:
a | b | a and b | a or b |
---|---|---|---|
False | False | False | False |
True | False | False | True |
False | True | False | True |
True | True | True | True |
Ibland kan det vara bra att veta om ett villkorsuttryck inte är sant. Operatorn not
inverterar ett värde, dvs. byter det till det motsatta:
a | not a |
---|---|
True | False |
False | True |
Det ovanstående exemplet som anger om talet inte är mellan 5-8 kan också skrivas så här:
nummer = int(input("Ge en siffra: "))
if not (nummer >= 5 and nummer <= 8):
print("Siffran är inte mellan 5 och 8")
Logiska operatorer kallas framför allt inom programmering för Boolean-operatorer.
Att kombinera och kedja villkorsuttryck
Det här programmet ber användaren att mata in fyra tal. Sedan kollar programmet vilket tal som är störst med hjälp av några villkor:
n1 = int(input("Ge tal 1: "))
n2 = int(input("Ge tal 2: "))
n3 = int(input("Ge tal 3: "))
n4 = int(input("Ge tal 4: "))
if n1 > n2 and n1 > n3 and n1 > n4:
storst = n1
elif n2 > n3 and n2 > n4:
storst = n2
elif n3 > n4:
storst = n3
else:
storst = n4
print(f" {storst} är det största talet.")
Ge tal 1: 2 Ge tal 2: 4 Ge tal 3: 1 Ge tal 4: 1 4 är det största talet.
I exemplet ovan är n1 > n2 and n1 > n3 and n1 > n4
sant endast då alla tre "delvillkor" är sanna.
Kapslade if-satser
if-satser kan nästlas innanför andra if-satser. Till exempel kollar följande program först om talet är noll innan det kollar om talet är jämnt eller inte.
tal = int(input("Ge ett tal: "))
if tal > 0:
if tal % 2 == 0:
print("Talet är jämnt")
else:
print("Talet är ojämnt")
else:
print("Talet är negativt")
Så här kan programmet fungera:
Ge ett tal: 3 Talet är ojämnt
Ge ett tal: 18 Talet är jämnt
Ge ett tal: -4 Talet är negativt
När man nästlar if-satser är det viktigt att indenteringen blir rätt. Indenteringen bestämmer vilka grenar som hör ihop. Till exempel tolkas en if-gren och en else-gren med samma indenteringsnivå som grenar av en och samma if-sats.
Ofta kan man åstadkomma samma sak med logiska operatorer och nästlade if-satser. Det följande exemplet fungerar helt på samma sätt som exemplet ovan:
tal = int(input("Ge ett tal: "))
if tal > 0 and tal % 2 == 0:
print("Talet är jämnt")
elif tal > 0 and tal % 2 != 0:
print("Talet är ojämnt")
else:
print("Talet är negativt")
Man kan inte på rak arm säga vilkendera lösning som är bättre. Situationen bestämmer ofta hur det lönar sig att bygga upp if-satsen på ett logiskt sätt. I det här exemplet tycker många att versionen med nästling är mer intuitiv.
Log in to view the quiz
Se dina poäng genom att klicka på cirkeln nere till höger av sidan.