Temeller

Python operatörleri: aritmetik, // ve %, karşılaştırma, and/or/not ve round ile yuvarlama

Güncellendi: · Skillaria.Top

Python'da / her zaman float verir, // sonucu aşağı yuvarlayarak tam kısmı, % kalanı, ** ise üssü hesaplar. round(x, n) bankacılık yuvarlamasıyla n basamağa yuvarlar: round(2.5) sonucu 2, round(3.5) sonucu 4'tür; yukarı ve aşağı tam sayıya yuvarlamayı math.ceil ve math.floor, sayının mutlak değerini ise abs yapar.

Python operatörleri değerleri yeni değerlere dönüştüren işaretlerdir: + toplar, // tam böler, and koşulları birleştirir. Aşağıda operatörlerin tam listesi, / ile // arasındaki fark, and, or, not mantığı ve yuvarlama fonksiyonları — python round, math.ceil, math.floor ve abs — örneklerle anlatılıyor. Tüm örnekleri REPL'e yapıştırıp kendiniz deneyebilirsiniz.

Python operatörlerinin listesi

Operatörler amaçlarına göre gruplanır. Tabloyu baştan sona ezberlemeniz gerekmez: gerçek kodda en sık aritmetik, karşılaştırma ve mantıksal bağlaçlar kullanılır.

GrupOperatörlerÖrnek
Aritmetik+ - * / // % **7 // 2 → 3
Karşılaştırma== != < > <= >=3 < 5 → True
Mantıksaland or notnot True → False
Özdeşlikis, is notx is None
Üyelikin, not in"ah" in "kahve" → True
Atama= += -= *= /= //= %= **=total += 250
Walrus:=if (n := len(s)) > 10:
Bit düzeyinde& | ^ ~ << >>5 & 3 → 1

Aritmetik operatörler

Toplama, çıkarma ve çarpma okul matematiğindeki gibi çalışır. İfadede en az bir float varsa sonuç da float olur: 2 + 1.0 sonucu 3.0. Python'da tam sayılar taşmaz — 2 ** 100 kaç basamak çıkarsa çıksın tam hesaplanır.

>>> 250 + 120
370
>>> 12.5 * 3
37.5
>>> 2 ** 10
1024
>>> 2 ** 0.5
1.4142135623730951

Python'da üs alma: ** operatörü

Üs alma iki yıldızla yazılır, ^ ile değil: Python'da ^ bit düzeyinde «özel VEYA» anlamına gelir ve 2 ^ 3 sonucu 8 değil 1'dir. Kesirli üs kök alır: 9 ** 0.5 sonucu 3.0. Bunun bir de fonksiyon biçimi vardır: pow(x, y) aynı işi yapar, üçüncü argümanla kalan da hesaplanabilir: pow(2, 10, 1000) sonucu 24'tür.

Önceliğe dikkat edin: **, tekli eksiden önce çalışır, bu yüzden -2 ** 2 sonucu -4'tür. Negatif bir sayının karesini istiyorsanız parantez kullanın: (-2) ** 2.

Python'da bölme: /, // ve %

Python'da iki tür bölme vardır ve bu, yeni başlayanlar için sürprizlerin ana kaynağıdır. Normal bölme / her zaman float döndürür, tam bölünse bile. Tam sayı bölmesi // kesirli kısmı atar, % ise kalanı verir.

>>> 7 / 2
3.5
>>> 8 / 2
4.0
>>> 7 // 2
3
>>> 7 % 2
1

Tam bölme // ve kalan %: uygulamada

// ile % çifti «kaç tam var, ne kadar kaldı» sorularını çözer. Kursta harcama takipçisi, hassasiyeti kaybetmemek için parayı kuruş olarak tutar ve tutarı lira ile kuruşa böler:

kopecks = 125050          # parayı kuruş olarak tutuyoruz
lira = kopecks // 100     # 1250 — tam lira
kurus = kopecks % 100     # 50 — kalan
print(lira, kurus)        # 1250 50

