'''念数字. 给出一个字典. 在字典中标识出每个数字的发音.
包括相关符号. 然后由用户输入一个数字. 让程序读出相对应的发音
(不需要语音输出. 单纯的打印即可)'''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']#返回值的位数
defweiShu(num):
n= 1
# 取绝对值
num=abs(num)while num // 10 ** n !=0:
n+= 1
else:returnnwhile 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 inxiaoshu: # 取出小数部分的每一位
numXiaoshu.append(dic[i])#print(numXiaoshu)
if num.strip('-').isdigit(): # 先去掉负号统一处理
n=weiShu(int(num)) # 判断当前的数是多少位
s= ''ii= -1
# 遍历全部输出4位4位进行处理
for i inrange(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 innums:
jjj=len(num2) # 主要控制shi,bai,qianfor i innum2: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 '-' innum: # 处理负数的情况
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('你输入的数字有点大呀!请重新输入!')continuenums23=nums23[::-1] # 处理完之后读法是倒放的,取倒
nums23.append(' '.join(numXiaoshu)) # 添加小数部分的东西print(''.join(nums23).strip().replace(' ', ' ')) # 将全部都打印出来