項目須要,將一些整數轉爲漢字字符串,搜索了一下你們基本都是本身寫一下函數轉換,參考了帖子:https://blog.csdn.net/PlusCha...;在其中速度最快的第三種程序的基礎上,本身作了一些改進,讓代碼更精簡而且更快一些。git
基本思想仍是先將整數字符串化後轉爲列表,而後進行漢字字符的替換。再根據漢語語法結構加上單位,以及把多餘的零和一(例如「一十二」中的「一」)去掉。代碼以下:github
# 億位如下的天然數 def num2Chinese(d): if 100000000 > d > 0: num = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'] kin = ['十', '百', '千', '萬'] num_str = list(str(d)) num_str.reverse() Chinese_str = "" for index, i in enumerate(num_str): if index!=0: if i != "0": Chinese_str = num[int(i)] + kin[(index%4)-1] + Chinese_str elif Chinese_str: if index==4 : if Chinese_str[0]!="零": Chinese_str = kin[3] + "零" + Chinese_str else: Chinese_str = kin[3] + Chinese_str if not(Chinese_str[0] in ["零", "萬"] and i=="0"): Chinese_str = num[int(i)] + Chinese_str else: if i != "0": Chinese_str = num[int(i)] + Chinese_str if Chinese_str[:2] == "一十": Chinese_str = Chinese_str[1:] return Chinese_str
github地址:https://github.com/Pengyiqing...函數
轉換的過程思路以下:將數字列表化後倒置,即先從個位開始分析,個位上只須要考慮該位是否爲零,爲零則漢字字符無需聲明。從十位開始,既要考慮加相應單位(好在億如下的算是兩次【10、百、千】的循環,能夠合併判斷,若是該位是【零】,根據已經生成的字符串的第一個是不是【零】要判斷是否要加上。循環之間用【萬】相連,【萬】的狀況就更復雜一些,由於【萬】字前面不加零,因此再加單獨判斷便可。測試
在本人電腦上進行測試,參考例子裏最快的那個代碼,轉化1至9999999的運行時間爲73秒。而上面那個優化後的代碼,運行時間爲48秒。優化