Python Operatörleri: Aritmetik, Karşılaştırma ve Mantıksal Operatörler
Beceri rehberi

Python Operatörleri: Aritmetik, Karşılaştırma ve Mantıksal Operatörler

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 6 dk okuma

Operatörler değerler üzerinde işlem yapan ve koşulları kuran simgelerdir. Rehber aritmetik, karşılaştırma, mantıksal, atama ve üyelik operatörlerini, önceliği ve sık hataları örneklerle anlatır.

Bir bakışta

  1. Operatörler beş işe ayrılır. Aritmetik, karşılaştırma, mantıksal, atama ve üyelik ile kimlik operatörleri.
  2. // tam bölmeyi, % kalanı verir. İkisi x == (x // y) * y + (x % y) bağıntısıyla bağlıdır.
  3. and ve or son değerlendirilen işleneni döndürür. Kısa devre ile varsayılan değer vermek mümkündür, ama sıfır gibi geçerli değerlerde dikkat gerekir.
  4. Karşılaştırmalar zincirlenebilir. alt <= deger <= ust yazımı aralık kontrolünü kısaltır.
  5. == değeri, is nesne kimliğini sorar. None kontrolü is None ile yapılır; değer karşılaştırması == ile.

Operatör ve işlenen: temel fikir

Operatör, bir ya da birkaç değer üzerinde işlem yapan simgedir; üzerinde işlem yapılan değerlere işlenen (operand) denir. toplam = a + b ifadesinde + operatör, a ve b işlenendir. Python operatörleri kabaca beş gruba ayrılır: aritmetik, karşılaştırma, mantıksal, atama ve üyelik ile kimlik operatörleri.

Her grup farklı bir soruya cevap verir. Aritmetik operatörler "değer ne olur?" sorusunu, karşılaştırma operatörleri "bu doğru mu?" sorusunu, mantıksal operatörler "bu koşulların birleşimi doğru mu?" sorusunu yanıtlar. Atama operatörleri sonucu bir isme bağlar. Üyelik ve kimlik operatörleri ise "bu değer şu koleksiyonda mı?" ve "bu iki isim aynı nesneyi mi gösteriyor?" sorularını sorar.

Python'da operatörler çoğu zaman işlenenin türüne göre farklı davranır. + sayılarda toplar, metinlerde birleştirir, listelerde uç uca ekler; * sayılarda çarpar, bir metni ya da listeyi ise tekrarlar. Bu esneklik güçlüdür ama dikkat de gerektirir, çünkü yanlış türde veri sessizce yanlış sonuç verebilir.

Şekil 1

Operatörler, kuvvetliden zayıfa doğru değerlendirilir

Üstteki önce işlenir; parantez hepsini aşar

  1. Üs alma** işlemi en sıkı bağlanır
  2. Çarpma ve bölme ailesi*, /, //, % birbirleriyle aynı düzeydedir
  3. Toplama ve çıkarma+ ve - bir alt düzeydedir
  4. Karşılaştırmalar<, >, ==, in, is hepsi aritmetikten sonra gelir
  5. not, and, orMantıksal birleşim en son değerlendirilir
Kaynak: Python belgeleri: ifadeler (expressions) bölümüMindset Institute

Aritmetik operatörler: bölme, tam bölme ve mod

Toplama, çıkarma ve çarpma için + - * kullanılır. İlginç olan bölme ailesidir.

/ operatörü sayılar tam bölünse bile her zaman ondalıklı sonuç verir. // tam bölmedir: Python belgelerine göre sonuç, matematiksel bölmenin taban (floor) fonksiyonundan geçirilmiş halidir. % ise kalanı verir; belgeler, kalanın işaretinin ikinci işlenenle aynı olduğunu söyler. İkisi arasında x == (x // y) * y + (x % y) bağıntısı geçerlidir. Sıfıra bölmede ZeroDivisionError oluşur.

bolum = a / b tam_bolum = a // b kalan = a % b

çift_mi = sayi % bolen == sifir

Mod operatörünün gündelik kullanımları: bir sayının çift ya da tek olduğunu bulmak, döngüde belirli aralıklarla işlem yapmak, saat ve gün gibi dairesel yapıları sarmak. Tam bölme ise sayfalama gibi "kaç tam grup var" sorularında işe yarar.

