python自学做题记录之大写人民币

题目描述:
银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序。

在中文大写方式中,0到10以及100、1000、10000被依次表示为: 零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万

以下的例子示范了阿拉伯数字到人民币大写的转换规则:

1 壹圆

11 壹拾壹圆

111 壹佰壹拾壹圆

101 壹佰零壹圆

-1000 负壹仟圆

1234567 壹佰贰拾叁万肆仟伍佰陆拾柒圆

现在给你一个整数a(|a|<100000000), 请你打印出人民币大写表示.

例如:a=1

则输出:壹圆

示例:
输入:a = 0

输出:零圆
这题写到崩溃,这个网站的oj简直要气死人,之前用函数提交,显示a在赋值前已经被引用错误(指的是num=a)这步,后面干脆直接去掉函数
这题大致思路是先把a的值装进trans中,因为不知道a有多少位,但一定是小于八位数(a的绝对值小于1亿),然后加上单位,再去掉最前面所有的0,再去掉中间连续的0,在一些特殊位置在进行细处理

lst1=['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
lst2=['仟', '佰', '拾', '万', '仟', '佰', '拾', '圆']
trans=['零', '零', '零', '零', '零', '零', '零', '零']
num=a
num1=7 
#处理负数问题
if num < 0:
    result = "负"
    num = -num
    a = num
else:
    a = num
    result = ""
#将a的值弄进trans里面并且加上对应的单位    
while a!=0:
    trans[num1]=lst1[a%10]
    num1-=1
    a=a//10   
for i in range(0,8):
    if trans[i]!='零':
        trans[i]=f'{trans[i]}{lst2[i]}'
#在特殊位置进行细处理
if trans[3]=='零' and num>10000:#注意a要大于1万
    trans[3]='万'
if trans[7]=='零':
    trans[7]='圆'
#去除前面多余的零    
while '零' in trans[0]:
    trans.pop(0)
#去掉连续的0    
for key, value in enumerate(trans):
    if value[0] != '零':
        result += value
    else:
        if value[0] != trans[key-1][0]:
            result += '零'
#注意零万和零圆的情况,例如壹佰零万圆,壹仟零圆这种类型的情况    
result=result.replace('零万','万')
result=result.replace('零圆','圆')
#a=0时单列    
if num == 0:
    result = "零圆"
print(result) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值