print(40 // 7, "hafta ve", 40 % 7, "gün")   # 5 hafta ve 5 gün

İki işlemin sonucunu birlikte veren yerleşik fonksiyon divmod'dur: divmod(125050, 100) (1250, 50) demetini döndürür. Kalan çift-tek kontrolü için de işe yarar: n % 2 == 0 çift sayılar için doğrudur.

Negatif sayılar: // aşağı yuvarlar

// operatörü kesri sadece atmaz, aşağı, eksi sonsuza doğru yuvarlar. Pozitif sayılarda fark yoktur, negatiflerde vardır. Python'da % kalanının işareti bölenin işaretiyle aynıdır; bu yüzden her zaman a == (a // b) * b + a % b eşitliği geçerlidir.

>>> -7 // 2
-4
>>> -7 % 2
1
>>> int(-7 / 2)     # kesri atar, aşağı yuvarlamaz
-3

Sıfıra bölme: hangi hata çıkar

Üç operatörden herhangi biriyle sıfıra bölmek ZeroDivisionError istisnasını fırlatır. Bu hem tam, hem kesirli sayılar için geçerlidir. Bunu try/except ile yakalayabilir ya da bölenin sıfır olmadığını önceden kontrol edebilirsiniz.

>>> 10 / 0
Traceback (most recent call last):
  ...
ZeroDivisionError: division by zero
>>> count = 0
>>> avg = 1500 / count if count else 0
>>> avg
0

Karşılaştırma operatörleri

Karşılaştırmalar True veya False döndürür. Eşitlik iki == işaretiyle kontrol edilir, tek = ise atamadır. Metinler karakter kodlarına göre karakter karakter karşılaştırılır; bu yüzden "A" < "a" doğrudur: büyük harfler küçük harflerden önce gelir.

>>> 250 == 250.0
True
>>> 3 != 4
True
>>> 1 < 5 <= 10     # zincir: 1 < 5 and 5 <= 10
True
>>> 0.1 + 0.2 == 0.3
False

Karşılaştırma zincirleri, örneğin 0 <= x < 100, Python'un kullanışlı bir özelliğidir: and yazmanız gerekmez. Son satır ise kesirli sayılardaki hata payını hatırlatır: 0.1 + 0.2 sonucu 0.30000000000000004'tür. Kesirli sayıları math.isclose(a, b) ile karşılaştırın, parayı ise kuruş olarak ya da Decimal içinde tutun.

Mantıksal operatörler and, or, not

Python'da mantıksal operatörler && ve || gibi simgelerle değil, kelimelerle yazılır. and iki taraf da doğruysa doğrudur, or taraflardan en az biri doğruysa, not değeri tersine çevirir.

aba and ba or bnot a
TrueTrueTrueTrueFalse
TrueFalseFalseTrueFalse
FalseTrueFalseTrueTrue
FalseFalseFalseFalseTrue

Öncelik sırası: önce not, sonra and, sonra or. True or False and False ifadesi True sonucunu verir, çünkü and önce hesaplanır. Karmaşık koşullarda parantez kullanın — hem sizin, hem ekibinizin işine yarar.

and ve or aslında ne döndürür

and ve or her zaman True veya False döndürmez, operandlardan birini döndürür. or ilk doğru değeri (doğru yoksa son değeri), and ise ilk yanlış değeri (yanlış yoksa son değeri) verir. Yanlış sayılan değerler: 0, 0.0, boş metin, boş koleksiyonlar, None ve False.

>>> name = ""
>>> name or "Misafir"
'Misafir'
>>> 5 and 0
0
>>> not ""
True

Değerlendirme tembeldir: sonuç sol taraftan belliyse sağ taraf hesaplanmaz. Bu yüzden count and total / count, count == 0 olduğunda sıfıra bölme hatası vermez. not ise diğer ikisinden farklı olarak her zaman bool döndürür.

is ve in operatörleri

== değerleri karşılaştırır, is ise iki adın aynı nesneyi gösterip göstermediğini kontrol eder. İki ayrı boş sepet eşittir, ama aynı nesne değildir. is'in sürekli gerekli olduğu tek yer None kontrolüdür: if x is None.

>>> a = [250, 120]
>>> b = [250, 120]
>>> a == b, a is b
(True, False)
>>> c = a
>>> c is a
True

Sayıları ve metinleri is ile karşılaştırmayın: bazen iç önbellekleme yüzünden «çalışır», ama sonuç uygulamaya bağlıdır ve Python x is 5 gibi yapılarda SyntaxWarning uyarısı verir.

in operatörü üyeliği kontrol eder: bir metinde alt metni, listede öğeyi, sözlükte anahtarı. not in ise tersini kontrol eder.

>>> "kahve" in "kahve yanında"
True
>>> "yemek" in {"yemek": 450, "taksi": 300}
True
>>> 5 not in [1, 2, 3]
True

Atama operatörleri ve walrus operatörü :=

+=, -=, *=, //= ve diğer birleşik operatörler kısaltmadır: total += 250, total = total + 250 anlamına gelir. Python'da ++ ve -- operatörleri yoktur: x++ sözdizimi hatası verir.

Walrus operatörü := (adı, iki noktaya benzeyen gözleriyle ve dişleriyle morsa benzediği için verildi) değeri doğrudan bir ifadenin içinde atar. Değeri hem kontrol edip hem sonra kullanmak istediğinizde işe yarar:

items = ["kahve", "taksi", "öğle yemeği", "sinema"]
if (n := len(items)) > 3:
    print(f"Çok fazla harcama: {n}")

while (line := input("Tutar: ")) != "":
    print(int(line) * 2)

Walrus olmadan len fonksiyonunu iki kez çağırmak ya da atamayı ayrı bir satıra koymak gerekirdi. Ama abartmayın: satır okunmaz hale gelirse, normal atama daha iyidir.

Python'da yuvarlama: round, ceil, floor

Python'da yuvarlama için yerleşik round fonksiyonu ve math modülünün fonksiyonları vardır. Farklı işleri yaparlar ve bunları karıştırmak sık yapılan bir hatadır.

FonksiyonNe yapar2.5-2.52.7
round(x)en yakına, yarıda çifte2-23
math.floor(x)aşağı, eksi sonsuza2-32
math.ceil(x)yukarı, artı sonsuza3-23
math.trunc(x), int(x)kesri atar, sıfıra doğru2-22

Python round fonksiyonu ve bankacılık yuvarlaması

round(x, n) sayıyı virgülden sonra n basamağa yuvarlar; ikinci argüman verilmezse tam sayı (int) döndürür. Asıl tuzak şudur: python round yarıyı «bankacılık usulü» yuvarlar — yarıyı en yakın çift sayıya. Bu yüzden round(2.5) sonucu 2, round(3.5) sonucu 4'tür. Büyük hesaplamalarda yuvarlama hataları böylece tek yöne birikmez.

>>> round(2.5), round(3.5)
(2, 4)
>>> round(3.14159, 2)
3.14
>>> round(1250, -2)     # yüzlüklere
1200
>>> round(2.675, 2)     # 2.68 değil: ikili gösterimde 2.67499...
2.67

Okulda öğretilen «yarıyı yukarı» yuvarlama gerekiyorsa, örneğin bir fişte, ROUND_HALF_UP modlu Decimal kullanın. Sayıyı float hatasını devralmamak için metin olarak verin:

>>> from decimal import Decimal, ROUND_HALF_UP
>>> Decimal("2.5").quantize(Decimal("1"), ROUND_HALF_UP)
Decimal('3')
>>> Decimal("2.675").quantize(Decimal("0.01"), ROUND_HALF_UP)
Decimal('2.68')

Kurstan bir kural daha: yuvarlamayı yalnızca çıktıda yapın. Güzel yazdırmak için round gerekmez — f-string yeterlidir: f"{amount:.2f}" iki basamak gösterir, sayının kendisi ise hassas kalır.

math.ceil ve math.floor: yukarı ve aşağı yuvarlama

math.ceil, «yetmemesi» kabul edilemez olduğunda gerekir: kaç otobüs sipariş edilecek, kaç sayfa çıkacak. math.floor ise yalnızca tam birimler sayıldığında kullanılır. İkisi de int döndürür.

import math

guests = 47
seats = 20
print(math.ceil(guests / seats))   # 3 otobüs
print(math.floor(9.99))            # 9
print(-(-guests // seats))         # 3 — math olmadan ceil, // ile numara

math modülünde başka yararlı fonksiyonlar da vardır: math.sqrt (kök), math.isclose (kesirleri karşılaştırma), math.pi, math.gcd. Python 3.15'te tam sayı matematiği için math.integer alt modülü geldi (PEP 791): içinde comb, factorial, gcd, isqrt, lcm, perm bulunur; eski math.gcd ve diğerleri çalışmaya devam eder.

abs fonksiyonu: sayının mutlak değeri

abs(x) mutlak değeri — sıfıra olan işaretsiz uzaklığı döndürür. Import gerekmez, fonksiyon yerleşiktir. Tam, kesirli ve hatta karmaşık sayılarla çalışır: 3+4j için vektörün uzunluğu olan 5.0'ı döndürür.

>>> abs(-250)
250
>>> abs(-12.5)
12.5
>>> budget, spent = 5000, 5320
>>> abs(budget - spent)    # ne kadar sapma var
320

Tipik kullanım, yönü dikkate almadan farkı bulmak ve bir tolerans ile karşılaştırmaktır: abs(a - b) < 0.001. Kesirli sayılarda math.isclose daha güvenilirdir, çünkü sayıların ölçeğini de hesaba katar.

Operatörlerin önceliği

Bir ifadede birden fazla operatör varsa Python onları önceliğe göre çalıştırır — yüksekten düşüğe:

  1. **
  2. tekli -x, +x, ~x
  3. * / // %
  4. + -
  5. bit kaydırma ve bit işlemleri
  6. karşılaştırmalar, in, is
  7. not
  8. and
  9. or
  10. :=

Böylece 2 + 3 * 4 sonucu 14, (2 + 3) * 4 sonucu 20'dir. Emin değilseniz parantez koyun: fazladan parantezin maliyeti yoktur, ama öncelik hatasını bulmak uzun sürer.

Operatörlerle ilgili sık yapılan hatalar

HataNe olurDoğrusu
if x = 5:SyntaxError: bu bir atamaif x == 5:
üs yerine 2 ^ 3bit düzeyinde XOR, sonuç 12 ** 3
8 / 2 ile tam sayı beklemek4.0 alınır8 // 2
x == 1 or 2her zaman doğru: or 2x in (1, 2)
round(2.5) ile 3 beklemekbankacılık yuvarlaması 2 verirROUND_HALF_UP ile Decimal
"5" + 5TypeErrorint("5") + 5

Sonuç

En önemli noktalar: / her zaman float verir, // aşağı yuvarlar, % bölenin işaretiyle kalan verir, üs ise **'tır. Mantıksal and, or, not kelimelerle yazılır ve tembel değerlendirilir; is ise None kontrolü için gerekir. Python round yarıyı çifte yuvarlar; yukarı ve aşağı yuvarlama için math.ceil ve math.floor vardır, sayının mutlak değerini ise abs verir. Kursta bu operatörler uygulamada, paranın kuruş olarak tutulduğu harcama takipçisinde işlenir.

Sık sorulan sorular

Python'da bir sayıyı virgülden sonra iki basamağa nasıl yuvarlarım?

round(x, 2) kullanın; sadece güzel göstermek istiyorsanız, sayının değerini değiştirmeyen f"{x:.2f}" f-string'ini kullanın.

Python'da round(0.5) neden 0 veriyor?

Çünkü round yarıyı en yakın çift sayıya yuvarlar ve 0 çifttir; aynı şekilde round(1.5) ve round(2.5) sonucu 2'dir.

Bölmenin tam kısmını Python'da nasıl alırım?

// operatörüyle: 17 // 5 sonucu 3'tür. Negatif sayılarda aşağı yuvarlar, dolayısıyla -17 // 5 sonucu -4'tür; kesri sıfıra doğru atmak için int(-17 / 5) kullanın.

Python'da üçlü (ternary) operatör var mı?

Evet, bu bir koşullu ifadedir: değer_doğruysa if koşul else değer_yanlışsa, örneğin "çift" if n % 2 == 0 else "tek".

Python'da & ile and arasındaki fark nedir?

and, tembel değerlendirmeli mantıksal bir operatördür; & ise sayılarda bit düzeyinde VE, kümelerde kesişimdir. Koşullarda if ile birlikte and kullanın.

Bu konuyu videoyla öğrenin

Bu konu “Python 3.15: от новичка до профи” kursunda uygulamalı olarak ayrıntılı işleniyor.

Kursa git