Python實(shí)現(xiàn)中文數(shù)字與阿拉伯?dāng)?shù)字映射生成器(支持0-9999)的完整代碼
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)文章
解決python 未發(fā)現(xiàn)數(shù)據(jù)源名稱并且未指定默認(rèn)驅(qū)動(dòng)程序的問(wèn)題
今天小編就為大家分享一篇解決python 未發(fā)現(xiàn)數(shù)據(jù)源名稱并且未指定默認(rèn)驅(qū)動(dòng)程序的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
基于python實(shí)現(xiàn)matlab filter函數(shù)過(guò)程詳解
這篇文章主要介紹了基于python實(shí)現(xiàn)matlab filter函數(shù)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
python3+PyQt5 創(chuàng)建多線程網(wǎng)絡(luò)應(yīng)用-TCP客戶端和TCP服務(wù)器實(shí)例
今天小編就為大家分享一篇python3+PyQt5 創(chuàng)建多線程網(wǎng)絡(luò)應(yīng)用-TCP客戶端和TCP服務(wù)器實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
python實(shí)現(xiàn)圖片壓縮代碼實(shí)例
這篇文章主要介紹了python實(shí)現(xiàn)圖片壓縮代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
對(duì)tensorflow 中tile函數(shù)的使用詳解
今天小編就為大家分享一篇對(duì)tensorflow 中tile函數(shù)的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
python pandas dataframe 去重函數(shù)的具體使用
這篇文章主要介紹了python pandas dataframe 去重函數(shù)的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
利用PyInstaller將python程序.py轉(zhuǎn)為.exe的方法詳解
這篇文章主要給大家介紹了利用PyInstaller將python程序.py轉(zhuǎn)為.exe的方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-05-05
pytorch torchvision.ImageFolder的用法介紹
今天小編就為大家分享一篇pytorch torchvision.ImageFolder的用法介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
python+opencv實(shí)現(xiàn)動(dòng)態(tài)物體追蹤
這篇文章主要為大家詳細(xì)介紹了python+opencv實(shí)現(xiàn)動(dòng)態(tài)物體的追蹤,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01

