将阿拉伯数字转换为中文大写数字 —— pyhton实现
生活随笔
收集整理的這篇文章主要介紹了
将阿拉伯数字转换为中文大写数字 —— pyhton实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
將阿拉伯數字轉換為中文大寫數字 —— pyhton實現
在銀行的日常業務中,常常需要用到將阿拉伯數字轉換為中文大寫數字的
功能。這次實驗將編寫一個程序,將用戶輸入的阿拉伯數字代表的金額,轉換為大寫數字。
程序運行過程:
代碼演示
import re # 導入正則表達式模塊# 不超過 1 0000 0000 0000 0000 && 小數不超過2位 dict_ref = {'1': "壹", '2': "貳", '3': "叁", '4': "肆", '5': "伍", '6': "陸", '7': "柒", '8': "捌", '9': "玖", '0': "零"} # 定義字典 list_ref = ['圓', '萬', '億', '兆'] # 定義一個列表def four_split(number): # 拆分函數,將整數字符串拆分成[億,萬,仟]的listremainder = len(number) % 4 # 對4取余number_split = [] # 定義一個空列表存放拆分后的結果remaining_numbers_length = len(number) - 1 # 把數字的長度-1后賦給remaining_numbers_lengthif remainder > 0: # 如果余數大于0number_split.append(number[0:remainder]) # 先把余數個數字拆分為一組k = remainder # 把余數賦給kwhile k <= remaining_numbers_length: # 遍歷余下的數字number_split.append(number[k:k + 4]) # 在已拆分的余數個數字后面按4位拆分k += 4 # 每拆分一次,k值加上4return number_split # 以列表形式返回拆分后的結果def exchange(data): # 在四位以下的數字切片中插入單位string = ['拾', '佰', '仟'] # 定義儲存['拾', '佰', '仟']這些單位標識的列表words = '' # 定義字符串length = len(data) # 獲取要轉換的數字長度for e in range(length): # 遍歷數字words += dict_ref[data[e]] # 全部轉換為大寫數字data_list = list(words) # 把轉換后的數字以列表形式返回給data_listfor x in range(length - 1): # 遍歷數字data_list.insert(-(2 * x + 1), string[x]) # 把['拾', '佰', '仟']這些單位插入列表中data = ''.join(data_list) # 轉換為大寫數字后連接到data字符串if length == 1: # 如果數字長度為1data = ''.join(data_list) # 轉換為大寫數字后連接到data字符串for y in ['零仟', '零佰', '零拾', '零零零', '零零']: # 下面開始查找并處理含有['零仟', '零佰', '零拾', '零零零', '零零']的情況k = data.find(y) # 如果data包含y字符串返回開始的索引值,否則返回-1。if k != -1: # 如果data中含有y字符串data = re.sub(y, '零', data) # data里面所有的y被零替換if data[-1] == '零': # 如果data的末尾是“零”data = data[:-1] # 把后面的零去掉else: # 如果data的末尾不是“零”data = data # 不變return data # 返回處理后的值(字符串)flag = 1 # 初始化flag為1 while flag: # 進入循環input_number = input("請輸入不超過一萬兆的金額,小數不超過2位:") # 輸入數字if input_number.replace(".", '').isdigit() and input_number == input_number.strip("."): # 不能輸入負數,小數點可以有0或1個,如果有小數點,小數點的前后要有數字if input_number.count(".") == 1: # 如果輸入的數字帶有一個小數點(非整數),則執行下面語句input_number_split = input_number.split('.') # 以.為分隔符對輸入的字符串進行切片int_number = input_number_split[0] # 整數部分dec_number = input_number_split[1] # 小數部分int_number_split = four_split(int_number) # 把整數部分按4位數字進行切分,返回值賦給int_number_splitcount = [len(x) for x in input_number_split] # 計算以小數點為分隔符分割后的整數部分的數字個數和小數部分的數字個數# print(count) # 可輸出查看結果if count[0] <= 16 and count[1] <= 2: # 如果輸入的數字不超過 1 0000 0000 0000 0000 并且小數不超過2位word = '' # 定義字符串for i in range(len(int_number_split)): # 處理整數部分word += exchange(int_number_split[i]) + list_ref[len(int_number_split) - i - 1] # 遍歷轉化時把['圓', '萬', '億', '兆']的單位標識添加if count[1] == 2: # 處理小數部分,此處判斷小數部分數字個數剛好為2位時if dec_number[1] == '0': # 如果分位為0,則不用讀取分位last_word = dict_ref[dec_number[0]] + '角整' # 轉換小數部分數字,末尾添加“角整”else: # 如果分位不為0,需要讀取分位last_word = dict_ref[dec_number[0]] + '角' + dict_ref[dec_number[1]] + '分整' # 轉換小數部分數字,添加“角”,末尾添加“分整”else: # 處理小數部分,此處判斷小數部分數字個數為1位時if dec_number[0] == '0': # 如果角位為0,則不用讀取角位last_word = '整'else: # 如果角位不為0,需要讀取角位last_word = dict_ref[dec_number[0]] + '角整' # 轉換小數部分數字,末尾添加“角整”word += last_word # 把整數部分和小數部分處理后的結果拼接print(word) # 輸出轉換后的結果else: # 如果用戶輸入不規范(超出提示輸入范圍)continue # 提示用戶重新輸入elif input_number.count(".") == 0: # 如果輸入的數字沒有小數點(整數),則執行下面語句if int(input_number) <= 10000000000000000: # 判斷該整數是否符合輸入規范word = '' # 定義字符串int_number_split = four_split(input_number) # 把輸入的數字按4位數字進行切分,返回值賦給int_number_splitfor i in range(len(int_number_split)): # 進入轉換word += exchange(int_number_split[i]) + list_ref[len(int_number_split) - i - 1] # 遍歷轉化時把['圓', '萬', '億', '兆']的單位標識添加# word = re.sub('圓', '整', word) # 方法一word = word + '整' # 最后把“整”拼接進去if "億萬圓" in word: # 如果轉換后的結果含有“億萬圓”word = word.replace('億萬圓', '') # 方法二 刪除“億萬圓”print(word) # 輸出轉換后的結果else: # 如果用戶輸入不規范(超出提示輸入范圍)continue # 提示用戶重新輸入else: # 輸入不規范continue # 繼續提示用戶輸入while flag: # 當用戶輸入一個規范的數字并且成功轉換后,詢問用戶是否繼續轉換input_ans = input("是否繼續轉換?(請輸入 是/否):") # 輸出提示,并提示用戶輸入if input_ans == '是': # 如果用戶輸入“是”break # 結束當前循環,進入主while循環elif input_ans == '否': # 如果用戶輸入“否”flag = 0 # 把0賦給flagbreak # 結束循環else: # 用戶不按要求輸入,繼續提示輸入continue # 繼續提示輸入運行截圖
總結
以上是生活随笔為你收集整理的将阿拉伯数字转换为中文大写数字 —— pyhton实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VB.net WinForm如何写一个分
- 下一篇: 如何搜索出代理服务器