Files
ornekler/dersler/27-kullanici-girdisi.md
T
semih 494781e84f Dersler ve Temeller; web örnekleri PORT ortam değişkenini okur
- dersler/: 29 kısa ders (açıklama, çalıştırılabilir örnek, alıştırma). Her örneğin
  ve alıştırma çözümünün çıktısı Online IDE'nin hazırlık adımında gerçekten koşulup
  dosyadakiyle karşılaştırılır; biçim dersler/BICIM.md.
- temeller/: tek konulu 12 başlangıç programı.
- web/anket, web/kisalt, web/pano: port PORT ortam değişkeninden okunur (Online IDE
  önizlemesi 8080 verir), yoksa eski sabit port.
- README: öğrenme bölümü, Online IDE bağlantısı.
2026-10-17 22:07:47 +03:00

162 lines
4.5 KiB
Markdown

---
baslik: Kullanıcıdan girdi
bolum: Hatalar ve dosyalar
ozet: konsol.satir_oku ve konsol.sayi_oku ile klavyeden okumak
---
Şimdiye kadar bütün değerleri koda kendin yazdın. Gerçek programlar kullanıcıyla konuşur: adını sorar, bir sayı ister, cevaba göre davranır. Bunun için `konsol` modülünü kullanırsın.
> **Not:** Bu dersteki örneklerin altında bir **girdi** bloğu var: oradaki satırlar, kullanıcı klavyeden yazıp Enter'a basmış gibi programa verilir. Bu yüzden çıktıda yazılan cevap da görünür.
## Bir satır okumak
`kullan kaba.sistem` yazıp `konsol.satir_oku()` ile bir satır okursun. `konsol.yaz()` soruyu yazar ama satırı bitirmez; cevap sorunun yanında görünür.
```kbl
kullan kaba.sistem
konsol.yaz("Adın: ")
ad = konsol.satir_oku().deger_veya("misafir").kirp()
yazdir(f"Merhaba {ad}!")
```
```girdi
Ayşe
```
```cikti
Adın: Ayşe
Merhaba Ayşe!
```
`satir_oku()` bir `belki<metin>` döndürür: girdi bitmişse ortada okunacak satır yoktur. `deger_veya("misafir")` satır varsa onu, yoksa `"misafir"`i verir. `kirp()` ise baştaki ve sondaki boşlukları atar.
## Sayı okumak
`konsol.sayi_oku("soru")` soruyu yazar, satırı okur ve tam sayıya çevirmeyi dener. Sonuç bir `sonuc`'tur: ya sayı ya hata.
```kbl
kullan kaba.sistem
r = konsol.sayi_oku("Doğum yılın: ")
eger r.tamam_mi():
yazdir(f"2026'da {2026 - r.deger()} yaşına giriyorsun.")
degilse:
yazdir("Okunamadı: " + r.hata().mesaj())
```
```girdi
2011
```
```cikti
Doğum yılın: 2011
2026'da 15 yaşına giriyorsun.
```
Kullanıcı sayı yerine yazı girerse program çökmez; hatayı sen ele alırsın.
```kbl
kullan kaba.sistem
r = konsol.sayi_oku("Kaç kitap okudun? ")
eger r.tamam_mi():
yazdir(f"{r.deger()} kitap, harika!")
degilse:
yazdir("Okunamadı: " + r.hata().mesaj())
```
```girdi
on iki
```
```cikti
Kaç kitap okudun? on iki
Okunamadı: 'on iki' bir tam sayı değil
```
> **Dikkat:** Kullanıcıdan gelen sayıyı `sayi(satir)` ile çevirme: `sayi("on iki")` hata vermez, sessizce 0 döndürür. Tam sayı için `konsol.sayi_oku` kullan; böylece yanlış girdiyi fark edersin.
## Ondalık sayı okumak
Ondalık sayı için satırı okuyup `ondalik()` ile çevirirsin.
```kbl
kullan kaba.sistem
konsol.yaz("Boyun (m): ")
boy = ondalik(konsol.satir_oku().deger_veya("0").kirp())
konsol.yaz("Kilon (kg): ")
kilo = ondalik(konsol.satir_oku().deger_veya("0").kirp())
yazdir(f"Vücut kitle indeksin: {kilo / (boy * boy):.1f}")
```
```girdi
1.70
65
```
```cikti
Boyun (m): 1.70
Kilon (kg): 65
Vücut kitle indeksin: 22.5
```
## Birden çok girdi: küçük bir hesap makinesi
```kbl
kullan kaba.sistem
a = konsol.sayi_oku("Birinci sayı: ").deger_veya(0)
b = konsol.sayi_oku("İkinci sayı: ").deger_veya(0)
yazdir(f"{a} + {b} = {a + b}")
yazdir(f"{a} x {b} = {a * b}")
```
```girdi
12
7
```
```cikti
Birinci sayı: 12
İkinci sayı: 7
12 + 7 = 19
12 x 7 = 84
```
> **İpucu:** Örneği **Dene** ile açıp kendi sayılarınla çalıştır. Girdi okuyan programlarda IDE senden cevap bekler.
## Alıştırma
Alıştırmalar girdi verilmeden denetlendiği için burada klavyeden okumak yerine, kullanıcının yazdığı satırların bir listede durduğunu varsayıyoruz. Okuma kısmını örneklerde **Dene** ile kendin dene.
```alistirma
`girdiler` listesi kullanıcının yazdığı satırları tutuyor; satırlarda fazladan boşluk olabilir. Her satırı temizle ve şehir adını büyük harfle `İZMİR'den selam!` biçiminde yazdır.
%%%
girdiler = [" İzmir ", "rize", " Iğdır"]
dongu satir icinde girdiler:
# buraya yaz
%%%
girdiler = [" İzmir ", "rize", " Iğdır"]
dongu satir icinde girdiler:
sehir = satir.kirp()
yazdir(f"{sehir.buyut()}'den selam!")
%%%
İZMİR'den selam!
RİZE'den selam!
IĞDIR'den selam!
```
```alistirma
`girdiler` listesindeki her satır bir yaş olmalı. Yalnız rakamlardan oluşan satırları sayıya çevirip topla; geçersiz satırlar için tırnak içinde `geçersiz: 'on beş'` biçiminde yazdır. En sonda toplamı yazdır.
%%%
girdiler = ["14", "on beş", "16", "", "17a"]
toplam = 0
# buraya yaz
yazdir(f"Toplam: {toplam}")
%%%
girdiler = ["14", "on beş", "16", "", "17a"]
toplam = 0
dongu satir icinde girdiler:
gecerli = degil satir.bos_mu()
dongu harf icinde satir:
eger degil "0123456789".icerir(harf):
gecerli = yanlis
eger gecerli:
toplam += sayi(satir)
degilse:
yazdir(f"geçersiz: '{satir}'")
yazdir(f"Toplam: {toplam}")
%%%
geçersiz: 'on beş'
geçersiz: ''
geçersiz: '17a'
Toplam: 30
```