** üs alma operatörüdür. Belgeler, bu operatörün solundaki tekli operatörlerden daha sıkı bağlandığını, sağındaki tekli operatörlerden ise daha gevşek bağlandığını belirtir; bu yüzden -x ** y ifadesi önce üs alıp sonra işareti değiştirir. Beklentinizden farklı çıkıyorsa parantezle niyetinizi açık yazın. Negatif sayıyla tam bölme ve mod sonuçları sezgiye ters olabileceğinden, bu durumları belge örnekleriyle deneyerek kontrol edin.

Karşılaştırma operatörleri ve zincirleme

Karşılaştırma operatörleri == (eşit), != (eşit değil), <, >, <= ve >= her zaman True ya da False verir. Metinlerde karşılaştırma harf sırasına göre yapılır; sayı ile metni karşılaştırmak ise sıralama karşılaştırmalarında hata üretir.

Python'a özgü güzel bir özellik, karşılaştırmaların zincirlenebilmesidir. Belgeler x < y <= z ifadesinin, y'nin yalnızca bir kez değerlendirilmesi dışında, x < y and y <= z ile eşdeğer olduğunu söyler. Böylece bir değerin aralıkta olup olmadığını matematikteki gibi yazarsınız:

if alt_sinir <= deger <= ust_sinir: kabul_et(deger)

Zincirleme her yerde sezgisel değildir: belgelerin uyardığı gibi x < y > z geçerlidir ama x ile z arasında bir karşılaştırma ima etmez. Zinciri okunaklı tutmak için iki ya da üç parçadan uzun yazmayın.

Ondalıklı sayılarda eşitlik karşılaştırması ayrı bir tuzaktır: bilgisayardaki ondalık gösterim yaklaşık olduğundan, beklenen eşit iki sonuç tam eşit çıkmayabilir. Bu durumda == yerine, farkın küçük bir eşikten az olup olmadığına bakmak ya da math modülündeki isclose işlevini kullanmak gerekir.

Mantıksal operatörler: and, or, not

Mantıksal operatörler koşulları birleştirir. Python'da simge yerine sözcük kullanılır: and, or, not.

Burada Python belgelerinin önemli bir ayrıntısı var: and ve or yalnızca True ya da False döndürmez, son değerlendirilen işleneni döndürür. x and y önce x'i değerlendirir; x yanlışsa x'in değeri döner, değilse y değerlendirilir ve onun değeri döner. x or y ise x doğruysa x'i, değilse y'yi döndürür. not ise her zaman True ya da False verir.

Bu "kısa devre" davranışı iki işe yarar. Birincisi varsayılan değer vermektir: ad = girilen_ad or 'misafir' yazarsanız, girilen ad boş metinse 'misafir' kullanılır. İkincisi güvenli kontroldür: liste and liste[ilk_indeks] > esik ifadesinde liste boşsa ikinci kısım hiç değerlendirilmez, dolayısıyla hata oluşmaz.

Python'da boş metin, boş liste, sıfır ve None yanlış sayılır; çoğu diğer değer doğru sayılır. Bu yüzden if liste: yazmak "liste boş değilse" demektir. Ancak sıfırın geçerli bir değer olduğu durumda or ile varsayılan vermek yanlış sonuç üretir: indirim = girilen or varsayilan, kullanıcı sıfır girdiğinde varsayılanı seçer. Bu durumda açıkça None ile karşılaştırmak gerekir.

Atama, üyelik ve kimlik operatörleri

Atama operatörü = sağdaki değeri soldaki isme bağlar. += -= *= gibi birleşik biçimler işlemi ve atamayı birlikte yapar: sayac += artis, sayac = sayac + artis ile aynı iştir. Listeler gibi değiştirilebilir nesnelerde birleşik atamanın nesneyi yerinde değiştirebileceğini akılda tutun; bu, ayrı bir atamayla aynı sonucu vermeyebilir.

Üyelik operatörleri in ve not in bir değerin koleksiyonda olup olmadığını sınar. Belgelere göre metinlerde in, alt metin kontrolü yapar ve boş metin her metnin alt metni sayılır. Sözlüklerde anahtara bakar, kümelerde ve listelerde öğeye.

if 'a' in kelime and kelime not in yasaklilar: kabul_et(kelime)

Kimlik operatörleri is ve is not iki isim aynı nesneyi mi gösteriyor sorusunu sorar. Belgeler x is y'nin yalnızca x ve y aynı nesne ise doğru olduğunu söyler. Değer eşitliği için == kullanılırken, None kontrolü için is None yazılır. İki ayrı liste aynı içeriğe sahip olabilir (== doğru) ama aynı nesne değildir (is yanlış).

Şekil 2

Değer eşitliği için ==, nesne kimliği için is kullanılır

İki operatör farklı soru sorar

