小技巧2:Python 实现阿拉伯数字转化为中文数字

news2024/12/26 22:44:25

大家好,我是Kamen Black君,今天给大家介绍一个小技巧:如何用Python 代码实现阿拉伯数字转化为中文数字。

都说光阴似箭,日月如梭,2022年的车轮很快也要驶向了终点。不知道大家在平常的生活中,有没有碰到过一些关于数字转化的问题,比如上编程课时经常能遇到的二进制数转化为十进制、八进制或者十六进制;还有银行转账时能够碰到的中文大写数字。

print("祝大家每天快乐,love and peace!")

而值此圣诞佳节,我就贡献一下个人的绵薄之力,向大家展示一下我个人研究的简易的通过Python实现的将阿拉伯数字转化为中文数字的方法,搭建一条东西方的桥梁。

这个方法主要通过Python代码进行实现,其中代码主要由三大部分组成:

1、数字字典;

2、计算数字最大位的函数;

3、数字转换主函数。

一、首先是数字字典:

这个部分主要涉及到两个字典的编写:个位数字典与位称字典。

个位数字典自然是将0到9的阿拉伯数字与“零”到“九”的中文数字进行配对;而位称字典则是从1到4对应“十”、“百”、“千”、“万”这4个位数称谓,简称为“位称”。

numdict = {1:"一",2:"二",3:"三",4:"四",5:"五",6:"六",7:"七",8:"八",9:"九",0:"零"} #个位数的字典
digitdict = {1:"十",2:"百",3:"千",4:"万"} #位称的字典

二、其次是计算数字最大位的函数:

这个部分是通过函数计算出阿拉伯数字的最大位,也就是确定中文数字的最大位,以便确定中文数字的命名规则。

def maxdigit(number,count):
    num = number//10 #整除是//
    if num != 0:
        return maxdigit(num,count+1) #加上return才能进行递归
    else:
        digit_num = number%10 #digit_num是最高位上的数字
        return count,digit_num #count记录最高位

 三、最后是数字转换主函数:

这个部分结合第一、第二部分与各位数字以及中文数字的命名规则,便可以得到阿拉伯数字对应的中文数字。

def No2Cn(number):
    max_digit,digit_num = maxdigit(number,0)

    temp = number
    num_list = [] #储存各位数字(最高位的数字也可以通过num_list[-1]得到,最高位也可以通过num_list的长度获得
    while temp > 0:
        position = temp%10
        temp //= 10 #整除是//
        num_list.append(position)

    chinese = ""
    if max_digit == 0: #个位数
        chinese = numdict[number]
    elif max_digit == 1: #十位数
        if digit_num == 1: #若十位上是1,则称为“十几”,而一般不称为“一十几”(与超过2位的数分开讨论的原因)
            chinese = "十"+numdict[num_list[0]]
        else:
            chinese = numdict[num_list[-1]]+"十"+numdict[num_list[0]]
    elif max_digit > 1: #超过2位的数
        while max_digit > 0:
            if num_list[-1] != 0: #若当前位上数字不为0,则加上位称
                chinese += numdict[num_list[-1]]+digitdict[max_digit]
                max_digit -= 1
                num_list.pop(-1)
            else: #若当前位上数字为0,则不加上位称
                chinese += numdict[num_list[-1]]
                max_digit -= 1
                num_list.pop(-1)
        chinese += numdict[num_list[-1]]
        
    if chinese.endswith("零"): #个位数如果为0,不读出
        chinese = chinese[:-1]
    if chinese.count("零") > 1: #中文数字中最多只有1个零
        count_0 = chinese.count("零")
        chinese = chinese.replace("零","",count_0-1)
    return chinese

总结一下,以上简单介绍了一下我个人通过Python代码实现阿拉伯数字向中文数字转化的实现思路,虽然目前只能最多实现万位数的转化,但是中文数字就是4位数为一阶的,即万到亿,亿到兆,兆到京的转化,是以10的4次方为进制的。鉴于我的方法可以实现连续4位数的转化,所以可以将我的这个方法作为基础, 延伸到更高位数的转化

下面给出数字转化的完整代码:

numdict = {1:"一",2:"二",3:"三",4:"四",5:"五",6:"六",7:"七",8:"八",9:"九",0:"零"} #个位数的字典
digitdict = {1:"十",2:"百",3:"千",4:"万"} #位称的字典


