我编写了以下代码,假设将所有数字从1到9999转换为单词,但是我已经超出了111等数字的范围。请帮忙。感谢。
global n2W
n2W = {1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five',\
6: 'six', 7: 'seven', 8: 'eight', 9: 'nine', 10: 'ten', \
11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', \
15: 'fifteen', 16: 'sixteen', 17: 'seventeen', 18: 'eighteen',\
19: 'nineteen',20:'twenty', 30:'thirty', 40:'forty', 50:'fifty', 60:'sixty',\
70: 'seventy', 80:'eighty', 90:'ninety',100:'one hundred', 200:'two hundred',\
300:'three hundred', 400:'four hundred',500:'five hundred', 600:'six hundred',\
700:'seven hundred',800:'eight hundred', 900:'nine hundred',\
1000:'one thousand', 2000:'two thousand', 3000:'three thousand',\
5000:'five thousand', 6000:'six thousand', 7000:'seven thousand',\
8000:'eight thousand', 9000:'nine thousand',10000:'ten thousand'}
def num2Word(n):
try:
print (n2W[n])
except KeyError:
try:
print (n2W[n-n%10] , n2W[n%10].lower())
except KeyError:
print ("Number out of range")
n = eval(input("Please enter a number between 1 and 9999 inclusive: "))
num2Word(n)
答案 0 :(得分:1)
你只尝试 - 除了一次,这意味着这将适用于最多2位数。尝试递归地做。如果你想要的话,我可以帮你解决问题。 而不是做n2W [n%10] .lower(),而是使用递归调用num2Word。
答案 1 :(得分:0)
只需手动插入一个号码即可看出错误原因
例如,尝试n = 111
(n2W[n-n%10] , n2W[n%10].lower())
111%10=1
,所以你有:
n2W[110]
和n2W[1]
n2W[110]
是您的关键错误,只需要通过您的函数进行递归。
答案 2 :(得分:0)
查看这个解决方案,我们在其中从左到右迭代数字,在每次迭代中将value
映射到文本,然后放弃最重要的数字。
def num2Word(n):
try:
word = ''
c = 1000
while n:
value = (n//c)*c if n > c else None
n %= c
c /= 10
if value is not None:
word += '%s ' % n2W[value]
except KeyError:
print ("Number out of range")
return word
n = eval(input("Please enter a number between 1 and 9999 inclusive: "))
print num2Word(n)
例如,对于n = 1234,我们将进行四次迭代,其中value
等于:
value
= 1000
value
= 200
value
= 30
value
= 4
答案 3 :(得分:-1)
您最好使用num2words
库,可以使用以下代码安装:
pip install num2words
然后你可以这样做:
import num2words
num2words.num2words(42) # forty-two
答案 4 :(得分:-1)
您可以使用 inflect 模块将整数值转换为单词。
import inflect
i=inflect.engine()
i.number_to_words(49)
输出将是:'四十九'