Operatorlar — arifmetik, taqqoslash, mantiqiy, is, in
Muammodan boshlaylik
Siz onlayn do'kon uchun dastur yozyapsiz. Chegirma hisobi: agar tovar 100 000 so'mdan ko'p bo'lsa va mijoz premium a'zo bo'lsa — 15% chegirma. Aks holda — 5%.
Bu uchun hisoblash kerak (arifmetika), solishtirish kerak (taqqoslash), ikki shartni birlashtirish kerak (mantiq). Bularning barchasi — operatorlar orqali.
Arifmetik operatorlar
a = 17
b = 5
print(a + b) # 22 — qo'shish
print(a - b) # 12 — ayirish
print(a * b) # 85 — ko'paytirish
print(a / b) # 3.4 — bo'lish (doim float)
print(a // b) # 3 — butun bo'lish
print(a % b) # 2 — qoldiq
print(a ** b) # 1419857 — daraja
/ va // farqi — ko'p xato shu yerdan:
print(10 / 2) # 5.0 — float, hatto teng bo'linsa ham
print(10 // 2) # 5 — int
print(7 / 2) # 3.5
print(7 // 2) # 3 — kasr tashlanadi, yaxlitlanmaydi
Nima uchun / doim float qaytaradi? Python 3 da bu ataylab qilingan. Python 2 da 7 / 2 = 3 edi — bu ko'p xatolarga sabab bo'ldi. Python 3 da / har doim "to'liq bo'linish" ni anglatadi.
% — qoldiq, ko'p ishlatiladi:
print(15 % 2) # 1 → toq son (0 bo'lsa juft)
print(15 % 3) # 0 → 3 ga qoldiqsiz bo'linadi
print(15 % 10) # 5 → oxirgi raqam
** — daraja:
print(2 ** 10) # 1024
print(25 ** 0.5) # 5.0 — kvadrat ildiz (0.5 daraja)
Taqqoslash operatorlari
Natija doim True yoki False:
a, b = 10, 20
print(a == b) # False — teng
print(a != b) # True — teng emas
print(a < b) # True — kichik
print(a > b) # False — katta
print(a <= b) # True — kichik yoki teng
print(a >= b) # False — katta yoki teng
Python da zanjirli taqqoslash mumkin — matematikadagi kabi:
yosh = 25
print(18 <= yosh <= 65) # True — ikki shart bir qatorda, o'qish oson
Mantiqiy operatorlar
Bir nechta shartni birlashtirish:
yosh = 25
premium = True
# and — ikkalasi ham True bo'lishi kerak
if yosh >= 18 and premium:
chegirma = 15
else:
chegirma = 5
# or — bittasi True bo'lsa yetarli
eski_mijoz = False
do_st_tavsiyasi = True
if eski_mijoz or do_st_tavsiyasi:
print("Maxsus taklif!")
# not — teskarisini olish
if not premium:
print("Premium bo'ling!")
Short-circuit — Python optimallashtirish qiladi:
# and — birinchisi False bo'lsa, ikkinchisi tekshirilmaydi
def tekshir():
print("Tekshirildi!")
return True
print(False and tekshir()) # False — "Tekshirildi!" chiqmaydi
print(True and tekshir()) # "Tekshirildi!" chiqadi
Bu tasodif emas — agar birinchi shart allaqachon natijani aniqlab qo'ysa, ikkinchisini hisoblashning hojati yo'q.
and va or faqat True/False qaytarmaydi:
# or — birinchi "truthy" qiymatni qaytaradi
ism = ""
ko_rinadigan_ism = ism or "Noma'lum"
print(ko_rinadigan_ism) # "Noma'lum" — ism bo'sh bo'lganda standart qiymat
# and — birinchi "falsy" yoki oxirgi qiymatni qaytaradi
narx = 45000
chegirma = 0.15
jami = narx and narx * (1 - chegirma) # narx 0 bo'lsa — 0, bo'lmasa hisoblaydi
is va is not — identifikatsiya
== qiymatlarni solishtiradi. is esa — "aynan bir xil ob'ektmi?":
a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a == b) # True — qiymatlari bir xil
print(a is b) # False — xotirada ikki alohida ob'ekt
print(a is c) # True — c = a, aynan bir xil ob'ekt
is faqat None, True, False bilan ishlatiladi:
natija = None
# ✅ To'g'ri
if natija is None:
print("Natija yo'q")
# ❌ Noto'g'ri — son bilan is ishlatmang
x = 1000
y = 1000
print(x is y) # False — kutilmagan natija
print(x == y) # True — doim to'g'ri
Nima uchun is sonlar bilan ishlamaydi? Python kichik sonlarni (-5 dan 256 gacha) keshga oladi — ular bir xil ob'ekt. Lekin katta sonlar uchun har safar yangi ob'ekt yaratiladi. Bu implementatsiya detali — unga tayanib bo'lmaydi.
in va not in — a'zolik
Qiymat biror to'plamda bormi?
mevalar = ["olma", "nok", "o'rik"]
print("olma" in mevalar) # True
print("banan" in mevalar) # False
print("banan" not in mevalar) # True
# Matinda:
matn = "Python juda zo'r til"
print("Python" in matn) # True
print("Java" in matn) # False
# Dictionary da — faqat kalitlarni tekshiradi:
narxlar = {"olma": 5000, "nok": 8000}
print("olma" in narxlar) # True
print(5000 in narxlar) # False — qiymat emas, kalit tekshiriladi
Operatorlar ustunligi
Matematikadagi kabi — ba'zilari oldin bajariladi:
print(2 + 3 * 4) # 14 — avval 3*4=12, keyin 2+12
print((2 + 3) * 4) # 20 — qavslar ustuvorlikni o'zgartiradi
# Mantiqiy: not → and → or
print(True or False and False)
# avval: False and False = False
# keyin: True or False = True
Shubha bo'lganda — qavslardan foydalaning. Kod o'quvchi uchun ham tushunarli bo'ladi.
Tez-tez uchraydigan xatolar
= o'rniga == yoki aksi:
yosh = 25
if yosh = 18: # ❌ SyntaxError — shartda = bo'lmaydi
print("18")
if yosh == 18: # ✅ taqqoslash
print("18")
/ doim float ekani — kerakli joyda // ishlatish:
sonlar_soni = 10
jami = 45
o_rtacha = jami / sonlar_soni # 4.5 — float
# Agar butun son kerak bo'lsa:
o_rtacha = jami // sonlar_soni # 4 — int
is ni qiymat solishtirish uchun ishlatish:
# ❌ — kutilmagan natija berishi mumkin
if x is 100:
print("Yuz")
# ✅ — qiymat solishtirishda doim ==
if x == 100:
print("Yuz")
Xulosa
Operatorlar — hisoblash, solishtirish, shartlarni boshqarish asosi.
Eslab qoling:
/— float,//— butun bo'linish,%— qoldiq,**— darajaand,or,not— mantiqiy; short-circuit qoidasiis— faqatNone,True,Falsebilan; sonlar uchun==in— to'plamda a'zolik; dictionary da kalitlarni tekshiradi
Keyingi dars
5-dars: input() va print() — f-string, format(), sep, end