Daha önce sayılarıın okunuşunu veren programı geliştirmemde yardımcı olmuştunuz.Şimdi de tam tersini veren programı yapmayı denedim 1 milyona kadar sorunu hallettiğimi düşünüyorum.
İncelermisiniz devamı nasıl getirilebilir nasıl geliştirilebilir?
Sorunlarımdan biri sayılar arasında boşluk kullanmak zorunda kaldım(bunu belki biraz düşününce düzeltebilirim)
Yani Şöyle bir girdi vermek zorundayım (“iki yüz yirmi üç bin dört yüz altı”)
İkinci sorunum 1 milyona kadar kısıtlı olması
def foo(yazılış:str):
sözlük={"bir":"1*","iki":"2*","üç":"3*","dört":"4*","beş":"5*","altı":"6*","yedi":"7*","sekiz":"8*","dokuz":"9*",
"on":"10+","yirmi":"20+","otuz":"30+","kırk":"40+","elli":"50+","altmış":"60+","yetmiş":"70+","seksen":"80+","doksan":"90+","yüz":"100+","bin":"1000+"}
liste=[]
basamaklar=yazılış.split('bin')
for j in basamaklar:
sayı=''
kullan=j.split()
for i in kullan:
if i in sözlük:
sayı +=sözlük[i]
if sayı!='':
sayı=sayı.rstrip('*')
if '+' in sayı:
sayı=sayı.rstrip('+')
liste.append(sayı)
if liste[0]=='' and liste[1]=='':
return 1000
elif liste[0]=='':
liste[0]='1'
if len(liste)>1 and len(liste[0]) >0 and liste[1]=='':
liste[1]='000'
sonuç=[eval(i) for i in liste]
if len(sonuç)>1 and len(str(sonuç[1]))==1:
sonuç[1]='00'+str(sonuç[1])
if len(sonuç)>1 and len(str(sonuç[1]))==2:
sonuç[1]='0'+str(sonuç[1])
istenen=''
for i in sonuç:
istenen+=str(i)
return int(istenen)
print(foo('dokuz')==9)
print(foo('yüz dört bin dört')==104004)
print(foo('iki yüz doksan altı')==296)
print(foo( 'bin kırk iki')==1042)
print(foo('on iki bin iki yüz')==12200)
print(foo('kırk yedi')==47)
print(foo('yüz sekiz')==108)