將15位數(shù)字轉換成人民幣金額

直接上代碼,每個步驟都有注釋。難點在零的處理上。

# 用字典變量x來保存0~9,和中文大寫

x = {0:'零', 1:'壹', 2:'貳', 3:'叁', 4:'肆', 5:'伍', 6:'陸', 7:'柒', 8:'捌', 9:'玖'}

# 用元組變量y保存人民幣金額的各種單位

y = ("元","拾","佰","仟","萬","拾","佰","仟","億","拾","佰","仟","萬","拾","佰","仟")

# 用列表變量c來存儲初步生成的結果

c=[]

# 用字符串變量d來保存最后的結果

d=""

# 接收鍵盤輸入的阿拉伯數(shù)字以字符串形式存儲在變量n中

n = input("請輸入一個大于零不超過十五位的數(shù)字:")

while len(n)>15 or int(n)<=0:

? ? n = input("輸入錯誤,請輸入一個大于零不超過十五位的數(shù)字:")

# 將字符串n換成大寫的數(shù)字金額

k = len(n)-1

for i in n:

? ? j = int(i)

? ? c.append(x[j])

? ? c.append(y[k])

? ? k = k-1

print(c)? ? # 測試用,程序檢測完需刪除

# 處理帶有0的數(shù)字

# 先將c列表中的零都用x來替換,同時將零后的單位也用x替換;

# 但對元、萬、億這三個特殊單位不要替換。這三個單位是中文數(shù)字中的三個不同量級的基本單位,所以要保留。

k = len(c)-1

for i in range(k, 0, -2):

? ? if c[i-1]=='零':

? ? ? ? c[i-1]='x'

? ? if c[i] != '元' and c[i] != '萬' and c[i] != '億' and c[i-1] == 'x':? ? ? # 注意要滿足前一位為0,即c[i-1] == 'x'

? ? ? ? c[i] = 'x'

# print(c)? ? # 測試用,程序檢測完需刪除

# 確定哪些x需恢復'零',哪些需刪除

# 在元、萬、億這些單位左面如果連續(xù)出現(xiàn)‘x’則這些"x"不需要恢復為零,我們先將這些不需要恢復的"x"標記為"y"

for i in range(k, 0, -1):

? ? if (c[i] == "元" or c[i] == "萬" or c[i] == "億") and c[i-1] == "x" or c[i] == "y" and c[i-1] == "x":

? ? ? ? c[i-1] = 'y'

# print(c)

# 把需要的'零'恢復回來,即把位于最右側的x恢復為"零"其余x保持不變。

k = len(c)-2

for i in range(k,0,-1):

? ? if c[i] == 'x' and c[i+1] != '零' and c[i+1] != 'x':

? ? ? ? c[i] = '零'

# print(c)

# 多顯示一個萬字: 當位數(shù)超過9位,而且萬位左側連續(xù)三個數(shù)字位均為0時出現(xiàn)這一問題

k = len(c)

if k>=18 and c[k-16]=='y' and c[k-12]=='y' and c[k-14]=='y':

? ? c[k-9] = 'x'

# 將c列表刪除其中的'x'和'y',并轉換為字符串格式輸出。

for i in range(0, len(c)):

? ? if c[i] != 'x' and c[i] != 'y':

? ? ? ? d = d+c[i]

print(d)

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

友情鏈接更多精彩內容