İçeriğe geç

Menü

Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Python Kullanıcı Girdisi Nasıl Doğrulanır? Sayı, Metin ve Boş Değer Kontrolü

python-kullanici-girdisi-nasil-dogrulanir
Bu yazıda neler var?
  1. Python kullanıcı girdisini doğrulamanın temel mantığı
  2. Boşluk, veri türü, aralık ve seçenek kontrolleri nasıl ayrılır?
  3. Menü seçimi ve pozitif tam sayı için çalışan Python örneği
  4. Hata mesajları ve doğrulama tamamlanmadan değeri kullanmama
  5. Al, kontrol et, geçerliyse kullan: üç adımlı şema
  6. Sık Sorulan Sorular

Python kullanıcı girdisi doğrulama, input() ile alınan metni kullanmadan önce temizlemek, beklenen veri türüne dönüştürmek ve geçerli sınırlar içinde olup olmadığını kontrol etmekle yapılır. Bunun için genellikle strip(), int(), float(), try-except ve geçerli bir değer alınana kadar çalışan while döngüsü birlikte kullanılır.

Bu akış sayesinde boş, yalnızca boşluk içeren, sayı yerine metin verilen veya izin verilen aralığın dışına çıkan girdiler reddedilir. Konsol girdisi doğrulaması, web formu güvenliğiyle aynı kapsamda değildir; burada öncelikli amaç programın beklemediği değerlerle hatalı çalışmasını önlemektir.

Python kullanıcı girdisini doğrulamanın temel mantığı

input() kullanıcıdan ne yazılırsa yazılsın onu metin olarak döndürür. Kullanıcı ekrana 42 yazsa bile program bu değeri başlangıçta bir tam sayı olarak değil, metin olarak alır. Bu nedenle değeri hesaplamada, karşılaştırmada veya menü işleminde kullanmadan önce hangi biçimde olması gerektiğini belirlemek gerekir.

İlk adım, alınan metnin başındaki ve sonundaki gereksiz boşlukları strip() ile ayıklamaktır. Bu işlemden sonra metin boş kalıyorsa giriş reddedilir. Örneğin kullanıcı yalnızca boşluk tuşlarına bastıysa program bunu geçerli bir metin veya sayı gibi işlememelidir. strip() metnin içindeki boşlukları kaldırmaz; yalnızca iki uçtaki boşlukları temizler.

Sayı beklenen bir alanda temizlenmiş metin, int() veya float() ile dönüştürülmek üzere try bloğunda denenir. Dönüşüm başarısız olursa except bölümü çalışır ve kullanıcıdan yeni bir değer istenir. Bu işlemi while döngüsü içine almak, geçerli bir giriş gelene kadar aynı kontrol akışını tekrarlamayı sağlar.

Ham değer, input() çağrısından hemen sonra elde edilen ve henüz temizlenip denetlenmemiş metindir. Doğrulanmış değer ise boş olmadığı, doğru veri türüne dönüştüğü ve gerekiyorsa belirlenen aralık ya da seçenek kurallarını karşıladığı kesinleştirilen değerdir. Doğrulama tamamlanmadan hesaplama yapmak, menü işlemi başlatmak veya değeri başka bir fonksiyona göndermek yerine yeniden giriş istenmelidir.

Boşluk, veri türü, aralık ve seçenek kontrolleri nasıl ayrılır?

Boşluk, veri türü, aralık ve seçenek kontrolleri nasıl ayrılır?

Bu kontroller farklı sorunları yakalar. Bir girişin sayı olması, pozitif olması veya belirli bir menü seçeneğine karşılık gelmesi aynı kontrol değildir. Uygulamada önce boşluk kontrolü yapılır, ardından veri türü dönüşümü denenir ve dönüşüm başarılıysa aralık ya da seçenek kontrolüne geçilir.

Boşluk kontrolü

strip() sonrasında elde edilen metin boşsa kullanıcı anlamlı bir değer girmemiştir. Boş giriş ve yalnızca boşluklardan oluşan giriş reddedilir. Metin alanlarında bu kontrol genellikle ilk adımdır; sayı alanlarında da dönüşümden önce yapılması, gereksiz dönüşüm hatalarını ve belirsiz hata mesajlarını önler.

Veri türü kontrolü

int(), tam sayı beklenen metni dönüştürmeyi dener. float() ise ondalıklı sayı beklenen metni dönüştürmeyi dener. Kullanıcı sayı beklenen alana harflerden oluşan bir metin yazarsa dönüşüm başarısız olur ve try-except ile bu durum yakalanarak giriş yeniden istenir. Metin beklenen bir alanda ise değer genellikle metin olarak bırakılır; yalnızca boş olmaması veya uygulamanın belirlediği metin kurallarını karşılaması kontrol edilir.

