Python实验室-实现阿拉伯数字的大小写转换-解法1

已知数字 0 至 9 的中文大写金额数字,分别是零、壹、贰、叁、肆、伍、陆、柒、捌、玖

请用代码实现:

  1. 构建数据容器,用于存储该对应关系。
  2. 分别获取小写数字 3、7、9 所对应的中文大写数字
  3. 分别获取大写数字 贰、柒、捌 所对应的小写数字。

题源:数字大小写转换:存储和调用对应关系
分析:

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

# 小写数字数据源
num_list = []
for number in range(10):
	num_list.append(number)
  • split('、') 方法将 Upper0 分割,封装到列表容器中(以备后期使用)
  • 这里首先小白新建了一个列表
  • 并引入了小写数字作为数据源
# 封装函数
def Swap_func(lower,upper):
    swap = {
     }
    swap[lower] = upper
    return swap
  • 定义了一个函数,名为Sawp_func,形参为 lower, upper
  • 该函数的功能就是:实现对字典进行键值对的添加,也是本代码实现的核心
m = map(Swap_func, num_list, Upper1)
  • 调用该函数,并使用 map() 内置函数,将结果传给变量 m
  • 这里将 num_list 位置参数传给 lowerUpper1 传给 upper ,实现多次对 swap 字典的键值对的添加,这也就是函数的功能之一:实现对代码的复用

Python 官方文档描述如下:

  • 返回一个将函数 func 应用于 iterable 中每一项并输出其结果的迭代器

  • 如果传入了额外的 iterable 参数,func 必须接受相同个数的实参并被应用于从所有可迭代对象中并行获取的项。

  • 当有多个可迭代对象时,最短的可迭代对象耗尽整个迭代就将结束(PS:这里小白理解为短板效应)

info = list(m)
print(info)
#运行结果:
[{
     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]}')
  • 这里小白使用了 format() 方法对其字符串进行文字排版
  • 简言之就是:'xx {0} xxx {1} xx'.format(a, b) , x 处原样输出 , 而 a , b 会替换 {} 中的 01 (也就是所说的格式化
  • Input0 = eval(input()input() :获取用户的输入信息,相当于C语言中的 scanf() 函数。eval() :用法就是将引号去掉,使引号的内容变成可操作的表达式。
  • print(f'') : 作用类似于 format 方法,{}格式输出 ,其余部分是原样输出

字符串方法 str.format(),Python 官方文档描述如下:

  • 执行字符串格式化操作。调用此方法的字符串可以包含字符串字面值或者以花括号 {} 括起来的替换域。每个替换域可以包含一个位置参数的数字索引,或者一个关键字参数的名称。返回的字符串副本中每个替换域都会被替换为对应参数的字符串值。

最关键的来了!!

[list(info[number].values()) for number in Input0]
  • 大家可能对这个不理解,这个其实就是 列表生成器,又称列表推导式列表生成式
  • 重要的格式如下:
  • [(关于 x 的表达式) for x in 迭代器]
,,,,,,,,,= [i for i in range(10)]

涉及到序列解包的相关知识
Python学习吧-序列解包和序列封包

  • 这里小白用了不太好的办法,逐个对汉字重新赋值,因此也证明了python 的强大之处在于支持中文。
  • 因此,只要用户输入汉字,对应的小写数字就出来了。

源代码如下:

# 数据源
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("欢迎您下次使用,再见~"))

运行效果:

请输入你需要转换的任意小写数字:3,7,9

运行结果1:

小写数字 (3, 7, 9) 对应的中文大写数字为: [['叁'], ['柒'], ['玖']]

继续输入:

请输入你需要转换的任意中文大写数字:贰,,捌
运行结果2
大写数字 [['贰'], ['柒'], ['捌']] 对应的小写数字为: (2, 7, 8)

----------欢迎您下次使用,再见~--------------
  • 好了,以上就是小白的代码,手工打字,属实不易,如有帮助,一键三连。
  • 编程的最大好处就是在于,对于一个问题有多个解法。如果您有更好的方法,请在评论区下留言吧!

你可能感兴趣的:(Python实验室,字符串,列表,python,正则表达式,java)