600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Python 阿拉伯数字转换为中文大写数字

Python 阿拉伯数字转换为中文大写数字

时间:2018-09-21 11:19:14

相关推荐

Python 阿拉伯数字转换为中文大写数字

题目

python练习的一个小实验, 题目如下图:

附阿拉伯数字对应的中文大写:

思路

1. 通过定义一个字典进行阿拉伯数字与大写中文的对比储存

2. 将用户的输入首先分割为整数与小数部分分别进行处理

3. 整数部分可以分割为以 4 位数字为一组的列表来进行转换处理,这样便于进行

(兆,亿,万,圆)。的单位处理

4. 首先将分割的 4 位数字一组的数据进行转化处理,便于对 (拾,佰,仟)的单

位进行处理(此部分应编写到一个函数之中,接受的参数为 4 位数的字符串,

返回转化好的字符串)

5. 整数部分可以看做多个 4 位数字一组的数据处理,通过遍历列表进行转化处理

(例如你已将 123456789 分割好为[‘1’,’2345’,’6789’],循环遍历这个列表, 用第

四点提到的函数进行转化,遍历转化时把【兆,亿,万,圆】的单位标识添加)

6. 通过这种方式进行转化你需要定义两个列表分别储存(兆,亿,万,圆)和

(拾,佰,仟)这些单位标识

7. 小数部分的处理通过分支判断情况进行转化即可。

代码

思路清晰了, 代码直接码上即可, 注意处理特殊条件和边界:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @File : num_to_chinese.py# @Author: meta# @Contact : metashen@# @Date : 20-3-28下午9:48# @Desc : 阿拉伯数字代表的金额, 转换为大写数字limit_len1 = 16 # 不超过一万兆limit_len2 = 2 # 小数位不超过两位dictionary = {'0': '零','1': '壹','2': '贰','3': '叁','4': '肆','5': '伍','6': '陆','7': '柒','8': '捌','9': '玖'}level1 = {1: '圆',2: '万',3: '亿',4: '兆'}level2 = {2: '拾',3: '佰',4: '仟'}level3 = {1: '角',2: '分'}def query():while 1:ans = str(input('请输入不超过一万兆的金额, 小数位不超过两位: '))if len(ans.split('.')[0]) <= limit_len1 \and len(ans.split('.')[1]) <= limit_len2:return ansdef process_integer(num_integer):pre = []length = len(num_integer)if length <= 4:pre.append(num_integer)else:extra = length % 4if extra != 0:pre.append(num_integer[0: extra])length = length - extrastart, end = extra, 4 + extraelse:start, end = 0, 4while length:pre.append(num_integer[start: end])start += 4end += 4length -= 4return predef per_conver(num):length = len(num)flag = True# Special# deal with '0000'if num == '0000':return ''# deal with '1000'if num[1:] == '000':return dictionary[num[0]] + level2[4]# Normalres, p = '', lengthfor i in range(0, length):# deal with prefix is '0'if (res == '' or res == dictionary[num[i]]) and num[i] == '0':# only one '0'if flag:res += dictionary[num[i]]flag = Falsep -= 1continue# deal with '1001'if i + 1 < length and num[i + 1] == '0' and num[i] == '0':p -= 1continue# deal with '1010' '1110'if i == length - 1 and num[i] == '0':continueres += dictionary[num[i]]if p > 1 and num[i] != '0':res += level2[p]p -= 1return resdef convert_integer(ans_int):res = ''p = len(ans_int)for i in ans_int:per_res = per_conver(i)res += per_resif p > 0 and per_res != '':res += level1[p]p -= 1return resdef convert_float(num_float):res = ''for i in range(0, len(num_float)):res += dictionary[num_float[i]]if (i + 1) <= 2:res += level3[i + 1]return resdef convert():number = query()res = ''if '.' in number:num_split = number.split('.')num_integer = num_split[0]num_float = num_split[1]ans_int = process_integer(num_integer)print(ans_int)# Convert integerres += convert_integer(ans_int)# Convert floatres += convert_float(num_float)else:ans_int = process_integer(number)res += convert_integer(ans_int)res += '整'print(res)if __name__ == '__main__':convert()

为了校验正确性, 附上数字金额转中文大写金额的在线工具:/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。