Python 阿拉伯数字转换为中文大写数字
生活随笔
收集整理的這篇文章主要介紹了
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@qq.com # @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()為了校驗正確性, 附上數字金額轉中文大寫金額的在線工具:??https://szjrzzwdxje.51240.com/
總結
以上是生活随笔為你收集整理的Python 阿拉伯数字转换为中文大写数字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博文视点卓越书单丨Python技术成长加
- 下一篇: 域名IP段批量生成器源码