162 lines
4.5 KiB
Markdown
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")` programı hata iletisiyle durdurur. Tam sayı için `konsol.sayi_oku` kullan; böylece yanlış girdiyi programın durmadan yakalarsın.
|
|
|
|
## 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
|
|
```
|