Python实验室-实现阿拉伯数字的大小写转换-解法1
已知数字 0 至 9 的中文大写金额数字,分别是零、壹、贰、叁、肆、伍、陆、柒、捌、玖请用代码实现:构建数据容器,用于存储该对应关系。分别获取小写数字 3、7、9 所对应的中文大写数字分别获取大写数字 贰、柒、捌 所对应的小写数字。题源:????数字大小写转换:存储和调用对应关系分析:# 大写数字数据源Upper0 = "零、壹、贰、叁、肆、伍、陆、柒、捌、玖"Upper1 = Upper0.sp
·
已知数字 0 至 9 的中文大写金额数字,分别是零、壹、贰、叁、肆、伍、陆、柒、捌、玖
请用代码实现:
- 构建数据容器,用于存储该对应关系。
- 分别获取小写数字 3、7、9 所对应的中文大写数字
- 分别获取大写数字 贰、柒、捌 所对应的小写数字。
题源:👉数字大小写转换:存储和调用对应关系
分析:
# 大写数字数据源
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
位置参数传给lower
,Upper1
传给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
会替换{}
中的0
和1
(也就是所说的格式化) 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)
----------欢迎您下次使用,再见~--------------
- 好了,以上就是小白的代码,手工打字,属实不易,如有帮助,一键三连。
- 编程的最大好处就是在于,对于一个问题有多个解法。如果您有更好的方法,请在评论区下留言吧!
更多推荐
已为社区贡献1条内容
所有评论(0)