Files
ornekler/dersler/12-kosullar.md
T

165 lines
3.3 KiB
Markdown
Raw Normal View History

---
baslik: Koşullar
bolum: Akış denetimi
ozet: eger, degilse eger, degilse ile karar vermek
---
Program her zaman aynı şeyi yapmaz: hava sıcaksa bir şey, soğuksa başka bir şey söyler. `eger` ile kodun bir bölümünü yalnız belli bir durumda çalıştırırsın.
## eger
`eger kosul:` satırının altındaki girintili blok, koşul doğruysa çalışır.
```kbl
sicaklik = 31
eger sicaklik > 30:
yazdir("Hava çok sıcak.")
yazdir("İyi günler.")
```
```cikti
Hava çok sıcak.
İyi günler.
```
## degilse
Koşul yanlışsa çalışacak bir blok istiyorsan `degilse:` ekle.
```kbl
bakiye = 80
fiyat = 120
eger bakiye >= fiyat:
yazdir("Ödeme yapıldı.")
degilse:
yazdir("Bakiye yetersiz.")
```
```cikti
Bakiye yetersiz.
```
## degilse eger: birden çok seçenek
Seçenek ikiden fazlaysa `degilse eger` kullanırsın. Koşullar yukarıdan aşağıya denenir; **doğru çıkan ilk dal** çalışır, gerisi atlanır.
```kbl
puan = 77
eger puan >= 85:
harf = "AA"
degilse eger puan >= 70:
harf = "BA"
degilse eger puan >= 60:
harf = "BB"
degilse eger puan >= 50:
harf = "CC"
degilse:
harf = "FF"
yazdir(f"{puan} puan: {harf}")
```
```cikti
77 puan: BA
```
> **Dikkat:** Sıralama önemlidir. Yukarıdaki örnekte önce `puan >= 50` sorulsaydı, 77 puan o dala girer ve `CC` alırdı. Eşikleri büyükten küçüğe sırala.
## Birleşik koşullar
Koşulda `ve`, `veya`, `degil` kullanabilirsin.
```kbl
yas = 16
veli_izni = dogru
eger yas >= 18 veya veli_izni:
yazdir("Geziye katılabilir.")
degilse:
yazdir("Veli izni gerekli.")
```
```cikti
Geziye katılabilir.
```
## İç içe koşul
Bir `eger` bloğunun içinde başka bir `eger` olabilir.
```kbl
kullanici = "ayse"
parola = "kirmizi-kalem"
eger kullanici == "ayse":
eger parola == "kirmizi-kalem":
yazdir("Giriş başarılı.")
degilse:
yazdir("Parola yanlış.")
degilse:
yazdir("Böyle bir kullanıcı yok.")
```
```cikti
Giriş başarılı.
```
**Dene**'ye basıp parolayı değiştir; hangi dalın çalıştığını gör.
## Gerçek bir örnek: kargo ücreti
```kbl
sepet = 420.0
agirlik = 3.2
eger sepet >= 500.0:
kargo = 0.0
degilse eger agirlik <= 1.0:
kargo = 39.90
degilse eger agirlik <= 5.0:
kargo = 59.90
degilse:
kargo = 89.90
yazdir(f"Kargo: {kargo:.2f} TL")
eger kargo > 0.0:
yazdir(f"{500.0 - sepet:.2f} TL daha ekle, kargo bedava.")
```
```cikti
Kargo: 59.90 TL
80.00 TL daha ekle, kargo bedava.
```
> **İpucu:** Bir değişkeni `eger` dallarında oluşturuyorsan (yukarıdaki `kargo` gibi) her dalda aynı türde değer ver: hepsi `ondalik` ya da hepsi `sayi`.
## Alıştırma
```alistirma
`sayi_degeri` pozitifse `pozitif`, negatifse `negatif`, sıfırsa `sıfır` yazdır.
%%%
sayi_degeri = -8
# buraya yaz
%%%
sayi_degeri = -8
eger sayi_degeri > 0:
yazdir("pozitif")
degilse eger sayi_degeri < 0:
yazdir("negatif")
degilse:
yazdir("sıfır")
%%%
negatif
```
```alistirma
Vücut kitle indeksini (`kilo / (boy * boy)`) hesapla ve 1 basamakla yazdır. Sonra değer 18.5'ten küçükse `zayıf`, 25'ten küçükse `normal`, değilse `fazla kilolu` yazdır.
%%%
kilo = 68.0
boy = 1.75
# buraya yaz
%%%
kilo = 68.0
boy = 1.75
vki = kilo / (boy * boy)
yazdir(f"{vki:.1f}")
eger vki < 18.5:
yazdir("zayıf")
degilse eger vki < 25.0:
yazdir("normal")
degilse:
yazdir("fazla kilolu")
%%%
22.2
normal
```