Files
ornekler/dersler/27-kullanici-girdisi.md
T

4.5 KiB

baslik, bolum, ozet
baslik bolum ozet
Kullanıcıdan girdi Hatalar ve dosyalar 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.

kullan kaba.sistem
konsol.yaz("Adın: ")
ad = konsol.satir_oku().deger_veya("misafir").kirp()
yazdir(f"Merhaba {ad}!")
Ayşe
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.

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())
2011
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.

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())
on iki
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.

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}")
1.70
65
Boyun (m): 1.70
Kilon (kg): 65
Vücut kitle indeksin: 22.5

Birden çok girdi: küçük bir hesap makinesi

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}")
12
7
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.

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