Önceki bölümlerde verilerimizi tanımladık ve listeler, sözlükler gibi yapılarla organize ettik. Ancak şu ana kadar yazdığımız kodlar "aptaldı"; yani yukarıdan aşağıya doğru hiçbir karar vermeden dümdüz çalışıyordu.
Gerçek dünya otomasyonlarında ise senaryolar her zaman kusursuz işlemez. "Eğer sunucudan yanıt gelmiyorsa yedek sunucuya geç", "Eğer CPU %90'ın üzerindeyse bana mail at, değilse çalışmaya devam et" gibi karar mekanizmalarını kurmamız gerekir. İşte bu noktada programlamanın "beyni" olan Akış Kontrolü (Control Flow) devreye girer.
Karşılaştırma Operatörleri
Koşul yazabilmek için öncelikle iki veriyi birbiriyle kıyaslamamız gerekir. Python bu işlem için bize True (Doğru) veya False (Yanlış) dönen karşılaştırma operatörlerini sunar:
== : Eşittir (Tek eşittir = atama yapar, çift eşittir == kontrol eder)
!= : Eşit değildir
> : Büyüktür
< : Küçüktür
>= : Büyük veya eşittir
<= : Küçük veya eşittir
cpu_kullanimi = 85
max_limit = 80
print(cpu_kullanimi > max_limit) # Çıktı: True
print(cpu_kullanimi == 100) # Çıktı: FalseTemel "If" ve "Else" Yapısı
En temel koşul bloğumuz if (Eğer) ile başlar. Eğer belirtilen koşul doğruysa (True), altındaki girintili (indented) kod bloğu çalışır. Koşul yanlışsa (False), program o bloğu atlar ve else (Değilse) bloğuna geçer.
Sistemci Senaryosu: Bir HTTP servisinin durum kodunu kontrol edelim.
http_status = 503
if http_status == 200:
print("Sistem sağlıklı çalışıyor. Web sayfasına erişilebilir.")
else:
print("UYARI: Web servisine erişilemiyor! Hata kodu algılandı.")Hatırlatma: Python'da süslü parantez yoktur. if ve else satırlarının sonuna iki nokta üst üste : koymayı ve altındaki kodları bir 'Tab' (veya 4 boşluk) içeriden yazmayı unutmayın.
Çoklu Koşullar: "Elif" (Else If)
Hayat her zaman siyah veya beyaz (If/Else) değildir. Bazen birden fazla olasılığı sırasıyla kontrol etmemiz gerekir. Python'da diğer dillerdeki else if yerine kısaca elif kullanılır. Program, koşullardan doğru olan ilk bloğu çalıştırır ve gerisini okumadan if yapısından çıkar.
Sistemci Senaryosu: Switch'e atanan VLAN ID'sine göre port açıklamasını (description) dinamik olarak belirleyelim.
vlan_id = 20
if vlan_id == 10:
print("Port Konfigürasyonu: Yönetim VLAN'ı atandı.")
elif vlan_id == 20:
print("Port Konfigürasyonu: Personel VLAN'ı atandı.")
elif vlan_id == 30:
print("Port Konfigürasyonu: Misafir VLAN'ı atandı, kısıtlamalar aktif.")
else:
print(f"Bilinmeyen VLAN ID ({vlan_id})! Port kapatılıyor (shutdown).")Mantıksal Operatörler: "And", "Or", "Not"
Bazen bir aksiyon almak için tek bir koşul yetmez. "Hem ping atılabilsin HEM DE SSH portu açık olsun" gibi kompleks durumları yönetmek için mantıksal bağlaçlar kullanırız.
and (Ve): Bağladığı tüm koşulların True olması zorunludur. Biri bile False ise sonuç False olur.
or (Veya): Koşullardan sadece birinin True olması yeterlidir.
not (Değil): Mevcut durumun tersini alır. (True ise False yapar).
Sistemci Senaryosu: Bir veritabanı yedekleme script'inin çalışabilmesi için diskin yeterli alana sahip olması VE mesai saatleri dışında olunması gereksin.
bos_disk_alani_gb = 150
mesai_saati_mi = False
# and Operatörü Kullanımı
if bos_disk_alani_gb > 100 and mesai_saati_mi == False:
print("Yedekleme işlemi başlatılıyor...")
else:
print("Yedekleme için uygun koşullar sağlanamadı. Diski veya saati kontrol edin.")
# not Operatörü ile daha şık bir yazım:
# "mesai_saati_mi == False" demek yerine "not mesai_saati_mi" diyebiliriz.
if bos_disk_alani_gb > 100 and not mesai_saati_mi:
print("Yedekleme işlemi başlatılıyor... (Kısa Yazım)")Koşulları İç İçe Kullanmak (Nested If)
Bir koşulun doğruluğundan emin olduktan sonra, o blok içerisinde başka bir durumu daha kontrol edebiliriz. Ancak kodun okunabilirliğini kaybetmemesi (Spaghetti Code olmaması) için bu iç içe girintileri çok fazla derinleştirmemek en iyi uygulamadır (best practice).
cihaz_aktif = True
ssh_acik = False
if cihaz_aktif:
print("1. Adım: Cihaz ping yanıtı veriyor.")
if ssh_acik:
print("2. Adım: SSH bağlantısı kuruluyor...")
else:
print("HATA: Cihaz açık ancak SSH servisi kapalı!")
else:
print("HATA: Cihaza hiçbir şekilde erişilemiyor.")Kodumuza zeka katmayı, farklı durumlara göre farklı tepkiler verdirmeyi öğrendik. Ancak yazdığımız bir script ağımızdaki sadece bir sunucuyu değil, belki de 50 farklı sunucuyu sırasıyla kontrol etmeli. Aynı "If" bloğunu 50 kere alt alta kopyalayıp yapıştırmak amelelik olurdu.
Programlamanın gerçek gücü tekrarlı işleri otomatize etmesinde yatar. Serinin bir sonraki bölümünde verilerin üzerinde gezinmemizi sağlayan For ve While Döngüleri ile Break/Continue İfadelerini inceleyeceğiz.
