最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)數(shù)字小寫(xiě)轉(zhuǎn)大寫(xiě)的示例詳解

 更新時(shí)間:2022年12月14日 11:27:47   作者:yhryhryhr-  
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)數(shù)字小寫(xiě)轉(zhuǎn)大寫(xiě)的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

前言

這絕對(duì)是個(gè)非常有趣的問(wèn)題哈哈,但用python列表實(shí)現(xiàn)就變得比較燒腦,正常人不會(huì)非常較真這樣的程序,我也只是閑來(lái)無(wú)事,如果代碼還是有bug,那么我也沒(méi)辦法。

注:經(jīng)過(guò)廣泛搜索和仔細(xì)深究,似乎沒(méi)有幾套開(kāi)源代碼能100%滿(mǎn)足要求

參考標(biāo)準(zhǔn):大小寫(xiě)轉(zhuǎn)換器_人民幣大寫(xiě)在線(xiàn)轉(zhuǎn)換工具

代碼實(shí)現(xiàn)

首先將一個(gè)數(shù)字根據(jù)小數(shù)點(diǎn),進(jìn)行分割。建立字典和數(shù)據(jù)集(left_chinese, right_chinese),這里left_chinese不加元,是因?yàn)楹竺婵梢越y(tǒng)一處理,避免庸人自擾。

def Digital_to_Chinese(digital):
    if not isinstance(digital, str):  # 首先將內(nèi)容轉(zhuǎn)換為浮點(diǎn)數(shù)
        str_digital = str(digital)
    else:
        str_digital = digital
    print("小寫(xiě)數(shù)字", digital)
    chinese = {'1': '壹', '2': '貳', '3': '叁',
               '4': '肆', '5': '伍', '6': '陸',
               '7': '柒', '8': '捌', '9': '玖', '0': '零'}
    left_chinese = ['', '拾', '佰', '仟', '萬(wàn)']  # 小數(shù)點(diǎn)左邊
    right_chinese = ["角", "分"]  # 小數(shù)點(diǎn)右邊
    left_Str, right_Str = "", ""  # 根據(jù)小數(shù)點(diǎn)將浮點(diǎn)數(shù)分成整數(shù)小數(shù)兩部分
    if '.' in str_digital:
        left_Str, right_Str = str_digital.split('.')
    else:
        left_Str = str_digital  # 沒(méi)有的話(huà)就直接都是整數(shù)部分
    leftStrArr = []  # 處理整數(shù)部分

將左邊數(shù)字從高位向低位讀取,再翻轉(zhuǎn)——即從低向高。之后,把每個(gè)數(shù)字對(duì)應(yīng)的權(quán)重附在數(shù)字后面(empty, 拾, 佰, 仟, 萬(wàn)),同樣的思路也適用于右半塊數(shù)字。

if left_Str:
        leftStrArr = [chinese[v] for v in left_Str]  # 使用列表推導(dǎo)式獲取大寫(xiě)中文列表
        leftStrArr.reverse()  # 由于數(shù)字是從前到后讀,所以從低位向高位轉(zhuǎn)換需要倒置列表
        for i in range(0, len(leftStrArr)):
            if leftStrArr[i] != "零":  # 只要這一位不是0,就在后面賦值他對(duì)應(yīng)的權(quán)重,如果為0則i自增1將其略過(guò)
                leftStrArr[i] += left_chinese[i]
        leftStrArr.reverse()
    rightStrArr = []  # 處理小數(shù)部分
    if right_Str:
        rightStrArr = [chinese[v] for v in right_Str]
        for i in range(0, len(rightStrArr)):
            if rightStrArr[i] != "零":
                rightStrArr[i] += right_chinese[i]  # 和前面一樣的道理

之后,我們需要進(jìn)行二次處理,首先剛剛那樣的算法會(huì)多輸出0,比如 2001 會(huì)被寫(xiě)成 兩仟零零壹,針對(duì)這個(gè)問(wèn)題我們可以直接去重處理,這里注意,101是不會(huì)被去除的,因?yàn)槟鞘荹壹佰,零,壹],所以不會(huì)被去重。

但這并不完美,因?yàn)檫€會(huì)有這樣的問(wèn)題:10 會(huì)被寫(xiě)成 壹拾零,解決方法是判斷末尾字符是否為零,是則刪去不是則跳過(guò)。

此外,由于正常的計(jì)費(fèi)只到“分”,所以右半部分正常情況下不需要過(guò)多的處理,因此代碼就寫(xiě)完了。

