Alıştırma: if deyimiyle kod dallandırma

Tamamlandı

if ... elif ... else deyimini kullanmak, anlamlı programlar yazmanın hayati önem taşıyan bir parçasıdır. Kullanıcı girişinize veya verilerinize yinelenen ve tutarlı bir şekilde uygulanabilmesi için, karmaşık karar mantığını otomatikleştirmek amacıyla bu deyimi kullanabilirsiniz.

Kod mantığı veya karar mantığı terimlerini kullandığınızda, programınıza girişleri temel alan kararlar alma özelliği eklemeyi kastediyorsunuz. Karara bağlı olarak, Python yorumlayıcısına bazı kodları çalıştırıp bazılarını atlaması talimatını verebilirsiniz.

Bu alıştırmada, bir Boole ifadesini temel alarak kodumuzun yürütmesini dallandırmak için isteğe bağlı elif ve else deyimleriyle birlikte if deyimini kullanacaksınız.

Boole ifadesi, Boole değeri döndüren herhangi bir koddur. Boole değeri True veya False olabilir ve str ile int gibi, Python’da kendi veri türüne sahiptir.

Bu alıştırmada, iki değerin eşit olup olmadığını değerlendirmek için bir Boole ifadesi kullanacaksınız. Sonraki ünitede, daha açıklayıcı Boole ifadeleri oluşturmayı ve Boole değeri döndüren işlevlere çalışmayı öğreneceksiniz.

Basit bir if deyimi örneğiyle başlayalım.

1. Adım: Yeni çalışma klasörü ve Python kodu dosyası oluşturma

Önceki modüllerde öğrendiğiniz teknikleri kullanarak, bu modüldeki çalışmanız için yeni bir klasör oluşturun. Örneğin, python-if adlı bir klasör oluşturabilirsiniz.

Bu klasörün içinde, bu alıştırma için bir dosya oluşturun. Örneğin, exercise1.py adlı bir dosya oluşturabilirsiniz.

kodunuzu çalıştırmanın zamanı olduğunda Visual Studio için Python Araçları kod tümleştirmesini kullanın, yeşil oku seçin. Dilerseniz önceki modüllerde öğrendiğiniz teknikleri kullanarak tümleşik terminalde bir komut da kullanabilirsiniz.

2. Adım: Yeni kod dosyasına bir if deyimi ekleme

Aşağıdaki kodu, kod dosyanıza ekleyin.

value = '7'
    
if value == '7':
    print('The value is 7')
    
print('Finished!')

if deyiminin üç parçası vardır:

  • if anahtar sözcüğü
  • value == '7' Boole ifadesi
  • Gerekli iki nokta : karakteri

Sonrakiler de bunlar kadar önemlidir. Sonraki satır, Boole ifadesinin değerlendirmesi True ise çalıştırılan bir kod bloğu içermelidir. Python’da bir kod bloğu girinti kullanılarak tanımlanır. Bu örnekte, dört ayrı boşluk eklemek için Sekme tuşunu kullandık. Bu girinti, Python yorumlayıcısına bu kodun if deyimine ait olduğunu ve Boole ifadesinin değerlendirmesi True olduğunda çalışması gerektiğini söyler.

Boole ifadesinin değerlendirmesi False olursa girintilenen kodun tamamı Python yorumlayıcısı tarafından yoksayılmalıdır.

Kodu çalıştırdığınızda aşağıdaki çıkışı görmelisiniz.

The value is 7
Finished!

Boole ifadesinin değerlendirmesi False olduğunda bu kodun nasıl çalıştığını görmek için kodun ilk satırını value değerini '6' dizesine ayarlayacak şekilde değiştirin.

value = '6'

Kodu çalıştırdığınızda aşağıdaki çıkışı görürsünüz.

Finished!

Boole ifadesinin değerlendirmesi False olduğundan, if deyiminin altındaki kod satırı yoksayılır. Finished terimini yazdıran kodun son satırı, if ifadesinin altında girintilenmediğinden çalışır.

3. Adım: Girintilemenin önemini anlamak için kodun son satırına sekme karakteri ekleme

Kodun son satırına girinti eklediğinizde ne olduğunu görelim.

Satırdan önce bir sekme karakteri ekleyerek kodun son satırını değiştirin. Kodunuz, aşağıdaki çıkışla eşleşmelidir.

value = '6'
    
if value == '7':
    print('The value is 7')
    
    print('Finished!')

Bu defa kodu çalıştırdığınızda çıkış olmayacaktır. Bunun nedeni, kodun son satırının artık if deyimine ait aynı kod bloğunun bir parçası olmasıdır.