Aralık kontrolü

Dönüşüm başarılı olsa bile değer her zaman kullanılabilir değildir. Pozitif tam sayı bekleniyorsa değer sıfırdan büyük olmalıdır. Benzer şekilde bir puan, adet veya seçim numarası belirlenen alt ve üst sınırlar içinde tutulabilir. Aralık kontrolü dönüşümden sonra yapılır; çünkü karşılaştırmanın güvenilir biçimde yapılabilmesi için önce metnin sayısal değere dönüşmesi gerekir.

İzin verilen seçenek kontrolü

Menü seçiminde kullanıcıdan alınan değer, menüde tanımlanan seçeneklerden biriyle eşleşmelidir. Menüde bulunmayan bir harf, sayı veya komut geçerli kabul edilmez. Böylece boş olmayan ve doğru türde görünen bir değer bile uygulamanın izin verdiği seçenekler arasında değilse yeniden istenir.

Özetle metin doğrulaması boşluk ve içerik kurallarını, sayı doğrulaması dönüşümü, pozitif sayı doğrulaması aralık şartını, menü doğrulaması ise izin verilen seçenekleri denetler. Bu dört nokta, sonraki uygulama bölümünde aynı çalışan akış içinde birleştirilebilir.

Menü seçimi ve pozitif tam sayı için çalışan Python örneği

Python kullanıcı girdisini doğrulamak için değeri önce metin olarak alıp boşlukları temizleyebilir, ardından izin verilen seçeneği, veri türünü ve aralığı kontrol edebilirsin. Bu program menüde yalnızca 1 ve 2 seçeneklerini, sayı alanında ise 0'dan büyük tam sayıları kabul eder.

while True:
    secim = input("İşlem seçin (1: Toplama, 2: Çıkarma): ").strip()

    if secim == "":
        print("Seçim boş bırakılamaz.")
        continue

    if secim not in ("1", "2"):
        print("Geçersiz seçim. 1 veya 2 gir.")
        continue

    break

while True:
    deger_metni = input("Pozitif bir tam sayı gir: ").strip()

    if deger_metni == "":
        print("Değer boş bırakılamaz.")
        continue

    try:
        deger = int(deger_metni)
    except ValueError:
        print("Lütfen bir tam sayı gir.")
        continue

    if deger <= 0:
        print("Sayı 0'dan büyük olmalı.")
        continue

    break

if secim == "1":
    print(f"Toplama işlemi {deger} kez seçildi.")
else:
    print(f"Çıkarma işlemi {deger} kez seçildi.")
  1. input() bütün girişleri metin olarak döndürür. strip() ise metnin başındaki ve sonundaki boşlukları temizler.
  2. İlk while döngüsü boş menü seçimini ve 1 ile 2 dışındaki seçenekleri continue ile reddeder. Geçerli seçimde break çalışır.
  3. İkinci döngü sayı girişini kontrol eder. Boş metin ayrı bir durum olarak ele alınır.
  4. int() dönüşümü try-except içinde yapılır. Kullanıcı abc gibi bir metin girerse ValueError yakalanır. Ondalıklı değer beklenen bir akışta benzer yapı içinde float() kullanılabilir.
  5. Dönüşüm başarılı olsa bile deger <= 0 kontrolü yapılır. Son if bloğu, menü ve sayı doğrulaması tamamlandıktan sonra çalışır.
Girdi örneği Yakalanan kontrol Beklenen çıktı
Menü: 1, sayı: 3 Geçerli seçenek, tam sayı ve pozitif aralık Toplama işlemi 3 kez seçildi.
Menü: " " strip() sonrası boş değer Seçim boş bırakılamaz.
Menü: 1, sayı: " " strip() sonrası boş değer Değer boş bırakılamaz.
Menü: 1, sayı: abc int() dönüşümünde veri türü Lütfen bir tam sayı gir.
Menü: 1, sayı: 0 veya -2 Pozitif olma koşulu ve aralık Sayı 0'dan büyük olmalı.
Menü: 3 İzin verilen seçenek listesi Geçersiz seçim. 1 veya 2 gir.

Hata mesajları ve doğrulama tamamlanmadan değeri kullanmama

