9: Else, And, Or, Not

Bu derste öğreneceklerinizle karmaşık durum kontrolü işlemlerini, Python'un iki özelliğini kullanarak çok daha incelikle yapabileceksiniz.

  • Bir if «C» ifadesinin ardından gelenelse ifadesi eğer  Cfalse (yanlış) ise işleme konur
  • Boolean şart yapılarını  A and B, A or B, ve not A (ve, veya, değil) bağlaçları ile kullanabilirsiniz

else

Program yazarken genelde bir durumu kontrol ederek, durumun doğru veya yanlışlığına göre, bir işlemin ya da diğerinin yapılmasına karar vermek gerekir.  Daha önce, size verdiğimiz bir alıştırmada yaş 0'dan küçükse bir şey, eğer yaş 0'dan küçük değilse başka bir şey yapmanızı istemiştik; kod da şöyle idi:

if yaş >= 0:  
  print('Zaman yolcusu sayılmazsın')
if yaş < 0:
  print('Sen bir zaman yolcususun')
Şimdi aynı kodu else (değilse) kullanarak tekrar yazalım.

Example
 
You may enter input for the program in the box below.

Daha genel olarak, else yapısını aşağıdaki blok formuyla kullanırız:

if «test»:
   «doğru-gövde (true-body)»        # girintili blok
else:
   «yanlış-gövde (false-body)»       # başka bir girintili blok
Python testi değerlendirir. Eğer doğru ise true-body, yanlış ise false-body işleme konur.

 else Yapısının Felsefesi

else bağlacını kullanmakla yeni güçler kazanmıyoruz, ama kodu okumak, hataları ayıklamak ve sürdürmek çok daha kolay oluyor. Aynı işlemi yapan iki farklı kod parçasına bakalım:

A Versiyonu
if boy < 256:
   print('Bu sürüş için çok kısa')
else:
   print('Hoşgeldiniz!')
B Versiyonu
if boy < 256:
   print('Bu sürüş için çok kısa')
if boy >= 256:
   print('Hoşgeldiniz!')

İkisi de aynı işlemi yapar, hatta  B versiyonunda  else bağlacına gerek bile yok. Yine de programcıların çoğu A versiyonunun daha iyi olduğu konusunda hemfikir olacaklardır. Örneğin şartı değiştirsek (diyelim 256 yerine 128 yazsak) A versiyonunda sadece tek bir değişiklik yapmamız gerekir. Ayrıca insan zihni için A versiyonu anında anlaşılır; B'de ise iki ifadenin de doğru olup olmadığını kontrol etmek ve düşünmek gerekir.

Coding Exercise: Kesin Değer
Kesin değer şu şekilde belirlenecek: Pozitif veya 0 olan x sayısı için, x'in kesin değeri x'tir.  x bir negatif sayı olduğunda ise x'in kesin değeri -x olacaktır, başka bir deyişle sayı yine x olacak ama - işareti olmadan. Mesela 5 sayısının kesin değeri 5 ,  -10 sayısının ise 10 olur.  if ve else  kullanarak bir program yazın, input olarak bir tamsayı alsın ve output olarak onun kesin değerini yazsın.
You may enter input for the program in the box below.

Python'un  abs(x) şeklinde dahili bir fonksiyonu vardır,  x sayısının kesin değerini hesaplamakta kullanılır. Düzenleyici bu alıştırmada bu fonksiyonu kullanmanıza izin vermiyor, ama daha sonra kullanabileceksiniz.

elif

Python'da kullanığımız bir başka anahtar kelime de elif, bu bağlaçla bir seferde birkaç şartı aynı anda kontrol edebiliriz.   elif yapısının en temel kullanımı şöyledir:

if «test1»:
   «body1»        # Eğer test1 doğru ise bu gövde işleme konur
elif «test2»:
   «body2»        # Eğer test1 yanlış ve test2 doğru ise bu gövde işleme konur
Tahmin edeceğiniz gibi elif  "else if" bağlacının kısaltmasıdır, çünkü bu else içine yereştirilmiş bir if yapısı ile aynı şeydir  Ama bununla daha az kod yazmış ve daha az girinti katmanı kullanmış oluruz, böylece, okuması, hata ayıklaması ve düzenlemesi daha kolay olur. Üstelik istediğiniz sayıda elif ifadesini aynı yapıya ekleyebilir ve en sona da gerek duyarsanız bir  else ifadesi koyabilirsiniz:

