1 2 3 轉換成一百二十三,十萬位以內的轉換

python 解法

# 將結尾的0 全部替換爲#  比如 100  就是1## 但是 10100 則是101##
def getNoEndZeroStr(originStr):
    noEndStr = originStr.rstrip("0")
    # 確實有被替換的0
    hasEndZeroSize = len(originStr) - len(noEndStr)
    if (hasEndZeroSize > 0):
        return noEndStr + "#" * hasEndZeroSize
    return noEndStr

    pass





def getNumberForStr(strNumber):
    if (strNumber == "" or strNumber == None):
        print("數據不能爲空")
        return
    # 不能轉換爲數字
    if not strNumber.isnumeric():
        print("數據格式不正確")

    resByByFloat = 0;
    try:
        resByByFloat = float(strNumber)
    except Exception as ex:
        # 打印錯誤並且返回
        print('輸入的字符串不能轉換位float ERROR: ' + str(ex))
        return
    if strNumber.__contains__("."):
        print("暫時不支持浮點運算")
        return
    if strNumber.__contains__("-") or strNumber.__contains__("——"):
        print("暫時不支持負數運算")
        return

    dictByNumber = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]
    dictByDigits = ["", "十", "百", "千", "萬"]
    # 針對0做特殊處理
    if resByByFloat == 0:
        return dictByNumber[0]

    # 開頭如果爲0的話 過濾掉
    noStratZeroStr = strNumber.lstrip("0")
    # 將字符串轉化爲字符串數組
    strNumberList = list(noStratZeroStr)
    # 根據當前位數與字典位數對比
    if len(strNumberList) > len(dictByDigits):
        print("數據太大了,暫時不支持")
        return
    # 根據數字大小截取正確的順序
    dictByDigits = dictByDigits[0:len(strNumberList)]
    dictByDigits.reverse()
    # 過濾結尾的0 並用#字符串代替
    noEndZerostr = getNoEndZeroStr(noStratZeroStr)
    # 過濾中間的0  如果是兩個0 就用1個0代替   10001 10**1
    hasOneCenter = noEndZerostr.replace("0", "@")
    resStr = ""
    isAddCenterZero = False
    # 核心邏輯  倒敘添加最後反轉字符串
    for index in range(len(strNumberList)):
        # 結尾是#號的代表 代表結尾是0  所以跳過
        if (noEndZerostr[index] == "#"):
            continue

        # 過濾中間的0
        if (hasOneCenter[index] == "@"):
            # 後續如果不是數字 符號不要
            if (not isAddCenterZero):
                resStr += dictByNumber[int(strNumberList[index])]
                isAddCenterZero = True
            continue

        # 解決 10101
        if (index > 0 and hasOneCenter[index - 1] == "@" and hasOneCenter[index] != "@"):
            isAddCenterZero = False

        resStr += dictByNumber[int(strNumberList[index])] + dictByDigits[index]

        pass

    # 中間有連續多個零,只取一個零
    return resStr





def printRes(strNumber):
    res = getNumberForStr(strNumber)
    print(strNumber + ":" + res)


def main():
    for x in getContainsZeroAndOneNumber():
        printRes(str(x))

    pass


# 拿到所有從0到9萬9千中包含0和1的數字
def getContainsZeroAndOneNumber():
    list=[]
    for x in range(99999 + 1):
        strNumber = str(x)
        if not strNumber.replace("0","").replace("1",""):
            list.append(x)
    return list


if __name__ == '__main__':
    main()

結果輸出

D:\devlop\python\python.exe D:/project/python/market/pic/main_number.py
0:零
1:一
10:一十
11:一十一
100:一百
101:一百零一
110:一百一十
111:一百一十一
1000:一千
1001:一千零一
1010:一千零一十
1011:一千零一十一
1100:一千一百
1101:一千一百零一
1110:一千一百一十
1111:一千一百一十一
10000:一萬
10001:一萬零一
10010:一萬零一十
10011:一萬零一十一
10100:一萬零一百
10101:一萬零一百零一
10110:一萬零一百一十
10111:一萬零一百一十一
11000:一萬一千
11001:一萬一千零一
11010:一萬一千零一十
11011:一萬一千零一十一
11100:一萬一千一百
11101:一萬一千一百零一
11110:一萬一千一百一十
11111:一萬一千一百一十一

Process finished with exit code 0

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章