Hata mesajı, beklenen giriş biçimini, hatanın nedenini ve yeniden deneme yolunu açıkça belirtmelidir. Bu programdaki mesajlar kontrol türüne göre ayrılır:

  • Boş menü: Seçim boş bırakılamaz.
  • Boş sayı: Değer boş bırakılamaz.
  • Tam sayı yerine metin: Lütfen bir tam sayı gir.
  • Pozitif olmayan sayı: Sayı 0'dan büyük olmalı.
  • Menü dışında seçim: Geçersiz seçim. 1 veya 2 gir.

secim doğrulanmış menü metnini, deger_metni dönüştürülmemiş giriş metnini, deger ise int() sonrasında elde edilen sayısal değeri tutar. Böylece metin ile sayı akış içinde birbirine karıştırılmaz.

Geçersiz girişlerde continue döngünün başına döner ve hatalı değer son işlemde kullanılmaz. break yalnızca ilgili doğrulama tamamlandıktan sonra çalışır. Bu nedenle son çıktı, iki giriş de geçerli hâle gelmeden üretilmez. Konsol doğrulaması, web uygulamalarındaki yetkilendirme, sunucu tarafı doğrulama ve diğer güvenlik önlemlerinin tamamının yerine geçmez.

Al, kontrol et, geçerliyse kullan: üç adımlı şema

Python kullanıcı girdisini doğrulamak için akışı üç adımda düşünebilirsin: değeri al, beklenen koşullara göre kontrol et, yalnızca geçerliyse program içinde kullan.

  1. Al: input() ile ham metni al ve başındaki veya sonundaki boşlukları strip() ile temizle. Menü seçimi için alınan 2 ve pozitif tam sayı için alınan 5 değeri bu aşamada hâlâ metindir.
  2. Kontrol et: Önce girdinin boş olup olmadığını değerlendir. Ardından gereken tür dönüşümünü yap. Tam sayı bekleniyorsa int(), ondalık değer kabul ediliyorsa float() kullanılabilir. Dönüşümü try-except içinde ele al; menüde izin verilen seçenekleri, pozitif tam sayıda ise türü, sıfırdan büyük olma koşulunu ve gerekiyorsa aralığı denetle.
  3. Geçerliyse kullan: Geçerli bir menü seçimini ilgili işlemi başlatmak için, pozitif tam sayıyı da hesaplama veya döngü koşulu için kullan. Boş, metin türünde ya da aralık dışındaki girişlerde anlaşılır bir mesaj gösterip while döngüsüyle değeri yeniden iste.

Bu akışı temel Python çalışmalarıyla pekiştirmek için ücretsiz Sıfırdan Temel Python video eğitimi içindeki alıştırmalardan yararlanabilirsin.

Bir değeri programın geri kalanında kullanmadan önce doğrulama süreci tamamlanmış olmalıdır.

Sık Sorulan Sorular

input() ile alınan değer neden doğrudan kullanılmaz?

input() sonucu metin olarak döndürür. Sayısal işlem yapılacaksa tür dönüşümü, ayrıca boş değer, aralık ve izin verilen seçenek kontrolleri gerekir. Bu kontroller yapılmadan değer kullanılırsa dönüşüm hatası veya beklenmeyen bir işlem oluşabilir.

strip() yalnızca boşluklardan oluşan girdiyi nasıl yakalar?

strip(), metnin başındaki ve sonundaki boşlukları kaldırır. Kullanıcı yalnızca boşluk girdiyse sonuç boş bir metin olur. Ardından if not deger: gibi bir koşulla bu giriş yakalanabilir.

Sayı beklenirken int() ile float() arasında nasıl seçim yapılır?

Tam sayı beklenen menü seçimi, adet veya pozitif sayı kontrollerinde int() tercih edilir. Ondalık değerlerin kabul edildiği ölçüm ve hesaplamalarda float() kullanılabilir. Her iki dönüşüm de geçersiz metinlere karşı try-except içinde ele alınmalıdır.

Konsol girdisi doğrulaması web formu güvenliğiyle aynı mıdır?

Hayır. Konsol girdisi doğrulaması, programın beklediği veriyi doğru türde ve aralıkta almak için uygulanır. Web formlarında ise sunucu tarafı doğrulama, yetkilendirme ve çıktının uygun biçimde işlenmesi gibi ek güvenlik konuları da değerlendirilir. Bu nedenle konsol doğrulaması, web formu güvenliğinin yerine geçmez.

Her kullanıcı girdisini önce alıp sonra kontrol ederek yalnızca geçerli değerleri kullanmak, konsol uygulamalarındaki akışı daha anlaşılır ve yönetilebilir hâle getirir.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara