期中模拟测试第一题思路,欢迎大家一起讨论

题目:
已知五位以内(包含五位,后同)数字的中文读法规则如下:
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))

欢迎大家一起来讨论,将代码优化 ๑乛◡乛๑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值