[英]How to convert numbers to words python 3
嘗試將數字轉換為單詞時遇到一個問題:當我輸入80時崩潰,或者如果我輸入100,它會產生“一百二百”。 有人可以幫我修復我的代碼。
number = input("Enter a value: ")
ones = ["", "one ", "two ","three ", "four", "five ", "six ", "seven ",
"eight ", "nine "]
teens = ["ten ", "eleven ", "twelve ", "thirteen ", "fourteen ", "fifteen ",
"sixteen ", "seventeen ", "eighteen ", "nineteen "]
decades = ["", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy
", "eighty ", "ninety "]
hundreds = ["", "one hundred ", "two hundred ", "three hundred ", "four
hundred ", "five hundred", "six hundred ", "seven hundred", "eight hundred",
"nine hundred"]
word = ""
change = len(number)
while change > 0:
if number == "0":
word ="zero"
break
elif change > 1 and number[change - 2] == "1":
for i in range(0,10):
if number[change - 1] == str(i):
word = teens[i] + word
else:
for i in range(0,10):
if number[change - 1] == str(i):
word = ones[i] + word
if change > 1:
for i in range(0,10):
if number[change - 2] == str(i):
word = decades[i] + word
if change > 2:
for i in range(0,10):
if number[change - 3] == str(i):
word = hundreds[i] + word
change = change - 3
print(word)
這應該工作: word2number
還有他們文檔中的一個示例: print(w2n.word_to_num('one hundred thirty-five'))
您錯過了幾十個“七十”和“八十”之間的逗號。 您必須將數十年更改為以下內容:
decades = ["", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy", "eighty ", "ninety"]
在hunderds列表中也存在相同的錯誤。 使用此新列表:
hundreds = ["", "one hundred ", "two hundred ", "three hundred ", "four hundred ", "five hundred", "six hundred ", "seven hundred", "eight hundred", "nine hundred"]
但是,您的實現有很多錯誤。
就是這個if語句將起作用(請注意,這是使它起作用所需的全部):
if len(number)==1:
print(ones[int(number)])
elif len(number)==2 and number[0]=='1':
print(teens[int(number[-1])])
elif len(number)==2 and number[0]!='1':
print(decades[int(number[0])-1])
elif len(number)==3:
print(hundreds[int(number[0])])
請注意,必須在decades
和hundreds
decades
添加逗號,因此請復制以下內容,然后替換為剪貼板:
decades = ["", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy", "eighty ", "ninety "]
hundreds = ["", "one hundred ", "two hundred ", "three hundred ", "four hundred ", "five hundred", "six hundred ", "seven hundred", "eight hundred",
我認為,為了使您的示例正常工作,您只需要確保每個change
位都在訪問列表中的正確值即可。 在您的decades
列表中情況並非如此,您錯過了為青少年正確輸入的空白字符串。
因此,為了使您的代碼正常工作,只需更改:
decades = ["", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy", "eighty ", "ninety "]
對此:
decades = ["", "", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy", "eighty ", "ninety "]
對於此實現,列表中應始終包含10個元素。 例如,幾十年來,即使不使用它,也應該有一些字符串表示10-20之間的值,因為否則數組的索引將是錯誤的。
這段代碼仍然有很多錯誤。 嘗試這個。
number = input("Enter a value: ")
ones = ["", "one ", "two ","three ", "four", "five ", "six ", "seven ", "eight ", "nine "]
teens = ["ten ", "eleven ", "twelve ", "thirteen ", "fourteen ", "fifteen ", "sixteen ", "seventeen ", "eighteen ", "nineteen "]
decades = ["", "onety", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy ", "eighty ", "ninety "]
hundreds = ["", "one hundred ", "two hundred ", "three hundred ", "four hundred ", "five hundred", "six hundred ", "seven hundred", "eight hundred", "nine hundred"]
word = ""
change = len(number)
while change > 0:
if number == "0":
word ="zero"
break
elif change > 1 and number[change - 2] == "1":
for i in range(0,10):
if number[change - 1] == str(i):
word = teens[i] + word
if change == 2:
break
else:
for i in range(0,10):
if number[change - 1] == str(i):
word = ones[i] + word
if change > 1 and number[change-2]!="1":
for i in range(0,10):
if number[change - 2] == str(i):
word = decades[i] + word
if change > 2:
for i in range(0,10):
if number[change - 3] == str(i):
word = hundreds[i] + word
change = change - 3
print(word)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.