我想写一个程序,接受一个1到9999之间的整数(包括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 : '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))
一旦您费心调用函数,您遇到的下一个问题是if语句不是互斥的。例如,仅输入5。。。 你看那5<;20。 你打印“五”。 转到下一个if语句。果然,5<;100。 你处理的数字越大。。。进入无限递归。
必须确保只执行其中一个if语句。对于除第一种以外的所有情况,请使用elif,而不是if。
若要解决“无”问题,可以将“打印”语句适当更改为“返回”语句。在返回到主程序之前不要打印任何内容;其他调用只是在计算结果时附加结果,主程序会立即打印整个字符串。
为了节省时间,请学习basic debugging。
int_to_en
的返回值为None,这将使代码中的连接失败,请尝试返回String
,然后连接结果。我以前创建过这样一个函数。虽然不完美,但效果很好:
用法示例:
相关问题 更多 >
编程相关推荐