leftStrArr_temp = []
    for xleft in leftStrArr:
        if xleft not in leftStrArr_temp:  # 去重,防止出現(xiàn) xx零零xx
            leftStrArr_temp.append(xleft)
    leftStrArr_temp.reverse()
    for temp in leftStrArr_temp:  # 去掉末尾的零
        if temp == "零":
            leftStrArr_temp.remove(temp)
        else:
            break
    leftStrArr_temp.reverse()
    print("------\n左", ''.join(leftStrArr_temp))
    rightStrArr_temp = []
    for xright in rightStrArr:
        if xright not in rightStrArr_temp:
            rightStrArr_temp.append(xright)
    print("右", ''.join(rightStrArr_temp))
    return ''.join(leftStrArr_temp) + "元" + ''.join(rightStrArr_temp)  # 將列表合并成一個(gè)字符串,作為結(jié)果返回

測(cè)試

# test = input("請(qǐng)輸入測(cè)試用例:")
test_list = [1, 1.1, 11.01, 10.10, 10.01, 101.01, 2300.02, 34004.09]
for test in test_list:
    print("結(jié)果", Digital_to_Chinese(test), "\n------\n")

這個(gè)測(cè)試應(yīng)該沒(méi)有問(wèn)題,整數(shù)部分的高位可以直接加在列表中,低位部分各位可以自行完善。結(jié)果如下:

小寫(xiě)數(shù)字左串右串結(jié)果
1壹元 
1.1壹角壹元壹角
11.01壹拾壹零壹分壹拾壹元零壹分
10.1壹拾壹角壹拾元壹角 
10.01壹拾零壹分壹拾元零壹分 
101.01壹佰零壹零壹分壹佰零壹元零壹分
2300.02貳仟叁佰零貳分貳仟叁佰元零貳分
34004.09叁萬(wàn)肆仟零肆零玖分叁萬(wàn)肆仟零肆元零玖分

補(bǔ)充

除了上面的方法,小編也為大家整理了一些其他簡(jiǎn)單的方法,需要的可以參考一下

小寫(xiě)數(shù)字轉(zhuǎn)為大寫(xiě)

def lowertoupper(number, recursive_depth=0):
    str_number = str(number)
    if len(str_number) > 4:
        str_number = str_number[-4:]
    bits = "零 一 二 三 四 五 六 七 八 九".split(" ")
 
    units = " 十 百 千".split(" ")
    large_unit = ' 萬(wàn) 億 萬(wàn)'.split(" ")  # 可擴(kuò)展,以萬(wàn)為單位
    number_len = len(str_number)
    result = ""
 
    for i in range(number_len):
        result += bits[int(str_number[i])]
        if str_number[i] != "0":
            result += units[number_len - i - 1]
 
    # 去除連續(xù)的零
    while "零零" in result:
        result = result.replace("零零", "零")
    # 去除尾部的零
    if result[-1] == "零":
        result = result[:-1]
    # 調(diào)整10~20之間的數(shù)
    if result[:2] == "一十":
        result = result[1:]
    # 字符串連接上大單位
    result += large_unit[recursive_depth]
 
    # 判斷是否遞歸
    if len(str(number)) > 4:
        recursive_depth += 1
        return lowertoupper(str(number)[:-4], recursive_depth) + result
    else:
        return result

阿拉伯?dāng)?shù)字的大小寫(xiě)轉(zhuǎn)換

# 數(shù)據(jù)源
Upper0 = "零、壹、貳、叁、肆、伍、陸、柒、捌、玖"
Upper1 = Upper0.split('、')

# 封裝函數(shù)
num_list = []
for number in range(10):
	num_list.append(number)
def Swap_func(lower,upper):
    swap = {}
    swap[lower] = upper
    return swap

m = map(Swap_func, num_list, Upper1)
info = list(m)
# [{0: '零'}, {1: '壹'}, {2: '貳'}, {3: '叁'}, {4: '肆'}, {5: '伍'}, {6: '陸'}, {7: '柒'}, {8: '捌'}, {9: '玖'}]
print("{0:-^74}".format("數(shù)字間用英文逗號(hào)間隔,輸入結(jié)束后,按回車(chē)結(jié)束"))
print("{0:-^80}".format("若為單個(gè)數(shù)字,請(qǐng)以英文逗號(hào)隔開(kāi)哦"))
Input0 = eval(input("請(qǐng)輸入你需要轉(zhuǎn)換的任意小寫(xiě)數(shù)字:"))
print()
print()
print(f'小寫(xiě)數(shù)字 {Input0} 對(duì)應(yīng)的中文大寫(xiě)數(shù)字為: {[list(info[number].values()) for number in Input0]}')

print()
零,壹,貳,叁,肆,伍,陸,柒,捌,玖 = [i for i in range(10)]

