Logiska operatorer i Python

Det finns även logiska operatorer i Python. Med dessa kan vi avgöra om flera påstående är sanna eller falska samtidigt.

Operator Syntax Exempel där A = 5, B = 10 Resultat
OCH and A == 10 and B == 10 False
ELLER or A > 1 or B == 20 True
INTE not A > 5 and not B == 5 True

Lika-med-operatorn

Sant om det vänstra och högra uttrycket är likadant.

Lika-med-operatorn avgör om två variabler är lika med varandra. Lika-med-operatorn anger man med dubbla “lika-med-tecken” (==).

number1 = 15
number2 = 42
print(number1 == number2)

string1 = "true"
bool1 = True
print (string1 == bool1)
False
False

I detta fall blir den första utskriften False, eftersom number1 och number2 inte har samma värde. Även den andra utskriften kommer att resultera i Falsestring1 är av datatypen string och bool1 är av datatypen bool - d.v.s. att de inte är likvärdiga.

bool1 = True
number1 = 1
print(a == b)
True

Här blir utskriften True1 kan tolkas som det booleska värdet True i Python. 0 kan således också nyttjas för att indikera False.

Inte-lika-med-operatorn

Sant om det vänstra uttrycket inte är detsamma som det högra uttrycket.

Inte-lika-med-operatorn (!=) avgör om två variabler eller uttryck inte är likadana.

number1 = 5
number2 = 6
print(number1 != number2)
True

Ovanstående kod ger True eftersom variablen number1 inte är lika med variablen number2.

AND och OR-operatorerna

AND-operatorn nyttjas för att undersöka om båda uttryck är sanna medan OR-operatorn nyttjas för att undsöka om det vänstra uttrycket eller det högra uttrycket är sant. Resp. operator nyttjas med andra ord i de fall man vill undersöka två logiska uttryck.

bool1 = True
bool2 = True
print(bool1 and bool2) # Alt. print(bool1 & bool2)
True

Utskriften blir True då både bool1 och bool2 har värdet True. Om bool1 eller bool2 hade haft värdet False så hade resultatet alltså blivit False.

bool1 = True
bool2 = False
print(bool1 or bool2) # Alt. print(bool1 | bool2)
True

Utskriften blir True trots att bool2 har värdet Falsebool1 har värdet True. Om bool1 samt bool2 båda haft värdet False så hade resultatet alltså blivit False.

INTE-operatorn

Utvinner det inverterade värdet hos en variabel eller ett uttryck, d.v.s. att vi vill identifiera motsatsen till ett booleskt uttryck. Med det sistnämnda menar vi på att operatorn nyttjas för att invertera ett True-värde till ett False-värde eller vice versa. Vi kan inte nyttja det för att identifiera ett inverterat värde till heltalet 10 eller dylikt.

bool1 = False
print(not bool1) 
True

Utskriften blir True, eftersom värdet i bool1 är False - d.v.s. att vi får tillbaka det inverterade värdet på variabeln.

Skillnaden mellan logiska operatorer och bitvisa operatorer

I Python finns det både logiska operatorer och s.k. bitvisa (bit-wise) operatorer. Dessa två typer av operatorer används i olika sammanhang och har olika beteenden.

Logiska operatorer

Logiska operatorer används för att kombinera Booleska uttryck (sant eller falskt). De vanligaste logiska operatorerna är and, or, och not som kan nyttjas exempelvis enligt:

bool1 = True
bool2 = False
print(bool1 and bool2)  
print(bool1 or bool2)   
print(not bool2)        
False
True
True

Bitvisa operatorer

Bitvisa operatorer, å andra sidan, utför operationer på bitnivå mellan två heltal. De vanligaste bitvisa operatorerna är & (AND), | (OR), och ^ (XOR).

  • &:
    Utför en AND-operation på varje par av bitar (båda delar exempelvis kan vara en variabel som lagrar ett heltal eller dylikt). En bit i resultatet är 1 (True) endast om båda motsvarande bitar är 1.

  • |:
    Utför istället en OR-operation på varje par av bitar. En bit i resultatet är 1 (True) om minst en av de motsvarande bitarna är 1.

  • ~:
    Utför avslutningsvis en NOT-operation på varje par av bitar. D.v.s. att alla bitar i ett heltal inverteras (1 blir 0 och 0 blir 1).

Desas kan exempelvis nyttjas enligt:

# A 6 in the decimal system equates 110 in the binary system  
num1 = 6
# A 3 in the decimal system equates 011 in the binary system   
num2 = 3  

print(num1 & num2)  
print(num1 | num2)  
print(~num2)       
2
7
-4

Booleska värden med & och and operatorerna

&-operatorn och and-operatorn med andra ord fundamentalt olika operationer, men det finns undantagsfall där dessa kan vara utbytbara - när vi arbetar med booleska värden.

Detta då True kan evalueras till 1 och False kan evalueras till 0. Exempelvis får vi samma resultat i nedan exempel:

bool1 = True
bool2 = False

# Using logical AND
result_logical = bool1 and bool2  

# Using bitwise AND
result_bitwise = bool1 & bool2  

print("Logical AND result:", result_logical)  
print("Bitwise AND result:", result_bitwise)        
False
False

bool1 och bool2 evalueras i detta fall till False med and-operatorn då bool1 har värdet True men bool2 har värdet False. Detsamma gäller för den bitvisa operatorn & där bool1 evalueras till 1 och bool2 evalueras till False.

Bitvisa operatorer nyttjas primärt i de fall vi behöver göra bitvisa beräkningar på tal och är således inte lika vanligt förekommande som logiska operatorer. Du kommer med största sannolikhet inte att behöva arbeta med bitvisa operatorer förrän långt in på programmeringsresan, men du kommer implicit och explicit ofta att stöta på logiska operatorer i kontexten av utvärderingar och formulering av villkor.

Kortslutning

Notera att Python inte utvärderar det andra uttrycket i ett and- eller or-uttryck om det inte är nödvändigt. Detta kan påverka programflödet i vår applikation och det är således något vi behöver ta i beaktande. Nedan exemplifieras kortslutning:

a = False
b = print("Hello world!")
a and b

Ingen utskrift kommer att ske då vi först utvärderar a och för att vi har använt en and-operator. Givet att det första påståendet är falskt så kommer vi alltså inte ens att utvärdera b. Detta kan även tänkas ha implikationer vid användandet av en or-operator där ordningen på argumenten kommer att spela roll.

Sammanfattning

I detta avsnitt har vi utforskat de logiska operatorerna i Python, som spelar en avgörande roll i att bygga villkorslogik och kontrollstrukturer i programmering. Dessa operatorer - and, or och not - låter oss kombinera, jämföra och invertera Booleska uttryck för att skapa mer komplexa villkor. Vi har även sett hur jämförelseoperatorerna == och != används för att jämföra värden, och hur detta kan integreras i logiska uttryck för att göra precisa och meningsfulla beslut i kod.

Kortslutning, som är ett viktigt beteende hos and och or, optimerar hur uttryck utvärderas genom att inte evaluera mer än nödvändigt, vilket kan påverka programflödet och prestandan. Förståelse för dessa koncept är avgörande för att skriva effektiv och pålitlig kod i Python.