2.3. Matematičke operacije¶
Python radi kao kalkulator odmah po pokretanju. Ova stranica obrađuje operatore koje ćete najčešće koristiti: aritmetiku nad brojevima, usporedbe koje daju boolean vrijednosti, logičke operatore koji kombiniraju uvjete i bitovne operatore za rad na razini sklopovlja.
2.3.1. Aritmetika¶
Standardni aritmetički operatori nad vrijednostima tipa int i float:
+– zbrajanje-– oduzimanje (ili negacija, kao prefiks:-x)*– množenje/– dijeljenje. Uvijek vraćafloat, čak i kad su oba operanda cijeli brojevi.//– cjelobrojno dijeljenje. Vraća cjelobrojni kvocijent zaokružen prema minus beskonačnosti.%– modulo (ostatak).**– potenciranje (2 ** 10je 1024).
>>> 7 / 2
3.5
>>> 7 // 2
3
>>> -7 // 2
-4
>>> 7 % 2
1
>>> 2 ** 16
65536
Aritmetika mješovitih tipova automatski promiče cijele brojeve u float vrijednosti:
>>> 3 + 0.5
3.5
Proširena dodjela kombinira operator sa = za sažeto ažuriranje na mjestu:
counter = 0
counter += 1 # equivalent to counter = counter + 1
counter *= 2 # works for *= /= //= %= **= too
Prioritet operatora slijedi uobičajeni redoslijed: prvo **, zatim unarni -, pa *, /, // i %, zatim + i -. Koristite zagrade kad niste sigurni – one ne koštaju ništa u izvođenju.
2.3.2. Usporedba¶
Operatori usporedbe vraćaju bool (True ili False):
==i!=– jednako / nejednako.<,<=,>,>=– uređenje.
>>> 3 == 3
True
>>> 3 == 3.0
True
>>> 3 < 5 <= 5
True
Posljednji primjer je ulančana usporedba i potpuno je ekvivalentan izrazu 3 < 5 and 5 <= 5.
Upozorenje
= dodjeljuje; == uspoređuje. Izraz if x = 5: je sintaksna pogreška upravo zato što Python odbija tiho zamijeniti to dvoje.
2.3.3. Booleova logika¶
Tri operatora kombiniraju boolean vrijednosti:
and–Truesamo kad su obje strane istinite.or–Truekad je bilo koja strana istinita.not– invertira jednu boolean vrijednost.
and i or se kratko spajaju: prestaju s vrednovanjem čim je rezultat poznat. False and slow_check() nikad ne poziva slow_check.
and i or također vraćaju jedan od svojih operanada, a ne doslovni True ili False, što vam omogućuje sažeto pisanje zadanih vrijednosti:
name = user_name or "anonymous" # "" / 0 / None are falsy
2.3.4. Bitovni operatori¶
Za rad sa sklopovljem – pakiranje polja registara, maskiranje bitova, parsiranje zaglavlja protokola – posegnut ćete za bitovnim operatorima. Oni djeluju na binarni prikaz vrijednosti tipa int:
&– bitovni AND|– bitovni OR^– bitovni XOR~– bitovni NOT (jedinični komplement)<<– lijevi posmak>>– desni posmak
Heksadekadski i binarni oblici literala prikladni su pri čitanju i pisanju ovih vrijednosti:
>>> 0b1100 & 0b1010
8 # 0b1000
>>> 0b1100 | 0b1010
14 # 0b1110
>>> 0xFF ^ 0x0F
240 # 0xF0
>>> 1 << 8
256
>>> (0xABCD >> 8) & 0xFF
171 # extract the high byte
Za svaki postoje i prošireni oblici: |=, &=, ^=, <<=, >>=.
Napomena
and / or djeluju na boolean vrijednosti (ili na istinitost); & / | djeluju na bitove. Nemojte ih miješati. 0b1100 and 0b1010 daje rezultat 0b1010 jer su oba operanda istinita – a to obično nije ono što želite pri manipulaciji bitovima.
2.3.5. Korisne ugrađene funkcije za brojeve¶
Nekolicina ugrađenih funkcija pokriva uobičajene numeričke operacije koje sami operatori ne nude:
round()– najbliži cijeli broj ili najbližihndigitsdecimalnih mjesta kada se zada drugi argument. Vraćaintzaround(x), afloatzaround(x, n). Izjednačene vrijednosti (0.5,1.5, …) zaokružuju se na najbliži parni broj, ne uvijek prema gore.divmod()– vraća(quotient, remainder)u jednom pozivu. Korisno za dijeljenje jedne veličine na jedinice (sekunde u minute i sekunde, bajtove u stranice i pomake).pow()– isto što i**u obliku s dva argumenta. Oblik s tri argumentapow(base, exp, mod)računa(base ** exp) % modbez ikakvog materijaliziranja ogromne međuvrijednosti, što je jedini praktičan način za modularno potenciranje s velikim eksponentima.
>>> round(3.7)
4
>>> round(3.14159, 2)
3.14
>>> round(0.5) # ties go to even, not always up
0
>>> round(1.5)
2
>>> divmod(125, 60) # 125 seconds = 2 min, 5 sec
(2, 5)
>>> minutes, seconds = divmod(125, 60)
>>> pow(3, 4) # same as 3 ** 4
81
>>> pow(3, 100, 7) # (3 ** 100) mod 7, efficient
4
Pretvorbe cijelog broja u niz znakova po bazi (bin, oct, hex) obrađene su u Metode i oblikovanje nizova znakova.
2.3.6. Modul math¶
Uobičajene matematičke funkcije nalaze se u modulu math. Uvezite ga jednom i pozivajte njegove funkcije putem imena s točkom:
import math
print(math.sqrt(2)) # 1.4142135
print(math.sin(math.pi / 2)) # 1.0
print(math.floor(3.7)) # 3
print(math.log(100, 10)) # 2.0
MicroPython modul math pokriva uobičajene funkcije (sqrt, exp, log, sin, cos, tan, atan2, floor, ceil, pi, e, …). Za slučajne brojeve pogledajte modul random; za bitovno baratanje s fiksnim zarezom gornji operatori su obično dovoljni.
2.3.7. Kompleksni brojevi¶
Za numerički rad koji zahtijeva imaginarne komponente, Python ima tip complex s literalima sa sufiksom j (1 + 2j). Modul cmath zrcali math za kompleksne ulaze. Oba su prisutna u većini MicroPython izgradnji, ali su rijetko potrebna za rad s kamerom; spominjemo ih uglavnom zato da ne budu iznenađenje ako prenosite kod koji ih koristi.