我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python实现数字小写转大写的示例详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python实现数字小写转大写的示例详解

前言

这绝对是个非常有趣的问题哈哈,但用python列表实现就变得比较烧脑,正常人不会非常较真这样的程序,我也只是闲来无事,如果代码还是有bug,那么我也没办法。

注:经过广泛搜索和仔细深究,似乎没有几套开源代码能100%满足要求

参考标准:大小写转换器_人民币大写在线转换工具

代码实现

首先将一个数字根据小数点,进行分割。建立字典和数据集(left_chinese, right_chinese),这里left_chinese不加元,是因为后面可以统一处理,避免庸人自扰。

def Digital_to_Chinese(digital):
    if not isinstance(digital, str):  # 首先将内容转换为浮点数
        str_digital = str(digital)
    else:
        str_digital = digital
    print("小写数字", digital)
    chinese = {'1': '壹', '2': '贰', '3': '叁',
               '4': '肆', '5': '伍', '6': '陆',
               '7': '柒', '8': '捌', '9': '玖', '0': '零'}
    left_chinese = ['', '拾', '佰', '仟', '万']  # 小数点左边
    right_chinese = ["角", "分"]  # 小数点右边
    left_Str, right_Str = "", ""  # 根据小数点将浮点数分成整数小数两部分
    if '.' in str_digital:
        left_Str, right_Str = str_digital.split('.')
    else:
        left_Str = str_digital  # 没有的话就直接都是整数部分
    leftStrArr = []  # 处理整数部分

将左边数字从高位向低位读取,再翻转——即从低向高。之后,把每个数字对应的权重附在数字后面(empty, 拾, 佰, 仟, 万),同样的思路也适用于右半块数字。

if left_Str:
        leftStrArr = [chinese[v] for v in left_Str]  # 使用列表推导式获取大写中文列表
        leftStrArr.reverse()  # 由于数字是从前到后读,所以从低位向高位转换需要倒置列表
        for i in range(0, len(leftStrArr)):
            if leftStrArr[i] != "零":  # 只要这一位不是0,就在后面赋值他对应的权重,如果为0则i自增1将其略过
                leftStrArr[i] += left_chinese[i]
        leftStrArr.reverse()
    rightStrArr = []  # 处理小数部分
    if right_Str:
        rightStrArr = [chinese[v] for v in right_Str]
        for i in range(0, len(rightStrArr)):
            if rightStrArr[i] != "零":
                rightStrArr[i] += right_chinese[i]  # 和前面一样的道理

之后,我们需要进行二次处理,首先刚刚那样的算法会多输出0,比如 2001 会被写成 两仟零零壹,针对这个问题我们可以直接去重处理,这里注意,101是不会被去除的,因为那是[壹佰,零,壹],所以不会被去重。

但这并不完美,因为还会有这样的问题:10 会被写成 壹拾零,解决方法是判断末尾字符是否为零,是则删去不是则跳过。

此外,由于正常的计费只到“分”,所以右半部分正常情况下不需要过多的处理,因此代码就写完了。

leftStrArr_temp = []
    for xleft in leftStrArr:
        if xleft not in leftStrArr_temp:  # 去重,防止出现 xx零零xx
            leftStrArr_temp.append(xleft)
    leftStrArr_temp.reverse()
    for temp in leftStrArr_temp:  # 去掉末尾的零
        if temp == "零":
            leftStrArr_temp.remove(temp)
        else:
            break
    leftStrArr_temp.reverse()
    print("------\n左", ''.join(leftStrArr_temp))
    rightStrArr_temp = []
    for xright in rightStrArr:
        if xright not in rightStrArr_temp:
            rightStrArr_temp.append(xright)
    print("右", ''.join(rightStrArr_temp))
    return ''.join(leftStrArr_temp) + "元" + ''.join(rightStrArr_temp)  # 将列表合并成一个字符串,作为结果返回

测试

# test = input("请输入测试用例:")
test_list = [1, 1.1, 11.01, 10.10, 10.01, 101.01, 2300.02, 34004.09]
for test in test_list:
    print("结果", Digital_to_Chinese(test), "\n------\n")

这个测试应该没有问题,整数部分的高位可以直接加在列表中,低位部分各位可以自行完善。结果如下:

小写数字左串右串结果
1壹元 
1.1壹角壹元壹角
11.01壹拾壹零壹分壹拾壹元零壹分
10.1壹拾壹角壹拾元壹角 
10.01壹拾零壹分壹拾元零壹分 
101.01壹佰零壹零壹分壹佰零壹元零壹分
2300.02贰仟叁佰零贰分贰仟叁佰元零贰分
34004.09叁万肆仟零肆零玖分叁万肆仟零肆元零玖分

补充

除了上面的方法,小编也为大家整理了一些其他简单的方法,需要的可以参考一下

小写数字转为大写

def lowertoupper(number, recursive_depth=0):
    str_number = str(number)
    if len(str_number) > 4:
        str_number = str_number[-4:]
    bits = "零 一 二 三 四 五 六 七 八 九".split(" ")
 
    units = " 十 百 千".split(" ")
    large_unit = ' 万 亿 万'.split(" ")  # 可扩展,以万为单位
    number_len = len(str_number)
    result = ""
 
    for i in range(number_len):
        result += bits[int(str_number[i])]
        if str_number[i] != "0":
            result += units[number_len - i - 1]
 
    # 去除连续的零
    while "零零" in result:
        result = result.replace("零零", "零")
    # 去除尾部的零
    if result[-1] == "零":
        result = result[:-1]
    # 调整10~20之间的数
    if result[:2] == "一十":
        result = result[1:]
    # 字符串连接上大单位
    result += large_unit[recursive_depth]
 
    # 判断是否递归
    if len(str(number)) > 4:
        recursive_depth += 1
        return lowertoupper(str(number)[:-4], recursive_depth) + result
    else:
        return result

