python數(shù)字轉換成中文/數(shù)字轉換成漢字

import re, time


class ConvertNumber:
    # 主程序
    def ranki(self, num):
        rank = []
        for i in [num]:
            i = self.turn(i)
            rank.append(i)
        return rank[0]

    # 如果超過萬,則分為兩部分以節(jié)約代碼和運行速度
    def turn(self, x):
        i = str(x)

        if len(i) > 8:
            i = self.tran(i[0:-8]) + '億' + self.tran(i[-8:])
        elif len(i) > 4:
            i = self.tran(i[0:-4]) + '萬' + self.tran(i[-4:])
        else:
            i = self.tran(i[-4:])
        return i

    # 轉換數(shù)字并插入對應單位,單位為‘零’則再插入一個‘零’以方便正則表達式替換
    def tran(self, x):
        num = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']
        kin = ['零', '十', '百', '千']
        x = list(reversed(x))
        for i in x:
            x[(x.index(i))] = num[int(i)]
        if len(x) >= 2:
            if x[1] == num[0]:
                x.insert(1, kin[0])
            else:
                x.insert(1, kin[1])
            if len(x) >= 4:
                if x[3] == num[0]:
                    x.insert(3, kin[0])
                else:
                    x.insert(3, kin[2])
                if len(x) >= 6:
                    if x[5] == num[0]:
                        x.insert(5, kin[0])
                    else:
                        x.insert(5, kin[3])
        x = self.delz(x)
        return x

    # 進行多余‘零’的刪除
    # reversed()函數(shù)真是可以用在列表和字符串。
    # 加上 if 語句 防止對不必要的數(shù)據(jù)進行正則表達式檢測
    def delz(self, x):
        x = ''.join(x)
        if '零零' in x:
            x = re.sub('零+', '零', x)
        if x.startswith('零'):
            x = list(x)
            x.remove('零')
        x = reversed(x)
        x = ''.join(x)
        return x


    def main(self, num):
        num = str(num)
        if len(num) > 8:
            last_8 = num[-8:]

            strip_num = last_8.lstrip('0')
            
            after_8 = self.ranki(strip_num)
            front, _ = self.ranki(num).split('億')
            
            if len(strip_num) < 8:
                return f"{front}億零{after_8}"
            else:
                return f"{front}億{after_8}"
        else:
            res = self.ranki(num)
            return res

if __name__ == '__main__':
    con = ConvertNumber()
    print(con.main(110001001))

引自

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容