欢迎来到Felix的博客

Do the right things! And talk is cheap,show me your code!

念数字解题

'''
念数字.  给出一个字典. 在字典中标识出每个数字的发音. 
包括相关符号. 然后由用户输入一个数字. 让程序读出相对应的发音
(不需要语音输出. 单纯的打印即可)
'''
dic = {
    '-': 'fu',
    '0': 'ling',
    '1': 'yi',
    '2': 'er',
    '3': 'san',
    '4': 'si',
    '5': 'wu',
    '6': 'liu',
    '7': 'qi',
    '8': 'ba',
    '9': 'jiu',
    '.': 'dian'
}

c = ['', 'shi ', 'bai ', 'qian ']


# 返回值的位数
def weiShu(num):
    n = 1
  # 取绝对值 num = abs(num) while num // 10 ** n != 0: n += 1 else: return n while 1: nums = [] nums23 = [] # 存放整数部分分割的字符串 lst = [] numXiaoshu=[] # 存放小数部分的分割字符串 num = input('请输入一个数:').strip() if '.' in num and len(num.split('.'))==2: # 确保只有一个小数点 num, xiaoshu = num.split('.') numXiaoshu.append(dic['.']) # 把小数点对应的dian加入 for i in xiaoshu: # 取出小数部分的每一位 numXiaoshu.append(dic[i]) # print(numXiaoshu) if num.strip('-').isdigit(): # 先去掉负号统一处理 n = weiShu(int(num)) # 判断当前的数是多少位 s = '' ii = -1
    # 遍历全部输出4位4位进行处理 for i in range(n): if i % 4 == 0: # 4位4位处理,大于4位加‘wan’,大于8位加‘yi’ if s != '': nums.append(s) s = '' s = num[ii] + s ii -= 1 # 从后往前数 else: nums.append(s) # 4位4位添加到列表 # 输出分割的东西 # print(nums) j = 1 for num2 in nums: jjj = len(num2) # 主要控制shi,bai,qian for i in num2: if i == '0': try: if lst[-1] != dic[i]: # 如果上一个也为0则不将当前的0插入多个0读成一个0 lst.append(dic[i]) except: lst.append(dic[i]) else:
            # 如果非零则添加,并添加shi,bai,qian lst.append(dic[i]) lst.append(c[jjj
- 1]) jjj = jjj - 1 if lst[-1] == 'ling': # 去掉末尾的零 lst.pop() final = ' '.join(lst).replace('yi shi', ' shi ') # 把yishi的读法改成shi nums23.append(final) # 添加到整数部分列表中 lst = [] else: print('输入有误,请重新输入!') continue if n == 1 and int(num) == 0: # 处理输入全都是0的情况 nums23 = ['ling'] l = len(nums23) # 判断有多少个4位4位的 if '-' in num: # 处理负数的情况 nums23.append(dic['-'] + ' ')
  # 处理wan,yi,zhao的添加
if l == 1: pass elif l == 2: nums23[1] += ' wan ' elif l == 3: # print(nums23) if nums23[1].strip() != '': nums23[1] += ' wan ' if nums23[2].strip() != '': nums23[2] += ' yi ' elif l == 4: if nums23[1].strip() != '': nums23[1] += ' wan ' if nums23[2].strip() != '': nums23[2] += ' yi ' if nums23[3].strip() != '': nums23[3] += ' zhao ' else: print('你输入的数字有点大呀!请重新输入!') continue nums23=nums23[::-1] # 处理完之后读法是倒放的,取倒 nums23.append(' '.join(numXiaoshu)) # 添加小数部分的东西 print(''.join(nums23).strip().replace(' ', ' ')) # 将全部都打印出来

 

posted @ 2018-09-10 23:23  寂静的天空  阅读(290)  评论(0)    收藏  举报
个人感悟: 一个人最好的镜子就是自己,你眼中的你和别人眼中的你,不是一回事。有人夸你,别信;有人骂你,别听。一根稻草,扔街上就是垃圾;捆上白菜就是白菜价;捆上大闸蟹就是大闸蟹的价。 一个人,不狂是没有出息的,但一直狂,肯定是没有出息的。雨打残花风卷流云,剑影刀光闪过后,你满脸冷酷的站在珠峰顶端,傲视苍生无比英武,此时我问你:你怎么下去? 改变自己就是改变自己的心态,该沉的时候沉下去,该浮的时候浮上来;不争名夺利,不投机取巧,不尔虞我诈;少说、多听、多行动。人每所谓穷通寿夭为命所系,岂不知造物之报施,全视人之自取。 座佑铭:每一个不曾起舞的日子,都是对生命的辜负。