一道绕晕人的题

3. 念数字.  给出一个字典. 在字典中标识出每个数字的发音. 包括相关符号.
然后由用户输入一个数字. 让程序读出相对应的发音(不需要语音输出. 单纯的打印即可)
做这道题的时候还是偷了些懒,比如就忽略了小数和负数,反正难点不在这.
思路是:
  以每四位数为单位读取,每四位之间加个万,每八位之间加个亿(你跟我提兆?告辞),然后除去不符合读法的零
  另外还有个除⑩取余法写起来应该更简单,下次有空写一遍,毕竟方法一的代码太不优雅了,还有个输入数字必须是4的整数倍的bug也懒得去改了
dic = {
    '-':'fu',
    '0':'ling',
    '1':'yi',
    '2':'er',
    '3':'san',
    '4':'si',
    '5':'wu',
    '6':'liu',
    '7':'qi',
    '8':'ba',
    '9':'jiu',
    '.':'dian',
    '' : '',
    '*':'shi',
    '**':'bai',
    '***':'qian',
    '****':'wan',
}
num = input('请输入一个数字')

duyin = []
n = 0
flag = 0
k = len(num) // 4
for index in range(k,0,-1):
    lst = []
    lst.extend(num[(index-1)*4:index*4])
    for i in range(len(lst)):
        n = lst.pop()
        if n != '0':
            duyin.append(dic[n]+dic['*' * i])
        else:
                duyin.append('ling')
for i in range(0,len(num),4):
    if i % 4 == 0 and i != 0:
        if i % 8 == 0:
            if duyin[i] == 'ling':
                duyin[i] = 'yi'
            else:
                duyin[i] += 'yi'
        else:
            if duyin[i] == 'ling':
                duyin[i] = 'wan'
            else:
                duyin[i] += 'wan'
lst_del =[]
duyin = list(reversed(duyin))
for i in range(len(duyin),0,-1):
    if duyin[i-1] == 'wan' or duyin[i-1] == 'yi':
        if i > 1 and duyin[i-2] == 'ling':
            lst_del.append(i-2)
            if i > 2 and duyin[i-3] == 'ling':
                lst_del.append(i-3)
                if i > 3 and duyin[i-4] == 'ling':
                    lst_del.append(i-4)
    if i > 1 and duyin[i-1] == duyin[i-2] :
        lst_del.append(i-1)
        if len(lst_del) > 1 and lst_del[-1] >lst_del[-2]:
            lst_del.pop()
for i in lst_del:
    duyin.pop(i)
if duyin[-1] == 'ling':duyin.pop()
print(duyin)

猜你喜欢

转载自www.cnblogs.com/delmar/p/9854358.html