print("{0:-^63}".format("大寫(xiě)數(shù)字間用英文逗號(hào)間隔,輸入結(jié)束后,為方便您查詢(xún),請(qǐng)按回車(chē)結(jié)束鴨~"))
print("{0:-^80}".format("若為單個(gè)漢字,請(qǐng)以英文逗號(hào)隔開(kāi)哦"))
print(f'提示:{"零、壹、貳、叁、肆、伍、陸、柒、捌、玖 (復(fù)制任意大寫(xiě)數(shù)字或手動(dòng)輸入)".replace("、",",")}')
Input1 = eval(input("請(qǐng)輸入你需要轉(zhuǎn)換的任意中文大寫(xiě)數(shù)字:"))
Upper_list = [零,壹,貳,叁,肆,伍,陸,柒,捌,玖]
print()
print()
print(f'大寫(xiě)數(shù)字 {[list(info[number].values()) for number in Input1]} 對(duì)應(yīng)的小寫(xiě)數(shù)字為: {Input1}')
print()
print("{0:-^86}".format("歡迎您下次使用,再見(jiàn)~"))

到此這篇關(guān)于Python實(shí)現(xiàn)數(shù)字小寫(xiě)轉(zhuǎn)大寫(xiě)的示例詳解的文章就介紹到這了,更多相關(guān)Python數(shù)字小寫(xiě)轉(zhuǎn)大寫(xiě)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解python腳本自動(dòng)生成需要文件實(shí)例代碼

    詳解python腳本自動(dòng)生成需要文件實(shí)例代碼

    這篇文章主要介紹了詳解python腳本自動(dòng)生成需要文件實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 用OpenCV將視頻分解成單幀圖片,圖片合成視頻示例

    用OpenCV將視頻分解成單幀圖片,圖片合成視頻示例

    今天小編就為大家分享一篇用OpenCV將視頻分解成單幀圖片,圖片合成視頻示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python密碼學(xué)文件解密實(shí)現(xiàn)教程

    python密碼學(xué)文件解密實(shí)現(xiàn)教程

    這篇文章主要為大家介紹了python密碼學(xué)文件解密實(shí)現(xiàn)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python繪制趨勢(shì)線(xiàn)的示例代碼

    Python繪制趨勢(shì)線(xiàn)的示例代碼

    趨勢(shì)線(xiàn)是用來(lái)顯示數(shù)據(jù)趨勢(shì)或者預(yù)測(cè)未來(lái)發(fā)展方向的一種圖形表示方法,這篇文章主要為大家詳細(xì)介紹了如何使用Python繪制趨勢(shì)線(xiàn),需要的可以了解下
    2024-03-03
  • 剖析Django中模版標(biāo)簽的解析與參數(shù)傳遞

    剖析Django中模版標(biāo)簽的解析與參數(shù)傳遞

    這篇文章主要介紹了剖析Django中模版標(biāo)簽的解析與參數(shù)傳遞,Django是重多高人氣Python框架中最為著名的一個(gè),需要的朋友可以參考下
    2015-07-07
  • Django 使用logging打印日志的實(shí)例

    Django 使用logging打印日志的實(shí)例

    下面小編就為大家分享一篇Django 使用logging打印日志的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 基于python批量處理dat文件及科學(xué)計(jì)算方法詳解

    基于python批量處理dat文件及科學(xué)計(jì)算方法詳解

    今天小編就為大家分享一篇基于python批量處理dat文件及科學(xué)計(jì)算方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Django 聚合函數(shù)的具體使用

    Django 聚合函數(shù)的具體使用

    orm模型中的聚合函數(shù)跟MySQL中的聚合函數(shù)作用是一致的,也有像Sum、Avg、Count、Max、Min,接下來(lái)我們逐個(gè)介紹,下面就一起來(lái)了解一下
    2021-05-05
  • 深入理解Python變量與常量

    深入理解Python變量與常量

    下面小編就為大家?guī)?lái)一篇深入理解Python變量與常量。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • Python django導(dǎo)出excel詳解

    Python django導(dǎo)出excel詳解

    這篇文章主要介紹了Python django導(dǎo)出excel的方法 ,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11

最新評(píng)論

丽水市| 泾阳县| 定结县| 吉木萨尔县| 屯门区| 陕西省| 灌阳县| 长治县| 象山县| 平乐县| 泰州市| 厦门市| 五常市| 云霄县| 尤溪县| 莱州市| 嵊州市| 梁平县| 黎川县| 周口市| 宣化县| 东山县| 金乡县| 珠海市| 南丰县| 获嘉县| 灌南县| 逊克县| 稻城县| 日喀则市| 叶城县| 饶河县| 读书| 修水县| 右玉县| 类乌齐县| 抚顺县| 准格尔旗| 博乐市| 胶南市| 进贤县|