'''
念数字. 给出一个字典. 在字典中标识出每个数字的发音.
包括相关符号. 然后由用户输入一个数字. 让程序读出相对应的发音
(不需要语音输出. 单纯的打印即可)
'''
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(' ', ' ')) # 将全部都打印出来