List index out of range hatası hakkında

Rakamı yazıya çeviren fonksiyonda tek ve çift basamaklı sayılar da fonksiyon doğru çalışıyor fakat yüz basamaklı sayıda “List index out of range” hatası veriyor. Kodun en altında yoruma çevirdiğim kodu çalıştırdığımda ise yüzler basamağındaki doğru değere ulaşabiliyorum. Hatayı nerde yapıyorum. Teşekkürler.

birler = ["", "Bir", "İki", "Üç", "Dört", "Beş", "Altı", "Yedi", "Sekiz", "Dokuz"]
onlar = ["", "On", "Yirmi", "Otuz", "Kırk", "Elli", "Altmış", "Yetmiş", "Seksen", "Doksan"]
yuzler = ["", "Yüz", "İkiyüz", "Üçyüz", "Dörtyüz", "Beşyüz", "Altıyüz", "Yediyüz", "Sekizyüz", "Dokuzyüz"]


def okunus(sayi):
    birinci = sayi % 10
    ikinci = sayi // 10
    ucuncu = sayi // 100
    result = yuzler[ucuncu] + " " + onlar[ikinci] + " " + birler[birinci]

    return result


sayi = int(input("Sayı: "))

print(okunus(sayi))

# sayi = int(input("Sayı: "))
# ucuncu = sayi // 100
# print(yuzler[ucuncu])

Hatayi bulmussun, % kullanmadigin ikinci ve ucuncu satirlarinda.

Bu mumkun degil. Daha dikkatli dene.

Sn @aib
result değişkenine atanan kod satırında sadece yüzleri çalıştırıyorum diğer onlar ve birler bölümlerini yoruma çeviriyorum. 750 değerini girdiğimde bana Yuzler listesindeki “Yediyüz” sonucunu döndürüyor. Sadece yüzleri iptal edip onlar ve birler kodlarını çalıştırdığımda zaten sorun yok 65 giriyorum Altmış Beş çıktısını alıyorum. Ben bana anlatmaya çalıştığınız şeyi anlayamadım kusura bakmayın.

birler = ["", "Bir", "İki", "Üç", "Dört", "Beş", "Altı", "Yedi", "Sekiz", "Dokuz"]
onlar = ["", "On", "Yirmi", "Otuz", "Kırk", "Elli", "Altmış", "Yetmiş", "Seksen", "Doksan"]
yuzler = ["", "Yüz", "İkiyüz", "Üçyüz", "Dörtyüz", "Beşyüz", "Altıyüz", "Yediyüz", "Sekizyüz", "Dokuzyüz"]


def okunus(sayi):
    birinci = sayi % 10
    ikinci = sayi // 10
    ucuncu = sayi // 100
    result = yuzler[ucuncu] # + " " + onlar[ikinci] + " " + birler[birinci]

    return result


sayi = int(input("Sayı: "))

print(okunus(sayi))

Fonksiyonda bir sorun var. Sözde kod şu şekilde olmalı:

1) "sayi" değişkenini 100' e böl. Bölümü "ucuncu" ye, kalanı tekrar "sayi" değişkenine ata.
2) "sayi" değişkenini 10'a böl. Bölümü "ikinci"ye, kalanı tekrar "sayi" değişkenine ata.
3) "sayi" değişkenini doğrudan "birinci" değişkenine ata.

Fonksiyonun ilk üç satırını bu algoritmayla değiştirirseniz problem çözülecektir.

Python betiği ise şu şekilde olacaktır:

birler = ["", "Bir", "İki", "Üç", "Dört", "Beş", "Altı", "Yedi", "Sekiz", "Dokuz"]

onlar = ["", "On", "Yirmi", "Otuz", "Kırk", "Elli", "Altmış", "Yetmiş", "Seksen", "Doksan"]

yuzler = ["", "Yüz", "İkiyüz", "Üçyüz", "Dörtyüz", "Beşyüz", "Altıyüz", "Yediyüz", "Sekizyüz", "Dokuzyüz"]

def okunus(sayi):
    
    #Yüzler basamağı.
    ucuncu = sayi // 100
    sayi = sayi % 100
   
    #Onlar basamağı.
    ikinci = sayi // 10
    sayi = sayi % 10    
   
    #Birler basamağı
    birinci = sayi

    result = yuzler[ucuncu]  + " " + onlar[ikinci] + " " + birler[birinci]

    return result

sayi = int(input("Sayı: "))

print(okunus(sayi))
1 Beğeni
birler = {"0":"", "1":"Bir", "2":"İki", "3":"Üç", "4":"Dört", "5":"Beş", "6":"Altı", "7":"Yedi", "8":"Sekiz", "9":"Dokuz"}
onlar = {"0":"", "1":"On", "2":"Yirmi", "3":"Otuz", "4":"Kırk", "5":"Elli", "6":"Altmış", "7":"Yetmiş", "8":"Seksen", "9":"Doksan"}
yuzler = {"0":"", "1":"Yüz", "2":"İkiyüz", "3":"Üçyüz", "4":"Dörtyüz", "5":"Beşyüz", "6":"Altıyüz", "7":"Yediyüz", "8":"Sekizyüz", "9":"Dokuzyüz"}

def okunus(sayi):
    sayi = str(sayi)
    if len(sayi) == 1: return f"{birler[sayi]}"
    elif len(sayi) == 2: return f"{onlar[sayi[0]]} {birler[sayi[1]]}"
    elif len(sayi) == 3: return f"{yuzler[sayi[0]]} {onlar[sayi[1]]} {birler[sayi[2]]}"

sayi = int(input("Sayı: "))
print(okunus(sayi))

Böyle yapmak en kısa ve kolayı. Rica ederim :slight_smile:

@Ayberk_Atalay Sözlük veri tipi ile çözmek bir sonraki hedefimdi. Teşekkür ederim.

@PRIME İlginiz ve yanıtınız için çok teşekkür ederim.

1 Beğeni