阿拉伯数字的大小写转换

# 数据源
Upper0 = "零、壹、贰、叁、肆、伍、陆、柒、捌、玖"
Upper1 = Upper0.split('、')

# 封装函数
num_list = []
for number in range(10):
	num_list.append(number)
def Swap_func(lower,upper):
    swap = {}
    swap[lower] = upper
    return swap

m = map(Swap_func, num_list, Upper1)
info = list(m)
# [{0: '零'}, {1: '壹'}, {2: '贰'}, {3: '叁'}, {4: '肆'}, {5: '伍'}, {6: '陆'}, {7: '柒'}, {8: '捌'}, {9: '玖'}]
print("{0:-^74}".format("数字间用英文逗号间隔,输入结束后,按回车结束"))
print("{0:-^80}".format("若为单个数字,请以英文逗号隔开哦"))
Input0 = eval(input("请输入你需要转换的任意小写数字:"))
print()
print()
print(f'小写数字 {Input0} 对应的中文大写数字为: {[list(info[number].values()) for number in Input0]}')

print()
零,壹,贰,叁,肆,伍,陆,柒,捌,玖 = [i for i in range(10)]

print("{0:-^63}".format("大写数字间用英文逗号间隔,输入结束后,为方便您查询,请按回车结束鸭~"))
print("{0:-^80}".format("若为单个汉字,请以英文逗号隔开哦"))
print(f'提示:{"零、壹、贰、叁、肆、伍、陆、柒、捌、玖 (复制任意大写数字或手动输入)".replace("、",",")}')
Input1 = eval(input("请输入你需要转换的任意中文大写数字:"))
Upper_list = [零,壹,贰,叁,肆,伍,陆,柒,捌,玖]
print()
print()
print(f'大写数字 {[list(info[number].values()) for number in Input1]} 对应的小写数字为: {Input1}')
print()
print("{0:-^86}".format("欢迎您下次使用,再见~"))

到此这篇关于Python实现数字小写转大写的示例详解的文章就介绍到这了,更多相关Python数字小写转大写内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python实现数字小写转大写的示例详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python实现数字小写转大写的示例详解

这篇文章主要为大家详细介绍了如何利用Python实现数字小写转大写的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
2022-12-14

Python 字符串大小写转换的简单实例

①所有字母都转换为大写 # -*- coding:utf-8 -*- if __name__ == "__main__":a = 'hello, world!'print(a.upper())输出:HELLO, WORLD! ②所有字母都转
2022-06-04

python字符串大小写转换的函数有哪些

这篇文章主要介绍“python字符串大小写转换的函数有哪些”,在日常操作中,相信很多人在python字符串大小写转换的函数有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python字符串大小写转换的函数
2023-06-20

C#实现数字转换汉字的示例详解

这篇文章主要为大家详细介绍了如何利用C#实现数字转换汉字功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
2022-12-19

实现大小写字母转换的shell脚本分享

这篇文章主要讲解了“实现大小写字母转换的shell脚本分享”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“实现大小写字母转换的shell脚本分享”吧!代码如下:#!/bin/sh #edit
2023-06-09

php实现字母转大写的函数是什么

PHP字母转大写函数:strtoupper()PHP内置函数strtoupper()将字符串中的所有字母转换为大写,适用于任何类型字符串。其语法为strtoupper($string),参数为待转换字符串,返回一个包含全部大写字母的新字符串。该函数不修改原字符串,不区分大小写,也不适用于二进制数据。用途包括转换用户名、格式化输出、提取首字母、创建唯一标识符和文本转换。
php实现字母转大写的函数是什么
2024-04-25

php实现字母转大写的函数是什么

php实现字母转大写的函数有三种,分别是:1、strtoupper函数,用于把字符串转换为大写;2、ucfirst函数,用于把字符串中的首字符转换为大写;3、ucwords函数,用于把字符串中每个单词的首字符转换为大写。
2021-11-21

php实现字母转大写的函数是哪个

这篇文章主要讲解了“php实现字母转大写的函数是哪个”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php实现字母转大写的函数是哪个”吧!php实现字母转大写的函数有三种,分别是:1、strt
2023-06-25

PostgreSQL数据库字符串拼接、大小写转换以及substring详解

目录前言一、多个字符串如何连接,拼接?二、字符串大小写转换三、删除字符串两边的空格四、查找字符位置五、查找子字符串六、综合实例总结前言PostgreSQL数据库简称pg数据库。本文主要介绍使用pg数据库时,字符串的一些常用操作。例如:
2023-04-14

如何实现将字符串小写转大写并延时输出的批处理

这篇文章主要介绍了如何实现将字符串小写转大写并延时输出的批处理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。出题目的 1 掌握大、小写互换的技巧 2 掌握延时输出技巧 3 掌
2023-06-08

Java实现BP神经网络MNIST手写数字识别的示例详解

这篇文章主要为大家详细介绍了Java实现BP神经网络MNIST手写数字识别的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录