将15位数字转换成人民币金额

直接上代码,每个步骤都有注释。难点在零的处理上。

# 用字典变量x来保存0~9,和中文大写

x = {0:'零', 1:'壹', 2:'贰', 3:'叁', 4:'肆', 5:'伍', 6:'陆', 7:'柒', 8:'捌', 9:'玖'}

# 用元组变量y保存人民币金额的各种单位

y = ("元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟")

# 用列表变量c来存储初步生成的结果

c=[]

# 用字符串变量d来保存最后的结果

d=""

# 接收键盘输入的阿拉伯数字以字符串形式存储在变量n中

n = input("请输入一个大于零不超过十五位的数字:")

while len(n)>15 or int(n)<=0:

    n = input("输入错误,请输入一个大于零不超过十五位的数字:")

# 将字符串n换成大写的数字金额

k = len(n)-1

for i in n:

    j = int(i)

    c.append(x[j])

    c.append(y[k])

    k = k-1

print(c)    # 测试用,程序检测完需删除

# 处理带有0的数字

# 先将c列表中的零都用x来替换,同时将零后的单位也用x替换;

# 但对元、万、亿这三个特殊单位不要替换。这三个单位是中文数字中的三个不同量级的基本单位,所以要保留。

k = len(c)-1

for i in range(k, 0, -2):

    if c[i-1]=='零':

        c[i-1]='x'

    if c[i] != '元' and c[i] != '万' and c[i] != '亿' and c[i-1] == 'x':      # 注意要满足前一位为0,即c[i-1] == 'x'

        c[i] = 'x'

# print(c)    # 测试用,程序检测完需删除

# 确定哪些x需恢复'零',哪些需删除

# 在元、万、亿这些单位左面如果连续出现‘x’则这些"x"不需要恢复为零,我们先将这些不需要恢复的"x"标记为"y"

for i in range(k, 0, -1):

    if (c[i] == "元" or c[i] == "万" or c[i] == "亿") and c[i-1] == "x" or c[i] == "y" and c[i-1] == "x":

        c[i-1] = 'y'

# print(c)

# 把需要的'零'恢复回来,即把位于最右侧的x恢复为"零"其余x保持不变。

k = len(c)-2

for i in range(k,0,-1):

    if c[i] == 'x' and c[i+1] != '零' and c[i+1] != 'x':

        c[i] = '零'

# print(c)

# 多显示一个万字: 当位数超过9位,而且万位左侧连续三个数字位均为0时出现这一问题

k = len(c)

if k>=18 and c[k-16]=='y' and c[k-12]=='y' and c[k-14]=='y':

    c[k-9] = 'x'

# 将c列表删除其中的'x'和'y',并转换为字符串格式输出。

for i in range(0, len(c)):

    if c[i] != 'x' and c[i] != 'y':

        d = d+c[i]

print(d)

你可能感兴趣的:(将15位数字转换成人民币金额)