Girintileme, Python’da bir kod bloğu tanımlar. Kod bloğu, çalışma birimi olarak kabul edilen bir veya daha fazla kod satırından oluşur. Kod bloğu yalnızca üzerindeki deyimi temel alarak yürütülür; bu örnekte if deyimi söz konusudur. Döngü, işlev ve sınıflar gibi yeni yapıları öğrendikçe Python’daki kod bloklarıyla daha sık karşılaşacaksınız.

Söz konusu girintileme olduğunda Python seçici davranır. Tüm satırların eşit düzeyde girintilenmesi gerekir. Aksi takdirde Python, kodu çalıştırdığınızda bir özel durum görüntüler. Son kod satırından önceki tek bir boşluk karakterini kaldırırsanız.

value = '6'
    
if value == '7':
    print('The value is 7')
    
   print('Finished!') # Intentional difference in indent

Sonra kodu yeniden çalıştırmayı denerseniz aşağıdaki hatayı görürsünüz.

  File "exercise1.py", line 6
    print('Finished!') # Intentional difference in indent
                                                       ^
IndentationError: unindent does not match any outer indentation level

4. Adım: Kod örneğini bir else deyimi içerecek şekilde güncelleştirme

else deyimi, ters durumu işleyebilen if deyiminin isteğe bağlı bir parçasıdır. Başka bir deyişle, if deyimindeki Boole ifadesinin değerlendirmesi False olduğunda, bunun yerine else deyimine ait kod bloğunu çalıştırın.

Kodunuzu, aşağıdaki kod parçasıyla eşleşecek şekilde güncelleştirin. else deyimini eklemenin yanı sıra, son kod satırından sekme karakterini de kaldırdığınızı göz önünde bulundurun.

value = '6'
    
if value == '7':
    print('The value is 7')
else:
    print('The value is not 7') 
    
print('Finished!')

Kodu çalıştırırsanız aşağıdaki çıkışı görürsünüz.

The value is not 7
Finished!

else deyiminin iki parçası vardır:

  • else anahtar sözcüğü
  • İki nokta : klavye simgesi

Daha önce olduğu gibi, else deyimini izleyen kod bloğu da aynı derecede önemlidir. else deyiminin altında girintilenen kod satırlarının tümü kod bloğunun bir parçası olur ve if deyiminin değerlendirmesi False olduğunda Boole ifadesiyle birlikte yürütülür.

5. Adım: Kod örneğini bir elif deyimi içerecek şekilde güncelleştirme

elif veya else if deyimi, if deyiminin altına eklenebilecek başka bir isteğe bağlı deyimdir. Başka bir ilgili Boole ifadesini test etmek için elif deyimini kullanın. Bu Boole ifadesinin değerlendirmesi True olursa altındaki girintilenen kod çalışır. Diğer if, elif ve else deyimlerine ait tüm kod blokları yoksayılır.

Aşağıdaki kod listesiyle eşleştirmek için aşağıdaki kod örneğini değiştirin.

value = '8'
    
if value == '7':
    print('The value is 7')
elif value == '8':
    print('The value is 8')
else:
    print('The value is not one we are looking for')
    
print('Finished!')

if deyiminde olduğu gibi, elif deyiminin de üç parçası vardır:

  • elif anahtar sözcüğüyle başlamalıdır.
  • Boole ifadesi içermelidir.
  • İki nokta üst üste : klavye simgesi kullanılarak sonlandırılmalıdır.

Daha önce olduğu gibi, elif altındaki tüm girintilenen kodlar, Boole ifadesinin değerlendirmesi True olursa çalışacak olan kod bloğunun parçasıdır.

Kodu çalıştırdığınızda aşağıdaki çıkışı görürsünüz.

The value is 8
Finished!

Gerektiği kadar çok elif deyimi kullanabilirsiniz. else deyimi kullanıyorsanız bu deyim, tüm elif deyimlerinden sonra gelmelidir.

else deyiminden önce ek bir elif deyimi ekleyerek kodunuzu değiştirin.

value = '8'
    
if value == '7':
    print('The value is 7')
elif value == '8':
    print('The value is 8')
elif value == '9':
    print('The value is 9')
else:
    print('The value is not one we are looking for')

Herhangi bir if veya elif ifadesinin değerlendirmesi True olursa Python yorumlayıcısı ek Boole ifadelerini değerlendirmeye devam etmez. if ... elif ... else yapısının tamamından çıkar ve girintilenmemiş sonraki kod satırını işlemeye devam eder.

Çakışan Boole ifadelerine dikkat edin

Aşağıdaki kodu inceleyin.

value = '6'
    
if value < '8':
    print('The value is less than 8')