def maxdigit(number,count):
    num = number//10 #整除是//
    if num != 0:
        return maxdigit(num,count+1) #加上return才能进行递归
    else:
        digit_num = number%10 #digit_num是最高位上的数字
        return count,digit_num #count记录最高位

def No2Cn(number):
    max_digit,digit_num = maxdigit(number,0)

    temp = number
    num_list = [] #储存各位数字(最高位的数字也可以通过num_list[-1]得到
    while temp > 0:
        position = temp%10
        temp //= 10 #整除是//
        num_list.append(position)

    chinese = ""
    if max_digit == 0: #个位数
        chinese = numdict[number]
    elif max_digit == 1: #十位数
        if digit_num == 1: #若十位上是1,则称为“十几”,而一般不称为“一十几”(与超过2位的数分开讨论的原因)
            chinese = "十"+numdict[num_list[0]]
        else:
            chinese = numdict[num_list[-1]]+"十"+numdict[num_list[0]]
    elif max_digit > 1: #超过2位的数
        while max_digit > 0:
            if num_list[-1] != 0: #若当前位上数字不为0,则加上位称
                chinese += numdict[num_list[-1]]+digitdict[max_digit]
                max_digit -= 1
                num_list.pop(-1)
            else: #若当前位上数字为0,则不加上位称
                chinese += numdict[num_list[-1]]
                max_digit -= 1
                num_list.pop(-1)
        chinese += numdict[num_list[-1]]
        
    if chinese.endswith("零"): #个位数如果为0,不读出
        chinese = chinese[:-1]
    if chinese.count("零") > 1: #中文数字中最多只有1个零
        count_0 = chinese.count("零")
        chinese = chinese.replace("零","",count_0-1)
    return chinese

好了以上就是所有的内容,希望大家多多关注点赞收藏,这对我有很大的帮助。谢谢大家了!

好了,这里是Kamen Black君。祝国康家安,大家下次再见喽!!!溜溜球~~

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/113524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】Beta分布详解

投硬币,硬币是正还是反,这属于两点分布的问题。 疯狂投硬币,正面出现的次数,服从二项分布:【Python】从二项分布到泊松分布 二项分布中,若特定时间内的伯努利试验次数趋于无穷大,那么在某一时…

【Linux】进程控制(进程创建、进程终止、进程等待、进程替换)

文章目录一、进程创建1.1 认识系统调用 fork1.2 理解 fork 的返回值1.3 写时拷贝策略二、进程终止2.1 main 函数的返回值2.2 进程退出的几种情况(🌟)2.3 进程退出码2.4 终止正常进程:return、exit、_exit ⭐2.5 站在 OS 角度:理解进程终止三、…

RV1126笔记二十:吸烟行为检测及部署<七>

若该文为原创文章,转载请注明原文出处。 部署到RV1126,Demo测试 一、介绍 通过训练转换后,得到了RKNN模型,接下来使用rknn_model_zoo里自带的C demo来测试模型是不是可以在RV1126上运行。 C demo直接编译是编译不过的,需要自己移植. 根据C demo提供的README,可以看出…

7段数码管和打印机接口

目录 七段发光二级管显示器接口(重点) 打印机适配器(重点) 例题 补充两个芯片(了解) 数据输出寄存器 数据输入三态缓冲器 七段发光二级管显示器接口(重点) 灯泡的题最难就是7段数码管。重点…

【Web开发】Python实现Web服务器(Ubuntu下调试Flask)

🍺基于Python的Web服务器系列相关文章编写如下🍺: 🎈【Web开发】Python实现Web服务器(Flask快速入门)🎈🎈【Web开发】Python实现Web服务器(Flask案例测试)&a…

工厂卖家如何借助TikTok突围?

众所周知,TikTok已然成为全球最受欢迎的社交媒体之一,拥有巨大的流量池,对于跨境电商卖家来说,TikTok也是最大的站外流量来源。作为月活跃用户接近16亿的应用程序,TikTok的发展速度让很多社交媒体平台望尘莫及&#xf…

