题目:
已知五位以内(包含五位,后同)数字的中文读法规则如下:
1)若数字中没有0,则从左到右把每一位完整读出来,如12345读作“一万二千三百四十五”;(“一”任何时候都不省略)
2)数字末尾的0(不管几个0)均不读,如2300读作“二千三百”(最后两个0省去不读);
3)中间连续出现的0(不管几个0)均读作“零”,如10001读作“一万零一”(中间3个0只读一次)。 补全函数chineseNumber(x),该函数的功能是按上述规则对五位以内数字进行转换。
说明如下:
1)参数x的类型是整型(int),且1≤x≤99999;
2)返回值y为字符串(str),表示整数x对应的中文读法,如x为10001时,y为’一万零一’;
3)本题可能用到列表和字符串相关操作,可参考实验教材第63、64、106、107页的表;另外,replace函数可以替换字符串的子串,如s=s.replace(‘abc’, ‘x’)是将字符串中的’abc’替换为’x’,如s为’abcdefg’,则替换后变为’xdefg’。
本人代码:
def chineseNumber(x):
###########请在此行之后编写程序###########
N = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'] # 存储大写数字
W = ['', '十', '百', '千', '万'] # 存储计数单位
a = str(x) # 将x由数字变成字符串,便于单独取出某一位数字
l = len(a) # 得到x的位数
y = ''
for i in range(l): # 从高位开始转换
y = y + N[int(a[i])] # a[i]为当前位的数值的字符形式
# 通过int()将其变为数字并在N中查找汉字
if a[i] != '0': # 当前位不为0,有计数单位
y = y + W[l - i - 1] # W[l-i-1]为当前计数单位,将其接入字符串
y = y.replace('零零零', '零') # 去除连续的'零'
y = y.replace('零零', '零') # 去除连续的'零'
if y[-1] == '零': #当末尾为0时,不论有多少,都会在之前去'零'的操作后变为一个'零'
y = y[:-1] #此时将末尾去掉一个'零'即可
return y # 此句可根据需要修改或删除
###########请在此行之前编写程序###########
x = int(input())
y = chineseNumber(x)
print('%d -> %s' % (x, y))
欢迎大家一起来讨论,将代码优化 ๑乛◡乛๑