elif value < '7':
    print('The value is less than 7')
else:
    print('The value is greater than 8')

İlk olarak, sonraki ünitede daha fazla bilgi edineceğiniz yeni bir işleci tanıtıldı. < küçüktür işleci iki sayısal değeri karşılaştırır. Soldaki değer sağdaki değerden küçükse ifadenin değerlendirmesi True olur. Değilse değerlendirme False olur.

if ve elif deyimleriyle ilgili sorunu fark edebilir misiniz? Yakından inceleyin ve bu kodun nasıl çalışacağını ayrıntılı bir biçimde düşünün.

Sorun, if deyimi için True olan tüm value deyimleri elif deyimi için True olacağından, elif deyiminin asla yürütülmemesidir. Sonuç olarak, yürütme yolu asla elif deyimine ulaşmaz.

Bu senaryo muhtemelen çalışma zamanı hatası bildirmez. Bunların farklı şekilde ele alınmasını bekliyor olsaydınız uygulamanızda hafif bir mantık hatası olurdu. Sorunu düzeltmek için if ve elif arasındaki Boole ifadelerini değiştirmeniz gerekirdi. Hedeflenen sonucu aldığınızdan emin olmak için uygulamanızı birden çok giriş ile test etmek her zaman yararlıdır.

İç içe if kod blokları

Aşağıdaki kod örneğini inceleyin.

first_value = True
second_value = '6'
    
if first_value:
    if second_value == '6':
        print('Got here!')

Burada iki ayrı veri değerini değerlendiriyorsunuz. İlk olarak first_value değerini test ediyorsunuz. Boole ifadesi True olan tüm kodlar olduğundan ve first_value zaten True olduğundan, şurada olduğu gibi tüm Boole ifadesini yazmanız gerekmez.

if first_value == True:

İkincisi ve bu kod örneği için daha alakalı olan, ilk if deyiminin kod bloğundaki ikinci if deyiminin iç içe yerleştirilmesidir. Sonuç olarak, ikinci if deyimi, yalnızca ilk if deyiminin değerlendirmesi True olduğunda değerlendirilir.

Bu iç içe yerleştirme yapısı, işlem yapmadan önce birkaç ilişkili (ancak farklı) veri değerini test etmeniz gerektiğinde yaygındır.

Doğru girintiyi kaldırırsanız...

first_value = True
second_value = '6'
    
if first_value:
if second_value == '6': # Intentionally not enough indentation
    print('Got here!')

... Büyük olasılıkla aşağıdaki hata iletisini alırsınız.

  File "c:/python/numeric-operations-decisions/exercise2.py", line 65
    if second_value == '6': # Intentionally not enough indentation
    ^
IndentationError: expected an indented block

Özet

Bu ünitede bazı önemli fikirler hakkında bilgi edindiniz:

  • Bir Boole ifadesini değerlendirmek için if deyimini kullanın. İfadenin değerlendirmesi True ise if deyiminin altındaki kod bloğu Python yorumlayıcısı tarafından çalıştırılır. Değilse yoksayılır.
  • Kod bloğu, girintilenmiş bir veya daha fazla satır kodudur. Kod bloğu if deyimine aittir ve Boole ifadesinin değerlendirmesine göre çalışır veya yoksayılır. Kod satırlarını yanlışlıkla girintilemek (veya girintilememek) kodunuzun nasıl çalışacağını ve hatta nasıl hatalar üreteceğini kesinlikle etkiler. Tüm girintilemelerde aynı sayıda boşluk karakteri kullanılmalıdır, aksi takdirde Python yorumlayıcısında hata oluşur.
  • Yalnızca Boole ifadesi değerlendirmesi False olduğunda ilişkili olan bir kod yürütmek istediğinizde isteğe bağlı else deyimi ekleyin. Değilse yoksayılır.
  • İkinci ve sonraki Boole ifadesini değerlendirmek için if deyiminden sonra (ancak else deyiminden önce) isteğe bağlı elif ekleyin. if deyiminde olduğu gibi, Boole ifadesinin değerlendirmesi True olursa altında girintilenen kod bloğu çalışır. Değilse yoksayılır.
  • Bir veya daha çok elif deyimi ve else deyimiyle if deyimini kullandığınızda, Boole ifadesinin gereksinimi karşılandıktan sonra başka bir deyim değerlendirilmez. Sonuç olarak, değerlendirmelerinizi yaptığınız sıra önemli olabilir.
  • Bazı işlemleri yapmadan önce ilişkili (ancak farklı) koşulları denetlemeniz gerekirse if deyimlerini iç içe yerleştirebilirsiniz.