--- 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` 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 ```