Sık yapılan yanlış
Doğru kullanım
Sayı ve metin karşılaştırmada is kullanmak
Değer karşılaştırmada == kullanmak
None kontrolünü == ile yazmak
None kontrolünde is None yazmak
Aynı nesneyi aynı değer sanmak
Kimlik gerekirse bilinçli is kullanmak
Kaynak: Python belgeleri: ifadeler (kimlik karşılaştırması)Mindset Institute

Sık yapılan hatalar ve okunaklı ifade yazma

Operatörlerle ilgili hatalar çoğunlukla öncelik sırasındaki yanlış varsayımdan gelir.

  • Öncelik tahmini: a + b * c, önce çarpar. Niyetiniz farklıysa parantez kullanın; parantez okuyana güven verir.
  • == yerine = yazmak: koşulun içinde tek eşittir yazmak söz dizimi hatası verir; karşılaştırma için çift eşittir gerekir.
  • Sayı ve metni toplamak: yaş gibi bir değeri metinle + ile birleştirirken tür hatası alırsınız; f-string ya da str dönüşümü kullanın.
  • and ile or'u parantezsiz karıştırmak: and daha sıkı bağlandığından a or b and c ifadesi önce b and c'yi hesaplar.
  • not'ı yanlış yere koymak: not x == y ifadesi, not (x == y) anlamına gelir; niyetiniz bu değilse parantez ekleyin.
  • Ondalıklı sayıları == ile karşılaştırmak: yaklaşık gösterim yüzünden eşit beklediğiniz değerler eşit çıkmayabilir.
  • // ve % ile negatif sayıları denememek: sonuç sezgiden farklı olabilir, önce küçük bir denemeyle doğrulayın.

Genel ilke: bir ifade tek bakışta anlaşılmıyorsa parçalarına ayırıp ara değişkenlere atayın. yeterli_stok = stok >= talep gibi anlamlı adlı ara değişkenler, hem hata ayıklamayı hem okumayı kolaylaştırır.

Bu beceriyi Mindset programlarında nerede çalışırsınız

Python ile Programlama Eğitimi Fonksiyonlar ve Operatörler başlıklı modülü içerir; Data Science Bootcamp ise Temel İfadeler modülüyle aynı temeli verir. Koşul yazan, filtre kuran ya da veri satırlarını kurallara göre ayıran bir analist için operatör mantığı, her kodun altında yatan temel yapıdır.

İlgili Mindset programı

Python ile Programlama Eğitimi

Sık sorulanlar

Sık sorulan sorular

// ve % operatörleri ne işe yarar?

// tam bölmedir ve sonucu aşağı yuvarlar, % ise bölmeden kalanı verir. İkisi birlikte x == (x // y) * y + (x % y) bağıntısını sağlar. Çift sayı kontrolü, dairesel dizilerde konum hesabı ve gruplara bölme gibi işlerde kullanılır. Sıfıra bölmede ZeroDivisionError oluşur.

== ile is arasındaki fark nedir?

== iki değerin eşit olup olmadığını sorar, is ise iki ismin aynı nesneyi gösterip göstermediğini. Aynı içerikli iki liste == ile eşit çıkar ama is ile aynı nesne değildir. None kontrolü gibi tekil nesnelerde is None yazılır; diğer durumlarda değer karşılaştırması için == kullanılır.

and ve or neden True ya da False döndürmüyor?

Python belgelerine göre and ve or, son değerlendirilen işleneni döndürür; bu kısa devre davranışıdır. Sonuç koşulda kullanıldığında doğru ya da yanlış sayılır, ama ifade bir değer olarak da kullanılabilir. Varsayılan değer vermek için ad or 'misafir' yazımı bu davranıştan faydalanır.

Operatör önceliği nasıl öğrenilir?

Önce temel sıra: üs alma, çarpma ve bölme ailesi, toplama ve çıkarma, karşılaştırmalar, ardından not, and ve or. Ezber yerine kural şu: emin değilseniz parantez kullanın. Bir ifade parantezle ve ara değişkenlerle okunur olduktan sonra öncelik tablosuna bakmanıza gerek kalmaz.

Karşılaştırma zincirleme nedir?

a < b < c gibi yazımların matematikteki anlamıyla çalışmasıdır. Python belgelerine göre bu ifade a < b and b < c ile eşdeğerdir, yalnızca b bir kez değerlendirilir. Aralık kontrolünü kısa yazmanın yoludur; ama zinciri fazla uzatmak okunurluğu bozar.

Python Operatörler: Aritmetik, Mantıksal ve Üyelik