Forklar betinget forgrening med if-udsagn i Python.
- Grundlæggende principper for if-udsagn (if, elif, else)
- Angiv betingelser med sammenligningsoperatorer osv.
- Angiv betingelser ved hjælp af nummer, liste osv.
- Angiv flere betingelser eller negationer med logiske operatorer (og, eller, eller, ikke)
- Betingede udtryk på nye linjer og flere linjer
Der findes også en ternær operator, som beskriver en betinget forgrening i én linje. Se følgende artikel.
Grundlæggende principper for if-udsagn (if, elif, else)
Den grundlæggende form af if-erklæringen er som følger
if Conditional expression 1:
`Processing to be performed if Expression 1 is True.`
elif Conditional expression 2:
`Processing to be performed when expression 1 is false and expression 2 is true.`
elif Expression 3:
`Process when expression 1 and 2 are false and expression 3 is true.`
...
else:
`Processing when all conditionals are false.`
“elif” svarer til “else if” i C og andre sprog, og der kan være et vilkårligt antal “elifs”.
Hvis der kun er ét betinget udtryk, eller hvis det ikke er nødvendigt at behandle, når det er falsk, kan “elif”- og “else”-blokkene udelades.
Angiv betingelser med sammenligningsoperatorer osv.
Angiv betingelsen med en operation, der returnerer en bool-type (sand, falsk), f.eks. en sammenligningsoperator.
Python-sammenligningsoperatorer er som følger
operatør | resultat |
---|---|
x < y | sandt, hvis x er mindre end y |
x <= y | sandt, hvis x er mindre end eller lig med y |
x > y | sandt, hvis x er større end y |
x >= y | sandt, hvis x er større end eller lig med y |
x == y | sandt, hvis x- og y-værdierne er ens |
x != y
x is y
x is not y
x in y
x not in y
Eksempel. For nemheds skyld er den defineret som en funktion med def-angivelsen.
def if_test(num):
if num > 100:
print('100 < num')
elif num > 50:
print('50 < num <= 100')
elif num > 0:
print('0 < num <= 50')
elif num == 0:
print('num == 0')
else:
print('num < 0')
if_test(1000)
# 100 < num
if_test(70)
# 50 < num <= 100
if_test(0)
# num == 0
if_test(-100)
# num < 0
Følgende kan skrives på en måde, der er unik for Python. Se følgende artikel for nærmere oplysninger.a < x < b
def if_test2(num):
if 50 < num < 100:
print('50 < num < 100')
else:
print('num <= 50 or num >= 100')
if_test2(70)
# 50 < num < 100
if_test2(0)
# num <= 50 or num >= 100
==
!=
Ovenstående er en sammenligning af værdier; for at sammenligne objektidentiteter skal du bruge følgende
is
is not
Når du f.eks. sammenligner et heltal og et flydende tal, returnerer “==” sandt, hvis værdierne er ækvivalente, men “is” returnerer falsk, fordi de er forskellige objekter.
i = 10
print(type(i))
# <class 'int'>
f = 10.0
print(type(f))
# <class 'float'>
print(i == f)
# True
print(i is f)
# False
Det er også muligt at angive, om en liste eller en streng indeholder et bestemt element (tegn).
in
:omfatternot in
:uden at medtage
def if_test_in(s):
if 'a' in s:
print('a is in string')
else:
print('a is NOT in string')
if_test_in('apple')
# a is in string
if_test_in('melon')
# a is NOT in string
Angiv betingelser ved hjælp af nummer, liste osv.
Det betingede udtryk i en if-anvisning kan være et tal, en liste eller et andet objekt, der ikke er af typen bool (sandt, falsk).
if 10:
print('True')
# True
if [0, 1, 2]:
print('True')
# True
I det betingede udtryk i en Python if-erklæring anses følgende objekter for at være falske.
- Konstanter, der er defineret til at være falske:
None
,false
- Nul i numerisk type:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- Tomme sekvenser eller samlinger:
''
,()
,[]
,{}
,set()
,range(0)
Truth Value Testing — Built-in Types — Python 3.10.4 Documentation
Tal, der repræsenterer nul, tomme strenge, lister osv. betragtes som falske; alle andre betragtes som sande.
Hvordan objektet er vurderet kan kontrolleres med bool().
print(bool(10))
# True
print(bool(0.0))
# False
print(bool([]))
# False
print(bool('False'))
# True
Dette kan f.eks. bruges til blot at skrive processen, når listen er tom.
def if_test_list(l):
if l:
print('list is NOT empty')
else:
print('list is empty')
if_test_list([0, 1, 2])
# list is NOT empty
if_test_list([])
# list is empty
Bemærk, at strengen “False” også vil være sand, fordi som vist i eksemplet ovenfor vil enhver streng, der ikke er tom i strengen, være sand. Hvis du vil konvertere en specifik streng som 'True' eller 'False' til 1,0, skal du bruge strtobool() i modulet distutils.util.
Angiv flere betingelser eller negationer med logiske operatorer (og, eller, eller, ikke)
De logiske operatorer (and, or, not) kan bruges til at håndtere logisk konjunktion, logisk disjunktion og negation af flere betingelser.
operatør | (Result (i det betingede udtryk i en if-erklæring) |
---|---|
x and y | sandt, hvis både x og y er sande |
x or y | sandt, hvis enten x eller y er sandt |
not x | falsk, hvis x er sandt, sandt, hvis x er falsk |
def if_test_and_not(num):
if num >= 0 and not num % 2 == 0:
print('num is positive odd')
else:
print('num is NOT positive odd')
if_test_and_not(5)
# num is positive odd
if_test_and_not(10)
# num is NOT positive odd
if_test_and_not(-10)
# num is NOT positive odd
Faktisk returnerer “x og y” og “x eller y” ikke sandt eller falsk, men enten x eller y. Så længe de bruges i betingede udtryk i if-udsagn, er der ingen grund til at bekymre sig om dem, da de evalueres til enten sandt eller falsk. Se følgende artikel for nærmere oplysninger.
Det er muligt at bruge og og og eller mere end én gang.
def if_test_and_not_or(num):
if num >= 0 and not num % 2 == 0 or num == -10:
print('num is positive odd or -10')
else:
print('num is NOT positive odd or -10')
if_test_and_not_or(5)
# num is positive odd or -10
if_test_and_not_or(10)
# num is NOT positive odd or -10
if_test_and_not_or(-10)
# num is positive odd or -10
Betingede udtryk på nye linjer og flere linjer
Når der anvendes flere betingede udtryk ved at forbinde dem med “og” eller “eller”, og hver linje bliver lang, er det nogle gange nødvendigt at bryde det betingede udtryk og skrive det på flere linjer.
Et linjeskift kan foretages ved at bruge en skråstreg eller ved at omslutte hele linjen i parenteser.
def if_test_and_backslash(num):
if num >= 0 \
and not num % 2 == 0:
print('num is positive odd')
else:
print('num is NOT positive odd')
if_test_and_backslash(5)
# num is positive odd
def if_test_and_brackets(num):
if (num >= 0
and not num % 2 == 0):
print('num is positive odd')
else:
print('num is NOT positive odd')
if_test_and_brackets(5)
# num is positive odd
Du kan bruge en skråstreg til at bryde en linje så mange gange du vil. På samme måde kan du bryde en linje et vilkårligt antal gange inden for parenteser. Der er ingen grænse for indrykning.
Bemærk, at dette er en teknik, der kan bruges overalt i Python-kode, ikke kun i if-meddelelser.