Nesne Tabanlı Programlama

8 - Alıştırmalar

Emre Can Yılmaz

Ondokuz Mayıs Üniversitesi

2024

Alıştırmalar

Bu hafta alıştırma yaparak öğrendiklerimizi pekiştireceğiz.

Kelime Sayaç Uygulaması

  • Kullanıcıdan bir metin alın ve bu metindeki her kelimenin kaç kez geçtiğini hesaplayan bir program yazın.
  • Sonucu bir sözlük olarak yazdırın (örn: {"ve": 3, "bir": 2, ...}).

Harf Frekansı Analiz Programı

  • Kullanıcıdan bir metin alın ve metindeki her harfin kaç kez geçtiğini hesaplayıp sonucu bir sözlük olarak yazdırın. (örn: {"a": 10, "b": 5,...}).
  • Büyük-küçük harf duyarlılığını kaldırın.

TC Kimlik Numarası Doğrulama

Türkiye Cumhuriyeti Kimlik Numarası’nın (TC Kimlik No) geçerli olup olmadığını kontrol eden bir fonksiyon yazın. Fonksiyon, TC Kimlik No’yu string olarak parametre olarak alsın ve geçerli ise True, geçersiz ise False döndürsün.

TC Kimlik No’nun geçerliliği için şu kurallara uyulmalıdır:

  1. 11 haneli olmalıdır.
  2. Sadece rakamlardan oluşmalıdır.
  3. İlk hane 0 olamaz.
  4. 1, 3, 5, 7 ve 9. hanelerin toplamının 7 katından, 2, 4, 6 ve 8. hanelerin toplamı çıkarıldığında, elde edilen sonucun 10’a bölümünden kalan, 10. haneye eşit olmalıdır.
  5. 1, 2, 3, 4, 5, 6, 7, 8, 9 ve 10. hanelerin toplamının 10’a bölümünden kalan, 11. haneye eşit olmalıdır.

Örnek Girdi ve Çıktı:

gecersiz_tc = "12345678902"  # Son hane uyuşmuyor
gecersiz_tc2 = "02345678901" # İlk hane 0
gecersiz_tc3 = "123456789a1" # Sadece rakamlardan oluşmalı
gecersiz_tc4 = "1234567890" # 11 hane olmalı

print(tc_kontrol(gecersiz_tc))   # Çıktı: False
print(tc_kontrol(gecersiz_tc2))  # Çıktı: False
print(tc_kontrol(gecersiz_tc3))  # Çıktı: False
print(tc_kontrol(gecersiz_tc4))  # Çıktı: False

Telefon Rehberi Uygulaması

  • Basit bir telefon rehberi uygulaması yazın.
  • Kullanıcıdan isim ve telefon numarası çiftleri alarak bir sözlük oluşturun.
  • Kullanıcı “arama” komutunu girdiğinde, arama yapacağı ismi sorsun ve eğer isim sözlükte varsa numarasını yazdırsın, yoksa “Kişi bulunamadı” mesajını göstersin.
  • Kullanıcı “çıkış” komutunu girdiğinde program sonlansın.
  • Her bir komutu fonksiyon olarak yazın ve programı bir döngü içinde çalıştırın.

Telefon Rehberi Uygulaması - Örnek Menü

menu = """
Telefon Rehberi Uygulaması
1) Kişi Ekle
2) Kişi Ara
3) Çıkış
"""

Kredi Kartı Numarası Doğrulama (Luhn Algoritması)

Luhn algoritmasını kullanarak bir kredi kartı numarasının geçerli olup olmadığını kontrol eden bir fonksiyon yazın. Fonksiyon, kredi kartı numarasını string olarak parametre olarak alsın ve geçerli ise True, geçersiz ise False döndürsün.

Luhn algoritması şu şekilde çalışır:

  1. Sayının sağdan sola doğru her hanesini numaralandırın (1, 2, 3, …).
  2. Çift numaralı haneleri 2 ile çarpın.
  3. Eğer çarpım sonucu iki basamaklı bir sayı ise, basamaklarını toplayın (örneğin, 16 için 1 + 6 = 7).
  4. Tüm haneleri toplayın.
  5. Eğer toplam 10’un katı ise, sayı geçerlidir.

Örnek Girdi ve Çıktı:

gecerli_kart = "49927398716"
gecersiz_kart = "49927398717"
gecerli_kart_2 = "1234567890123456" # 16 haneli olabilir
gecersiz_kart_2 = "1234567890123452"
print(luhn_kontrol(gecerli_kart))       # Çıktı: True
print(luhn_kontrol(gecersiz_kart))     # Çıktı: False
print(luhn_kontrol(gecerli_kart_2))  # Çıktı: True
print(luhn_kontrol(gecersiz_kart_2)) # Çıktı: False

Adım adım Luhn Algoritması

Luhn algoritmasını geçerli bir kredi kartı numarası üzerinde adım adım açıklayalım. Örnek olarak 49927398716 numarasını kullanalım:

  1. Sayının sağdan sola doğru her hanesini numaralandırın:

    4  9  9  2  7  3  9  8  7  1  6
    11 10 9  8  7  6  5  4  3  2  1
  2. Çift numaralı haneleri 2 ile çarpın:

    4 (9*2) 9 (2*2) 7 (3*2) 9 (8*2) 7 (1*2) 6
    4  18   9  4    7  6    9  16   7  2    6
  3. Eğer çarpım sonucu iki basamaklı bir sayı ise, basamaklarını toplayın:

    4 (1+8) 9  4    7  6    9 (1+6) 7  2    6
    4   9   9  4    7  6    9   7   7  2    6
  4. Tüm haneleri toplayın:

    4 + 9 + 9 + 4 + 7 + 6 + 9 + 7 + 7 + 2 + 6 = 70
  5. Eğer toplam 10’un katı ise, sayı geçerlidir.

    70, 10’un katı olduğu için 49927398716 numarası Luhn algoritmasına göre geçerli bir kredi kartı numarasıdır.