萌萌帮班里同学做了一个python的编程作业,正好回顾一下python基础知识,以下源码和思考过程,代码全部原创。
IDE:pycharm
python版本:python3.7
'''
实验目的:在银行的日常业务中,常常需要用到将阿拉伯数字转换为中文大写数字的功能。在这次实验,你将编写一个程序,将用户输入的阿拉伯数字代表的金额,转换为大写数字。
程序运行过程:
1. 提示用户输入金额的范围并接收用户输入的金额
2. 将用户输入的金额转换为中文大写并输出
3. 询问用户是否退出程序
实验思路:
1. 通过定义一个字典进行阿拉伯数字与大写中文的对比储存
2. 将用户的输入首先分割为整数与小数部分分别进行处理
3. 整数部分可以分割为以 4 位数字为一组的列表来进行转换处理,这样便于进行
(兆,亿,万,圆)。的单位处理
'''
dic_num=[{'1':'壹','2':'贰','3':'叁','4':'肆','5':'伍','6':'陆','7':'柒','8':'捌','9':'玖','0':'零'},'拾', '佰', '仟', '万']
figure=['圆','万','亿','兆']
#小数部分字符串
def data_num_split(input_num):
'''
整个金额分割函数
:return: 小数部分和整数部分
'''
j=0
if '.'not in input_num:
integer=input_num
decimals=''
else:
for i in input_num.split("."):
if j==0:
# print(i)
integer=i
j+=1
else:
# print(i)
decimals=i
return integer[::-1],decimals
def groupful_num():
num_group1 = []
num_group2 = []
count = 0
while True:
for i in integer:
count += 1
num_group1.append(i)
if count % 4 == 0:
# print(num_group1)
num_group2.append(num_group1)
# money_cn = func(num_group2) + '圆' + money_cn
num_group1 = []
else:
if num_group1 not in num_group2 and len(num_group1)!=0:
num_group2.append(num_group1)
# money_cn = func(num_group2) + '圆' + money_cn
break
else:
break
return num_group2
def integer_part(integer):
'''
整数部分
:return:
'''
# integer=integer[::-1]
if integer == '0':
return '零圆'
answer=''
count=0
for num_group in groupful_num():
answer=read_num(num_group)+figure[count]+answer
count+=1
# print(answer)
return answer
def read_num(b):
ns = ''
for x in range(1, len(b)):
num = dic_num[0][b[x]] # 转换大小写
word = num + (dic_num[x] if b[x] != '0' else '')
# 如果字符是0,添加一个''
ns = word + ns # 叠加
return ns + (dic_num[0][b[0]] if b[0] != '0' else '')
def decimals_part(decimals):
'''
小数部分
:return:
'''
new_deciamls = ''
for i in range(len(decimals)):
if i == 0:
new_deciamls += dic_num[0][decimals[i]]
new_deciamls += '角'
else:
new_deciamls += dic_num[0][decimals[i]]
new_deciamls += '分'
else:
new_deciamls += '整'
return new_deciamls
#主函数
i =1
while i==1:
input_num=input("请输入不超过一万兆的金额,小数部分不超过两位:")
integer = data_num_split(input_num)[0] # 整数部分字符串分割
decimals = data_num_split(input_num)[1]
while len (decimals)>=3:
break
else:
print(integer_part(integer), decimals_part(decimals))
if input("是否继续转换?")=='否':
i=0
print("谢谢使用!")
break
- 首先分割字符串,分为整数部分和小数部分
- 整数部分,最后出一个bug,整数部分如果整四位的话,四位一组函数会在最后添加一个空集(因为空集不存在于group_2中)所以判断条件添加了一个判断group_1是否为空
- 以小数点”.”为标志用split函数分割字符串为两部分,分别保存
- 小数部分判断位数不超过2位,可为空
- N个小组—:num_group1,存储四位数字(字符串格式),最后一组数字可能不够四位,也可能为空,空的数组不能存,不然会数据越界,因为空没有对应的字典
- 一个大组:num_group2,元素为四位数字的小组
- append函数在数组最后添加元素,
- 数组内容可更改,字符串内容不可更改,每次更改字符穿都是新建一个新的字符串,然后用字符串名字的指针指向新的字符串
- 整数部分调用grouoful_num和read_num
- 因为是从头向后读取,根据正常读数字习惯,将整数部分前后颠倒
- 然后以小组形式转换大小写,在字符串头部添加新的字符
- 直接在answer=new+answer就在头部添加了
- continue函数跳出当前循环,然后进入当前循环的下一次循环
- break函数跳出当前循环,进入当前循环语句后一句语句