if «test1»:
   «body1»      # test1 doğru ise işleme konur
elif «test2»:
   «body2»      # test1 yanlış, test2 doğru ise işleme konur
elif «test3»:
   «body3»      # test1 & test2 yanlış ve test3 doğru ise işleme konur
else:           # bu son iki satır size kalmış
   «else-body»  # eğer yukarıdakilern hepsi yanlışsa bu satır işleme konur
 

Burada bir döngü içinde kullanılan elif var. Çalıştırmadan sonucu tahmin edebilir misiniz?

Coding Exercise: Birinci, İkinci, Üçüncü
1'inci, 2'nci 3'üncü, 4'üncü, 5'inci, 6'ncı, 7'nci, 8'inci, 9'uncu kelimeleri sıra sayı sıfatı olarak adlandırılır. Inputtan 1 ve 9 arası x sayısını alan ve bu sayıyı sıra sayı formunda yazdıran bir program yazın. 
İpucu: 9 farklı şart yapısı yazmanıza gerek olmayacak, 5 tane yeterli.
You may enter input for the program in the box below.

Boolean Operatörleri: and, or, not

Boolean ifadelerini "and", "or", ve "not" (ve, veya, değil) bağlaçlarıyla birleştirebilirsiniz.

  • A and B birleşik ifadesi, bileşenlerinin ikisi de,A ve  B doğru ise doğrudur, bileşenlerinden bir tanesi yanlışsa yanlıştır. (Örneğin, Eğer yağmur yağıyorsaand (ve) şemsiyenizini unuttuysanız, ıslanırsınız.)
  • A or B birleşik ifadesi, bileşenlerinden bir tanesi,  A veya B doğru ise doğrudur; ikisi de yanlışsa yanlıştır. (Mesela, Haftasonu ise or (veya) tatil ise, okul kapalıdır.)
  • not A ifadesi, A yanlış olduğu durumda doğrudur, eğer  A doğru ise yanlıştır. (Örneğin,not yemek ye(me)di ise, karnı açtır.)

Tüm olasılıkları görüntüleyen bir program. Okulda öğrendiğimiz çarpım tablosu gibi, ama bunun adı hakikat tablosu.

Example
Hakikat Tablosu

Hataları da kontrol ederek sayıları harflere çeviren bir programda and (ve) kullanımını görelim.

Example
and kullanımına bir örnek: sayıların harflere çevrimi, 1=A, 2=B, vb. formülü ile.
You may enter input for the program in the box below.

Coding Exercise: 26 Harf
Yukarıdaki işlemi tersten yapan bir program yazın: Input olarak bir karakter alsın ve onun karşılık geldiği sayıyı yazsın (1 ve 26 arası). Programınız sadece büyük harfleri kabul etsin. Hata kontrolü yaparak, eğer harf büyük değilse geçersiz yazdırsın. İpucuString karşılaştırma metodunu değiştirin.
You may enter input for the program in the box below.

Multiple Choice Exercise: De Morgan Kanunu
Aşağıdaki ifadelerden hangisi  A or B ifadesine denktir?
Correct! Here is one way to arrive at this answer. First, not (A or B) is only true when both A and B are false. Also, note that (not A) and (not B) is only true if both not A and not B are true, i.e. if both A and B are false. So we have the following equality:
(not A) and (not B) = not (A or B)
Put a not around both sides, so we deduce
not ((not A) and (not B)) = not (not (A or B))
and observe that not(not X)) always equals X, so
not ((not A) and (not B)) = not (not (A or B)) = A or B
This way of rewriting a boolean expression is one of De Morgan's laws.

İşlemlerin Sıralaması

Boolean operatörlerinin de tıpkı matematik işlemleri gibi  "işlem sıralaması" vardır. Sıralama şöyledir

NAO: not (en yüksek öncelik), and, or (en düşük öncelik)

yani örneğin,

not x or y and z anlamı (not x) or (y and z)

Dersimizi bu unsurları kullanacağımız bir soruyla bitirelim.

Multiple Choice Exercise: İşlemlerin Sırası
Aşağıdaki ifadenin

A or not B and C
değeri nedir; if (A, B, C) = (False, True, True)? İpucu
Correct! The order of operations makes this equivalent to
A or ((not B) and C)
substituting the values, we have
False or ((not True) and True)
and now simplifying one step at a time gives
False or ((not True) and True)
= False or (False and True)
= False or False
= False
Bunu bitirdiğiniz zaman, sonraki derse geçmeye hazırsınız.