Thursday, December 8, 2016

Python İle Sayıyı Yazıya Çevirme

Merhaba,

Bu yazıda python ile girilen bir sayının yazıya dönüştürülmesi ile ilgili hazırladığım programı açıklayacağım.

Program için Tkinter ile basit bir arayüz tasarladım. Programı hazırlarken internette yalnızca bazı forumlarda yapılan çalışmaları gördüm ve istediğim şekilde değildi yapılanlar. En iyi yapabilen milyonlara kadar çevirebiliyordu. Bu yüzden ihtiyaç duyulabileceğini düşünerek Türkçe sayılar için bu programı hazırladım.

Programın mantığı şu;
1 - Sayı 3 basamaktan fazla ise sayıyı önce 3'erli gruplara ayır ve yeni bir listeye ekle
2 - Listeyi ters çevir.
3 - Eğer sayı tek basamaklı ise doğrudan sayının yazı halini birler listesinden index numarasını kullanarak al.
4 - Sayı iki basamaklı ise onlar listesinden yazıyı al ve birler listesinden yazıyı al ve ekle.
5 - Sayı 3 basamaklı ise yüzler listesinden, onlar listesinden ve birler listesinden bir yazı al ve text değişkenine ata.
6 - Sayı 4 veya daha basamaklı ise önce 3-4-5. adımları her grup için uygula, büyükler listesinden bir yazı ekle.

Fonksiyon dışındaki kısımlar görsel arayüz için zaten.

Çok zor bir uygulama değil ama sorularınız olursa yanıtlayabilirim.

from Tkinter import *
birler = ["",u"bir", u"iki", u"üç", u"dört",u"beş",u"altı",u"yedi",u"sekiz",u"dokuz",u""]
onlar = ["",u"on",u"yirmi",u"otuz",u"kırk",u"elli",u"altmış",u"yetmiş",u"seksen",u"doksan",u""]
buyukler = [u"yüz", u"bin",u"milyon",u"milyar",u"trilyon", u"katrilyon", u"kentilyon",u"seksilyon",u"septilyon",u"oktilyon",
            u"nobilyon",u"desilyon"]
def convert():
    number = numberE.get()
    groups = []
    while len(number)>3:
        groups.append(number[-3:])
        number=number[:-3]
    groups.append(number)
    groups.reverse()
    #print groups
    text = ""
    a = len(groups)-1
    if len(groups)>=3 and int(groups[0])==1:
        text += "bir"
    for x in groups:
        if int(x) < 10:
            if len(groups)>1:
                if int(x)!=1:
                    text += birler[int(x)]
            else:
                text += birler[int(x)]
        elif int(x) < 100:
            if int(x) % 10 == 0:
                text += onlar[int(x[0])]
            else:
                text += onlar[int(x[0])] + " " + birler[int(x[1])]
        elif int(x) < 1000:
            if int(x) % 100 == 0:
                text += birler[int(x[0])]+ " " + buyukler[0]
            else:
                if int(x[0]) == 1:
                    text += buyukler[0] + " " + onlar[int(x[1])] + " " + birler[int(x[2])]
                else:
                    text += birler[int(x[0])]+ " " + buyukler[0] + " " + onlar[int(x[1])] + " " + birler[int(x[2])]
        if a >= 1:
                text += " " + buyukler[a] + " "
        a = a - 1
    t["state"]="normal"
    t.delete(1.0, END)
    t.insert(END, text.strip())
def clear():
    t["state"]="normal"
    t.delete(1.0, END)
root = Tk()
root.geometry("550x300+100+100")
root.title("Convert Number to Word")
l = Label(root, text="Please enter a number")
l.grid(row=0, column=0, columnspan=3)
numberE = Entry(root, width=36)
numberE.grid(row=1,column=0, columnspan=3, pady=5, ipady=5)
b = Button(root, text="Convert", command=convert, width=20)
b.grid(row=2, column=0,pady=5,ipady=5)
b2 = Button(root, text="Clear", command=clear, width=20)
b2.grid(row=2, column=1,pady=5,ipady=5)
b3 = Button(root, text="Quit", command=root.destroy, width=20)
b3.grid(row=2, column=2,pady=5,ipady=5)
t = Text(root, height=8, width=60, fg="white", bg="red", font=16, state="disabled")
t.grid(row=3, column=0, columnspan=3)
l2 = Label(root, text=u"Created by Halil İbrahim MALİ", font=16)
l2.grid(row=4, column=0, columnspan=3,pady=5)
mainloop()

1 comment:

  1. Çok teşekkür ederim saatlerimi kurtardınız. Allah kabul etsin

    ReplyDelete