Förklara villkorlig förgrening med if-satser i Python.
- Grunderna för if-satser (if, elif, else)
- Ange villkor med jämförelseoperatörer osv.
- Ange villkor genom nummer, lista osv.
- Ange flera villkor eller negationer med logiska operatörer (och, eller, inte).
- Villkorliga uttryck på nya rader och flera rader
Det finns också en ternär operatör som beskriver en villkorlig förgrening på en rad. Se följande artikel.
Grunderna för if-satser (if, elif, else)
Den grundläggande formen för if-angivelsen är följande
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” motsvarar ”else if” i C och andra språk, och det kan finnas ett obegränsat antal ”elifs”.
Om det bara finns ett villkorligt uttryck eller om det inte är nödvändigt att bearbeta när det är falskt, kan blocken ”elif” och ”else” utelämnas.
Ange villkor med jämförelseoperatörer osv.
Ange villkoret med en operation som returnerar en booltyp (sant, falskt), t.ex. en jämförelseoperator.
Pythons jämförelseoperatörer är följande
operatör | resultat |
---|---|
x < y | sant om x är mindre än y |
x <= y | sant om x är mindre än eller lika med y |
x > y | sant om x är större än y |
x >= y | sant om x är större än eller lika med y |
x == y | sant om x- och y-värdena är lika |
x != y
x is y
x is not y
x in y
x not in y
Exempel. För enkelhetens skull definieras den 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öljande kan skrivas på ett sätt som är unikt för Python. Se följande artikel för mer information.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
==
!=
Ovanstående är en jämförelse av värden; för att jämföra objektidentiteter använder du följande
is
is not
När du till exempel jämför ett heltal och ett flyttal returnerar ”==” sant om värdena är likvärdiga, men ”is” returnerar falskt eftersom de är olika objekt.
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 är också möjligt att ställa villkoret om huruvida en lista eller en sträng innehåller ett visst element (tecken).
in
:.not in
:utan att inkludera
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
Ange villkor genom nummer, lista osv.
Det villkorliga uttrycket i ett if-uttalande kan vara ett tal, en lista eller ett annat objekt som inte är av typen bool (sant, falskt).
if 10:
print('True')
# True
if [0, 1, 2]:
print('True')
# True
I det villkorliga uttrycket i ett Python if-uttalande betraktas följande objekt som falska.
- Konstanter som definieras som falska:
None
,false
- Noll i numerisk typ:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- Tom sekvens eller samling:
''
,()
,[]
,{}
,set()
,range(0)
Truth Value Testing — Built-in Types — Python 3.10.4 Documentation
Siffror som representerar noll, tomma strängar, listor etc. betraktas som falska; alla andra betraktas som sanna.
Hur objektet bedöms kan kontrolleras med bool().
print(bool(10))
# True
print(bool(0.0))
# False
print(bool([]))
# False
print(bool('False'))
# True
Detta kan till exempel användas för att helt enkelt skriva processen när listan är 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
Observera att strängen ”False” också blir sann, eftersom alla strängar som inte är tomma i strängen blir sanna, vilket visas i exemplet ovan. För att konvertera en specifik sträng som ”True” eller ”False” till 1,0 använder du strtobool() i modulen distutils.util.
Ange flera villkor eller negationer med logiska operatörer (och, eller, inte).
De logiska operatörerna (and, or, not) kan användas för att hantera logisk konjunktion, logisk disjunktion och negation av flera villkor.
operatör | (Resultat (i det villkorliga uttrycket i ett if-uttalande) |
---|---|
x and y | sant om både x och y är sanna |
x or y | sant om antingen x eller y är sant |
not x | falskt om x är sant, sant om x är falskt |
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
Faktum är att ”x och y” och ”x eller y” inte returnerar True eller False, utan antingen x eller y. Så länge de används i villkorliga uttryck i if-satser behöver du inte oroa dig för dem, eftersom de utvärderar till antingen True eller False. Se följande artikel för mer information.
- RELATERAT:Pythons logiska operatorer ”och, eller, inte” (logisk konjunktion, logisk disjunktion, negation)
Det är möjligt att använda och och eller mer än en gång.
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
Villkorliga uttryck på nya rader och flera rader
När flera villkorliga uttryck används genom att koppla ihop dem med ”och” eller ”eller” och varje rad blir lång, är det ibland nödvändigt att bryta upp det villkorliga uttrycket och skriva det på flera rader.
En radbrytning kan göras genom att använda ett backslash eller genom att omsluta hela raden med 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 använda ett backslash för att bryta en rad så många gånger du vill. På samma sätt kan du bryta en rad hur många gånger som helst inom parenteser. Det finns ingen gräns för indragning.
Observera att detta är en teknik som kan användas överallt i Pythonkoden, inte bara i if-satser.