Operatorlar — arifmetik, taqqoslash, mantiqiy, is, in

~15 daq · Python · Kirish va Asoslar

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, ** — daraja
  • and, or, not — mantiqiy; short-circuit qoidasi
  • is — faqat None, True, False bilan; sonlar uchun ==
  • in — to'plamda a'zolik; dictionary da kalitlarni tekshiradi

Keyingi dars

5-dars: input() va print() — f-string, format(), sep, end