数字改中文小写(含思路,python)

目录

问题及思路

问题

思路

代码

导图

代码

问题及思路

问题

这是代码中主要问题,大家可以尝试自己解决,并用代码实现

思路

将数字以每四个字符划分一个数级,防止万和亿这两个数级单位重复输出。下面\数字\为一个数级

小写中文数字 = 小写中文数字 + 计数单位 + 数级

1.小写中文数字

  • 不是0输出小写中文
  • 数级上后面为0,不输出零:例如\150\2000\➤一百五十(零)万两千(零零零)
  • 数级开头或中间为0,结尾不为0,只输出一个零:例如\15\0002\➤十五万零(零零)

2.计数单位

  • 计数单位上的数字为0则不输出:例如\15\0200\➤十五万零(千)二百

3.数级

  • 数级上都为0不输出:例如\15\0000\2000\➤十二亿零(万)两千,万级4位都为0,不输出万

4.特殊

  • 开头是一十开头,一省去:例如\15\2000\➤(一)十五万两千
  • 中间后面的一十不省去:例如\15\0010\➤十五万零十一

代码

导图

代码

# 定义
# number是要转化的数字,为字符串
number = input("请输入数字")
# Chinese是要输出的数字,为字符串                                        
Chinese = ""
# Num是中文小写数字,0为空,自定义控制0的输出                                                       
Num = ("", "一", "二", "三", "四", "五", "六", "七", "八", "九") 
# NumUnit是计数单位,个位不读,为空    
NumUnit = ("", "十", "百", "千")
# Unit是数级,个不读                                    
Unit = ("", "万", "亿")
# bit是位数,表示该数字是第几位数                                             
bit = len(number)
# key判断当前数级是否有数据(四位是否都为0)                                                  
key = False                                                        

# 数据
# 从头开始遍历字符串number每一个数字
# numChart为数字字符串中单独一个数字字符
for numChart in number: 
    # 如果当前数字不是0                                           
    if numChart != '0':
        # 中文小写数字 + 计数单位
        # Num[int(numChart)] 将数字转为int类型作为索引转换成中文小写数字
        # NumUnit[(bit - 1) % 4] 将位数作为索引取计数单位
            # 因为元组索引是从0开始,而最小的计数单位为1位小数,所以bit - 1                                          
        Chinese += Num[int(numChart)] + NumUnit[(bit - 1) % 4]
        # 数字不是0,表示该数级有数据         
        if not key:                                                
            key = True  
    # 如果数字是0                                           
    else:
        # 多个0遍历到最后一个0,对最后一个0进行判断选择零的输出
        # bit % 4 != 1 确保该0不是数级中最后一位,最后一位0不读,同时防止字符串numberi索引越界
        # number[len(number) - bit + 1] != '0' 下一位数字不为0,确保了多个0遍历到最后一个0                                                          
        if (bit % 4 != 1) and (number[len(number) - bit + 1] != '0'):
            Chinese += "零"
    # 数级
    # 数字是数级中最后一位,且数级有数据(四位不全为0),输出数级
    if (bit % 4 == 1) and key:
        # Unit[bit // 4] 用当前数字在第几个数级为索引取数级
            # 因为数字每四位为一个数级,位数除4取整即为第几个数级,所以bit // 4
        Chinese += Unit[bit // 4]
        # key为false,对下一个数级是否有无数据进行判断
        key = False
    # 位数从高位到低位
    bit -= 1

# 输出
# 如果没有数据,长度为0,即为零
if len(Chinese) == 0:
    Chinese = "零"
# 如果字符串以一十开头,截取一
if (len(number) % 4 == 2) and (Chinese[0] == "一"):
    Chinese = Chinese[1:len(Chinese):1]
# 输出
print(Chinese)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值