node.js+uni计算机毕设项目基于微信小程序寸金校园租车平台(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

rabbitmq基础6——交换器和队列web监控基础运维、备份交换机、消息确认机制、消息状态查看

文章目录一、交换器和队列的使用1.1 web监控创建交换器1.1.1 交换器参数1.1.2 备份交换器1.1.2.1 工作原理1.1.2.2 弊端情形1.2 web监控创建队列1.2.1 队列参数1.2.1.1 通用参数1.2.1.2 其他参数1.2.1.2.1 所有队列1.2.1.2.2 主队列1.2.1.2.3 仲裁队列1.2.1.2.4 流队列1.3 web监…

从原理和源码梳理Springboot FatJar 的机制

一、概述 SpringBoot FatJar 的设计,打破了标准 jar 的结构,在 jar 包内携带了其所依赖的 jar 包,通过 jar 中的 main 方法创建自己的类加载器,来识别加载运行其不规范的目录下的代码和依赖。 二、标准的 jar 包结构 打开 Java…

用html实现一个静态登陆页面-可根据需求更改样式

一、创建html文件,vscode下载相关插件 我们先选择一个文件夹创建login.html,.之前的文件命无所谓,.之后就必须为html或者htm。 在编辑改文件输入!且出现提示后按回车或按tab快捷生成基础代码。 然后我们下载一个可以方便我们开发的插件。 …

【计算机网络课程设计】TCP协议包自动生成工具【蒙混过关版】

文章目录引言设计要求分工安排文献查阅总体设计流程具体设计内容🌕博客x主页:己不由心王道长🌕! 🌎文章说明:TCP协议包自动生成工具🌎 ✅系列专栏:计算机网络 🌴本篇内容&#xff1a…

Linux系统基础——系统调用

Linux系统调用 特此说明: 刘超的趣谈linux操作系统是比较重要的参考资料,本文大部分内容和所有图片来源于这个专栏。 1 相关概念 程序vs进程vs命令: Linux系统上所有的操作由进程完成,进程的运行是动态的,在此之前是一个静态的程序。用户用一…

2年过去了,有谁还记得曾想取代Node.js的他?

大家好,我卡颂。 22年11月14日,Deno发布了v1.28,距离他第一个稳定版本v1.0.0发布(2020年5月13日)已过去2年。 作为Node.js的竞争者,Deno似乎并没有达到取代前者的目标。 甚至,他在前端社区的…

离散数学数理逻辑部分【1】

前言 本文创作的起因是,经历了离散数学的学习,深感学习离散之艰辛。所以产生了写一些内容帮助大家期末复习。虽然在csdn发表本文,有些不太合适,但是还是相信本文的质量和内容,可以给正在学习离散数学的大学生提供一些…

【数据结构】—— 队列(有序队列及环形队列的数组实现)

目录 队列的一个使用场景 什么是队列? 数组模拟队列 实现思路: 编写一个ArrayQueue类的代码实现过程 判断队列是否满和空 入队出队 显示队列数据 问题 用数组模拟队列你会发现使用一次之后就不能使用了 ,没有达到复用的效果。 数组…

yolov5s融合SPD-Conv用于提升小目标和低分辨率图像检测性能实践五子棋检测识别

今天刚发表的一篇论文提出来了针对小目标和低分辨率图像检测性能提升的技术SPD-Conv,感觉还是挺有意义的,今天主要是基于这项技术融合进yolov5s模型中来开发对应的目标检测模型,实现五子棋的检测,本身五子棋就是比较密集的小目标检…

RV1126笔记十五:吸烟行为检测及部署<二>

若该文为原创文章,转载请注明原文出处。 PC下yolov5环境搭建 我使用的训练环境是Windows10+MiniConda 接下来记录搭建全过程 备注:条件允许就使用ubuntu物理机,最好要有显卡,训练有显卡速度会快很多,没有显卡,训练300轮,亲测大概40小时,不值得。 一、miniconda 安装…

Linux常用操作(上)

目录 快捷键 设置别名 通配符 重定向 进阶查找 打包压缩 压缩(gz) 压缩(zip) 快捷键 设置别名 通配符 重定向 进阶查找 打包压缩 压缩(gz) touch {0..10}.txt tar -cvf my.tar [0-10].txt tar -…

2022圣诞代码合集(圣诞树+圣诞老人)

文章目录前言使用方法圣诞树圣诞老人前言 圣诞节里的喜悦,飘扬万里;圣诞树上的星星,璀璨耀眼;圣诞星空绽放的烟花,迎来吉祥;圣诞钟声奏响的旋律,传递欢乐;圣诞老人送给你的礼物&…

实现安卓PWM-LED设备驱动:不写一行代码

文章目录一、前言二、系列文章三、准备工作3.1 查找PWM引脚3.2 原理图:确认引脚位置3.3 PWM Controller四、查阅PWM bindings五、编写设备树节点5.1 实现节点:pwm-leds5.2 测试命令六、后语一、前言 在完成了基于GPIO的LED设备驱动的文章后,…