Python中的数字到单词
我想写一个程序,接受一个介于1和9999(含)之间的整数,并用文字打印值。例如,如果用户输入: 3421 然后程序应打印:Python中的数字到单词,python,Python,我想写一个程序,接受一个介于1和9999(含)之间的整数,并用文字打印值。例如,如果用户输入: 3421 然后程序应打印: three thousand four hundred twenty one 我的代码在下面,但不起作用 num=int(input('please enter an integer between 1 and 9999: ')) def int_to_en(num): d = { 0 : 'zero', 1 : 'one', 2 : 'two', 3 : 't
three thousand four hundred twenty one
我的代码在下面,但不起作用
num=int(input('please enter an integer between 1 and 9999: '))
def int_to_en(num):
d = { 0 : 'zero', 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 : 'ninteen', 20 : 'twenty', \
30 : 'thirty', 40 : 'fourth', 50 : 'fifty', 60 : 'sixty', \
70 : 'seventy', 80 : 'eighty', 90 : 'ninty' }
k = 1000
m = k * 1000
if (num < 20):
print(d[num])
if (num < 100):
if num % 10 == 0:
print(d[num])
else:
print(d[num // 10 * 10] + '' + d[num % 10])
if (num < k):
if num % 100 == 0:
print(d[num // 100] + ' hundred')
else:
print(d[num // 100] + ' hundred ' + int_to_en(num % 100))
if (num < m):
if num % k == 0:
print(int_to_en(num // k) + ' thousand')
else:
print(int_to_en(num // k) + ' thousand, ' + int_to_en(num % k))
num=int(输入('请输入一个介于1和9999之间的整数:'))
定义整数到整数(num):
d={0:'零',1:'一',2:'二',3:'三',4:'四',5:'五'\
6:'六',7:'七',8:'八',9:'九',10:'十',\
11:'十一',12:'十二',13:'十三',14:'十四',\
15:'十五',16:'十六',17:'十七',18:'十八',\
19:'九点',20:'二十点',\
30:'三十',40:'四',50:'五十',60:'六十',\
70:'七十',80:'八十',90:'九十'}
k=1000
m=k*1000
如果(数值<20):
打印(d[num])
如果(数值<100):
如果num%10==0:
打印(d[num])
其他:
打印(d[num//10*10]+''+d[num%10])
如果(num
我以前创建过这样一个函数。虽然不完美,但效果相当不错:
def word_form(number):
"""word_form(number) -> string
Returns the word form of the number.
>>> word_form(32)
'thirty-two'
>>> word_form(123)
'one hundred twenty-three'
The highest number it is capable of converting is:
999,999,999,999,999,999,999,999,999,999,999"""
ones = ("", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine")
tens = ("", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety")
teens = ("ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen")
levels = ("", "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion", "septillion", "octillion", "nonillion")
word = ""
#number will now be the reverse of the string form of itself.
num = reversed(str(number))
number = ""
for x in num:
number += x
del num
if len(number) % 3 == 1: number += "0"
x = 0
for digit in number:
if x % 3 == 0:
word = levels[x / 3] + ", " + word
n = int(digit)
elif x % 3 == 1:
if digit == "1":
num = teens[n]
else:
num = tens[int(digit)]
if n:
if num:
num += "-" + ones[n]
else:
num = ones[n]
word = num + " " + word
elif x % 3 == 2:
if digit != "0":
word = ones[int(digit)] + " hundred " + word
x += 1
return word.strip(", ")
用法示例:
word_form(1)
>>> 'one'
word_form(999)
>>> 'nine hundred ninety-nine'
我以前创建过这样一个函数。虽然不完美,但效果相当不错:
def word_form(number):
"""word_form(number) -> string
Returns the word form of the number.
>>> word_form(32)
'thirty-two'
>>> word_form(123)
'one hundred twenty-three'
The highest number it is capable of converting is:
999,999,999,999,999,999,999,999,999,999,999"""
ones = ("", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine")
tens = ("", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety")
teens = ("ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen")
levels = ("", "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion", "septillion", "octillion", "nonillion")
word = ""
#number will now be the reverse of the string form of itself.
num = reversed(str(number))
number = ""
for x in num:
number += x
del num
if len(number) % 3 == 1: number += "0"
x = 0
for digit in number:
if x % 3 == 0:
word = levels[x / 3] + ", " + word
n = int(digit)
elif x % 3 == 1:
if digit == "1":
num = teens[n]
else:
num = tens[int(digit)]
if n:
if num:
num += "-" + ones[n]
else:
num = ones[n]
word = num + " " + word
elif x % 3 == 2:
if digit != "0":
word = ones[int(digit)] + " hundred " + word
x += 1
return word.strip(", ")
用法示例:
word_form(1)
>>> 'one'
word_form(999)
>>> 'nine hundred ninety-nine'
int\u to\u en
的返回值为None,这将导致代码中的串联失败,请尝试返回String
,然后串联结果
num=int(input('please enter an integer between 1 and 9999: '))
def int_to_en(num):
d = { 0 : 'zero', 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 : 'ninteen', 20 : 'twenty', \
30 : 'thirty', 40 : 'fourth', 50 : 'fifty', 60 : 'sixty', \
70 : 'seventy', 80 : 'eighty', 90 : 'ninty' }
k = 1000
m = k * 1000
if (num < 20):
return d[num]
if (num < 100):
if num % 10 == 0:
return d[num]
else:
return d[num // 10 * 10] + ' ' + d[num % 10]
if (num < k):
if num % 100 == 0:
return d[num // 100] + ' hundred'
else:
return d[num // 100] + ' hundred ' + int_to_en(num % 100)
if (num < m):
if num % k == 0:
return int_to_en(num // k) + ' thousand'
else:
return int_to_en(num // k) + ' thousand, ' + int_to_en(num % k)
print int_to_en(num)
num=int(输入('请输入一个介于1和9999之间的整数:'))
定义整数到整数(num):
d={0:'零',1:'一',2:'二',3:'三',4:'四',5:'五'\
6:'六',7:'七',8:'八',9:'九',10:'十',\
11:'十一',12:'十二',13:'十三',14:'十四',\
15:'十五',16:'十六',17:'十七',18:'十八',\
19:'九点',20:'二十点',\
30:'三十',40:'四',50:'五十',60:'六十',\
70:'七十',80:'八十',90:'九十'}
k=1000
m=k*1000
如果(数值<20):
返回d[num]
如果(数值<100):
如果num%10==0:
返回d[num]
其他:
返回d[num//10*10]+''+d[num%10]
如果(num
对于int\u to\u en
的返回值为None,这将导致代码中的串联失败,请尝试返回字符串
,然后串联结果
num=int(input('please enter an integer between 1 and 9999: '))
def int_to_en(num):
d = { 0 : 'zero', 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 : 'ninteen', 20 : 'twenty', \
30 : 'thirty', 40 : 'fourth', 50 : 'fifty', 60 : 'sixty', \
70 : 'seventy', 80 : 'eighty', 90 : 'ninty' }
k = 1000
m = k * 1000
if (num < 20):
return d[num]
if (num < 100):
if num % 10 == 0:
return d[num]
else:
return d[num // 10 * 10] + ' ' + d[num % 10]
if (num < k):
if num % 100 == 0:
return d[num // 100] + ' hundred'
else:
return d[num // 100] + ' hundred ' + int_to_en(num % 100)
if (num < m):
if num % k == 0:
return int_to_en(num // k) + ' thousand'
else:
return int_to_en(num // k) + ' thousand, ' + int_to_en(num % k)
print int_to_en(num)
num=int(输入('请输入一个介于1和9999之间的整数:'))
定义整数到整数(num):
d={0:'零',1:'一',2:'二',3:'三',4:'四',5:'五'\
6:'六',7:'七',8:'八',9:'九',10:'十',\
11:'十一',12:'十二',13:'十三',14:'十四',\
15:'十五',16:'十六',17:'十七',18:'十八',\
19:'九点',20:'二十点',\
30:'三十',40:'四',50:'五十',60:'六十',\
70:'七十',80:'八十',90:'九十'}
k=1000
m=k*1000
如果(数值<20):
返回d[num]
如果(数值<100):
如果num%10==0:
返回d[num]
其他:
返回d[num//10*10]+''+d[num%10]
如果(num
一旦您费心调用该函数,您遇到的下一个问题是您的if语句不是独占的。例如,仅输入5。。。
你看那5<20。
你打印“五”。
转到下一个if语句。果不其然,5<100。
您处理的数字越大。。。然后进入无限递归
您必须确保只执行这些if语句中的一条。对于除第一个以外的所有选项,请使用elif而不是if
要解决None问题,您可以适当地将print语句更改为return语句。在你回到主程序之前不要打印任何东西;其他调用只需在计算结果时附加结果,主程序即可立即打印整个字符串
为了节省大量时间,请学习。一旦您费心调用该函数,您遇到的下一个问题是您的if语句不是独占的。例如,仅输入5。。。 你看那5<20。 你打印“五”。 转到下一个if语句。果不其然,5<100。 您处理的数字越大。。。然后进入无限递归 您必须确保只执行这些if语句中的一条。对于除第一个以外的所有选项,请使用elif而不是if
要解决None问题,您可以适当地将print语句更改为<