欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)中文數(shù)字與阿拉伯?dāng)?shù)字映射生成器(支持0-9999)的完整代碼

 更新時(shí)間:2025年07月31日 09:44:22   作者:袁袁袁袁滿  
在中文文本處理和自然語(yǔ)言處理(NLP)應(yīng)用中,經(jīng)常需要將中文數(shù)字轉(zhuǎn)換為阿拉伯?dāng)?shù)字,本文將介紹如何使用Python根據(jù)用戶從控制臺(tái)輸入的數(shù)字范圍,生成相應(yīng)的中文數(shù)字到阿拉伯?dāng)?shù)字的映射字典,并將結(jié)果保存為JSON文件,需要的朋友可以參考下

1. 引言

在中文文本處理和自然語(yǔ)言處理(NLP)應(yīng)用中,經(jīng)常需要將中文數(shù)字轉(zhuǎn)換為阿拉伯?dāng)?shù)字。本文將介紹如何使用Python根據(jù)用戶從控制臺(tái)輸入的數(shù)字范圍,生成相應(yīng)的中文數(shù)字到阿拉伯?dāng)?shù)字的映射字典,并將結(jié)果保存為JSON文件。

2. 需求分析‌

開(kāi)發(fā)一個(gè)Python程序,根據(jù)用戶輸入的數(shù)字(最大9999),自動(dòng)生成中文數(shù)字與阿拉伯?dāng)?shù)字的映射字典,并保存為JSON文件。例如:輸入10時(shí),生成{“零”:0, “一”:1,…, “十”:10}。

3. 核心實(shí)現(xiàn)思路‌

1. 中文數(shù)字轉(zhuǎn)換規(guī)則‌

  • 單位系統(tǒng)‌:萬(wàn)(超過(guò)9999的部分)、千、百、十、個(gè)位。
  • 零處理‌:連續(xù)零僅保留一個(gè)(如205→“二百零五”),末尾零省略(如100→“一百”)。
  • 特殊讀法‌:10讀作“十”而非“一十”。

2. 用戶輸入驗(yàn)證‌

  • 確保輸入為整數(shù)、且在0~9999之間。

3. JSON文件生成‌

  • 使用Python標(biāo)準(zhǔn)庫(kù)json保存字典,保留Unicode字符。

4. 完整代碼實(shí)現(xiàn)‌

import json


def number_to_chinese(num):
    """將0-9999的整數(shù)轉(zhuǎn)換為中文數(shù)字"""
    units = ['', '十', '百', '千']
    digits = {0: '零', 1: '一', 2: '二', 3: '三', 4: '四',
              5: '五', 6: '六', 7: '七', 8: '八', 9: '九'}

    if num == 0:
        return digits[0]

    num_str = str(num)
    length = len(num_str)
    result = []
    has_zero = False  # 標(biāo)記前一位是否是零

    for i, n in enumerate(num_str):
        n = int(n)
        pos = length - i - 1  # 當(dāng)前位數(shù)(0=個(gè)位,1=十位...)

        if n == 0:
            if not has_zero and pos != 0:
                result.append(digits[0])
                has_zero = True
        else:
            if has_zero:
                result.pop()  # 刪除前導(dǎo)零
                has_zero = False
            result.append(digits[n])
            if pos > 0:
                result.append(units[pos])

    # 處理10-19的特殊情況(如10→十,11→十一)
    if 10 <= num <= 19 and length == 2:
        result = result[1:] if num == 10 else ['十' + digits[int(num_str[1])]]

    return ''.join(result).replace('零千', '零').rstrip('零')


def validate_input(prompt):
    """驗(yàn)證用戶輸入是否為0-9999的整數(shù)"""
    while True:
        user_input = input(prompt)
        try:
            num = int(user_input)
            if 0 <= num <= 9999:
                return num
            print("錯(cuò)誤:請(qǐng)輸入0到9999之間的整數(shù)!")
        except ValueError:
            print("錯(cuò)誤:輸入必須為整數(shù)!")


def generate_mapping(max_num):
    """生成中文數(shù)字映射字典"""
    return {number_to_chinese(i): i for i in range(max_num + 1)}


def main():
    max_num = validate_input("請(qǐng)輸入最大阿拉伯?dāng)?shù)字(0-9999): ")
    mapping = generate_mapping(max_num)

    # 保存為JSON文件
    filename = f"chinese_numbers_{max_num}.json"
    with open(filename, 'w', encoding='utf-8') as f:
        json.dump(mapping, f, ensure_ascii=False, indent=2)

    print(f"生成成功!映射文件已保存為 {filename}")

    # 讀取JSON文件
    with open(filename, 'r', encoding='utf-8') as f:
        loaded_dict = json.load(f)
        print("成功讀取字典:", loaded_dict)


if __name__ == "__main__":
    main()

關(guān)鍵代碼解析‌

1. 數(shù)字轉(zhuǎn)換函數(shù)‌

  • 動(dòng)態(tài)單位拼接‌:根據(jù)數(shù)字位置添加“千、百、十”等單位。
  • 零處理優(yōu)化‌:通過(guò)has_zero標(biāo)志避免重復(fù)零,如2001→“二千零一”。
  • 邊界特判‌:?jiǎn)为?dú)處理10-19的讀法,確保符合中文習(xí)慣。

2. 輸入驗(yàn)證‌

  • 使用循環(huán)強(qiáng)制用戶輸入合法數(shù)值,防止程序崩潰。

3. 文件輸出‌

  • ensure_ascii=False確保JSON文件直接顯示中文而非Unicode轉(zhuǎn)義。

運(yùn)行示例‌

1. 輸入驗(yàn)證‌

請(qǐng)輸入最大阿拉伯?dāng)?shù)字(0-9999): abc
錯(cuò)誤:輸入必須為整數(shù)!
請(qǐng)輸入最大阿拉伯?dāng)?shù)字(0-9999): 10000
錯(cuò)誤:請(qǐng)輸入0到9999之間的整數(shù)!

2. 生成結(jié)果‌,輸入10時(shí),輸出文件內(nèi)容:

{
  "零": 0,
  "一": 1,
  "二": 2,
  "三": 3,
  "四": 4,
  "五": 5,
  "六": 6,
  "七": 7,
  "八": 8,
  "九": 9,
  "十": 10
}

輸入9999運(yùn)行結(jié)果:

到此這篇關(guān)于Python實(shí)現(xiàn)中文數(shù)字與阿拉伯?dāng)?shù)字映射生成器(支持0-9999)的完整代碼的文章就介紹到這了,更多相關(guān)Python中文數(shù)字轉(zhuǎn)阿拉伯?dāng)?shù)字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論