165 lines
3.3 KiB
Markdown
165 lines
3.3 KiB
Markdown
---
|
|||
|
|
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
|
||
|
|
```
|