Ders 04 / 18
İşleçler ve İfadeler
Aritmetik, karşılaştırma ve mantıksal işleçler; öncelik, birleşme yönü ve kısa devre değerlendirme.
İçindekiler
İlk derste bir mantık hatası örneği verilmişti: olcum_1 + olcum_2 / 2 ifadesi
beklenen ortalamayı vermiyordu. Hata, işleçlerin hangi sırayla uygulandığını bilmemekten
kaynaklanıyordu.
Bu ders o kuralları tanımlar. Kurallar dilden dile küçük farklarla tekrarlanır; ortak olan, önceliğin matematikteki alışkanlıkla uyumlu olmasıdır.
Aritmetik İşleçler
| İşleç | Anlam | Örnek | Sonuç |
|---|---|---|---|
+ |
toplama | 12 + 18 |
30 |
- |
çıkarma | 18 - 12 |
6 |
* |
çarpma | 6 * 7 |
42 |
/ |
gerçel bölme | 7 / 2 |
3.5 |
// |
tam bölme | 7 // 2 |
3 |
% |
kalan | 7 % 2 |
1 |
** |
üs alma | 2 ** 10 |
1024 |
Kalan işleci, göründüğünden daha sık kullanılır: bir sayının çift olup olmadığı
(n % 2 == 0), bir sayacın belirli aralıklarla döngüye girmesi ve değerlerin sabit
sayıda kovaya dağıtılması hep bu işleçle yazılır.
Karşılaştırma İşleçleri
Karşılaştırma işleçleri mantıksal değer üretir: ==, !=, <, >, <=, >=.
Eşitlik sınamasının == ile yazılması, atamanın = ile yazılmasından ayırt edilmek
içindir. İkisinin karıştırılması, bazı dillerde geçerli ama yanlış bir program üretir;
bu yüzden birçok dil atamayı koşul içinde yasaklar.
Önceki derste kurulan ayrım burada da geçerlidir: == içerik eşitliğini, is
(veya karşılığı) aynı nesne olup olmadığını sınar.
Bazı diller karşılaştırmaların zincirlenmesine izin verir:
olcum = 12 print(0 < olcum < 100) # True — iki karşılaştırma ve mantıksal 've'
Bu yazım okunabilirdir ancak evrensel değildir; çoğu dilde aynı ifade beklenenden farklı
sonuç verir, çünkü önce 0 < olcum hesaplanır ve sonucu 100 ile karşılaştırılır.
Mantıksal İşleçler
Üç mantıksal işleç, koşulları birleştirir:
a and b |
a or b |
not a |
||
|---|---|---|---|---|
| yanlış | yanlış | yanlış | yanlış | doğru |
| yanlış | doğru | yanlış | doğru | doğru |
| doğru | yanlış | yanlış | doğru | yanlış |
| doğru | doğru | doğru | doğru | yanlış |
Tablo, önceki kurstaki bit düzeyi VE/VEYA tablolarının aynısıdır. Fark, bu işleçlerin bitler üzerinde değil, tüm ifade üzerinde çalışmasıdır.
Kısa Devre Değerlendirme
Mantıksal işleçlerin ayırt edici bir davranışı vardır: sonuç belli olduğunda sağ taraf hiç değerlendirilmez.
andişlecinde sol taraf yanlışsa, sonuç yanlıştır; sağ tarafa bakılmaz.orişlecinde sol taraf doğruysa, sonuç doğrudur; sağ tarafa bakılmaz.
Bu, yalnızca bir hız eniyilemesi değil, bir programlama aracıdır: sağ tarafın çalışabilmesi için gereken koşul, sola yazılarak güvenceye alınır.
bolen = 0 # Sol taraf yanlış olduğu için bölme hiç yapılmaz; hata oluşmaz. if bolen != 0 and 10 / bolen > 1: print("büyük") else: print("koşul sağlanmadı") # koşul sağlanmadı olcumler = [] # Sol taraf doğru olduğu için ilk elemana erişilmez. if len(olcumler) == 0 or olcumler[0] > 10: print("boş veya ilk ölçüm büyük") # boş veya ilk ölçüm büyük
İki koşulun sırası değiştirilirse programlar çalışma zamanı hatası verir. Koşul sırası, bu nedenle üslup değil doğruluk meselesidir.
Öncelik ve Birleşme Yönü
Öncelik, farklı işleçlerden hangisinin önce uygulanacağını; birleşme yönü, aynı öncelikteki işleçlerin hangi yönde gruplanacağını belirler.
Yüksekten alçağa doğru sık kullanılan öncelik sırası:
| Sıra | İşleçler |
|---|---|
| 1 | () gruplama |
| 2 | ** üs alma |
| 3 | tekil - (işaret) |
| 4 | *, /, //, % |
| 5 | +, - |
| 6 | karşılaştırmalar |
| 7 | not |
| 8 | and |
| 9 | or |
print(2 + 3 * 4) # 14 — çarpma önce print((2 + 3) * 4) # 20 — gruplama önceliği değiştirir print(2 ** 3 ** 2) # 512 — üs alma sağdan sola: 2 ** (3 ** 2) print(-2 ** 2) # -4 — üs alma tekil eksiden önce: -(2 ** 2) print(10 - 3 - 2) # 5 — çıkarma soldan sağa: (10 - 3) - 2 print(True or False and False) # True — 'and' önce
İlk dersteki mantık hatası bu tabloyla açıklanır: olcum_1 + olcum_2 / 2 ifadesinde
bölme dördüncü sırada, toplama beşinci sıradadır; bölme önce yapılır.
Pratik kural: öncelik kurallarını bilmek gerekir, ancak okuyucunun da bilmesine güvenmemek gerekir. Karışıklık ihtimali olan yerde parantez kullanmak, kuralı bilmenin yerine geçmez — onu görünür kılar.
Bileşik Atama
Bir değişkenin kendi değeri üzerinden güncellenmesi o kadar sık yazılır ki, diller bunun için kısa bir yazım sunar:
toplam = 0 toplam = toplam + 12 # açık yazım toplam += 18 # bileşik atama: aynı işlem print(toplam) # 30 sayac = 10 sayac -= 1 # 9 sayac *= 2 # 18 sayac //= 5 # 3 print(sayac) # 3
Bileşik atama bir işleç değil, bir yazım kısaltmasıdır: a += b ifadesi a = a + b
anlamına gelir. Kısaltmanın iki yararı vardır — değişken adı bir kez yazılır (yanlış ada
atama olasılığı düşer) ve okuyucu, güncellemenin aynı değişken üzerinde olduğunu tek
bakışta görür.
Değiştirilebilir tiplerde bu eşdeğerlik incelir: bazı dillerde bileşik atama yeni bir nesne üretmek yerine var olan nesneyi yerinde günceller. Paylaşılan bir listede bu fark gözlenebilir sonuçlar doğurur; ayrım, değiştirilemezlik konusunda kurulan kuralın uzantısıdır.
Bir uyarı: bileşik atama da bir deyimdir, ifade değildir. Değeri yoktur; başka bir ifadenin içine yerleştirilemez.
Aynı İşleç, Farklı Anlam
Bir işlecin anlamı, uygulandığı tiplere bağlıdır:
print(3 + 4) # 7 — sayısal toplama print("3" + "4") # 34 — dizgi birleştirme print([1, 2] + [3]) # [1, 2, 3] — liste birleştirme print("ab" * 3) # ababab — yineleme
Aynı simgenin farklı tiplerde farklı işlem yapması işleç aşırı yükleme olarak
adlandırılır. Kolaylık sağlar; buna karşılık, tipi yanlış varsayan kod sessizce beklenmedik
sonuç üretebilir. Kullanıcıdan alınan bir değerin sayı mı dizgi mi olduğu bilinmeden
yapılan + işlemi, bunun tipik örneğidir.
Bu, sonraki dersin konusuna doğrudan bağlanır: değerin tipi beklenenden farklıysa ne yapılır?
Özet
- Aritmetik işleçler arasında tam bölme ve kalan, sayısal problemlerde sık kullanılır.
- Karşılaştırma işleçleri mantıksal değer üretir;
==içerik eşitliğini sınar, atama değildir. and,orvenotkoşulları birleştirir; doğruluk tabloları bit düzeyi karşılıklarıyla aynıdır.- Kısa devre değerlendirmede sonuç belli olduğunda sağ taraf çalıştırılmaz; koşul sırası doğruluğu etkiler.
- Öncelik hangi işlecin önce uygulanacağını, birleşme yönü aynı öncelikteki işleçlerin gruplanmasını belirler; üs alma sağdan sola birleşir.
- Aynı işleç farklı tiplerde farklı anlam taşıyabilir.
Sonraki Adım
Bir ifadede farklı tipler karşılaştığında ne olur? Sayıya dizgi eklenebilir mi, gerçel sayı tam sayıya nasıl çevrilir ve bu çevirilerde ne kaybedilir? Sonraki ders tip dönüşümünü ve kayıplı dönüşümün sonuçlarını ele alacak.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.