这是我将数字转换成英文单词的代码。我有一个问题,我无法解决它。如果我输入0
,这应该会给我"zero"
。但是,如果我输入10
的任意倍数,它会给我'hundred zero'
而不是'hundred'
。
如果我删除if x == 0: return 'zero'
,如果我输入'zero'
,这将会给我'0'
。因此,我应该如何解决此'zero'
问题?
# Create a function that can spell out in English while inputting a whole number
def spelltowords(x):
digits_to_nineteen = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
decades = ['', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
if x < 1000000000:
if x < 100000000:
if x < 20000000:
if x < 1000000:
if x < 100000:
if x < 20000:
if x < 1000:
if x < 100:
if x < 20:
if x is 0:
if x < 0:
return 'negative' + ' ' + spelltowords(-1*x)
return 'zero'
return digits_to_nineteen[x]
else:
return decades[x // 10] + ' ' + digits_to_nineteen[x % 10]
else:
return digits_to_nineteen[x // 100] + ' ' + 'hundred' + ' ' + spelltowords(x % 100)
else:
return digits_to_nineteen[x // 1000] + ' ' + 'thousand' + ' ' + spelltowords(x % 1000)
else:
return decades[(x // 1000) // 10] + ' ' + digits_to_nineteen[(x // 1000) % 10] + ' ' + 'thousand' + ' ' + spelltowords(x % 1000)
else:
return digits_to_nineteen[(x // 1000) // 100] + ' ' + 'hundred' + ' ' + spelltowords((x // 1000) % 100) + ' ' + 'thousand' + ' ' + spelltowords(x % 1000)
else:
return digits_to_nineteen[x // 1000000] + ' ' + 'million' + ' ' + spelltowords(x % 1000000)
else:
return decades[(x // 1000000) // 10] + ' ' + digits_to_nineteen[(x // 1000000) % 10] + ' ' + 'million' + ' ' + spelltowords(x % 1000000)
else:
return digits_to_nineteen[(x // 1000000) // 100] + ' ' + 'hundred' + ' ' + spelltowords((x // 1000000) % 100)+ ' ' + 'million' + ' ' + spelltowords(x % 1000000)
else:
return 'over the limit!'
print(spelltowords(200))
上述代码的输出
>>> ================================ RESTART ================================
>>>
two hundred zero
>>>
答案 0 :(得分:0)
递归调用spelltowords(x % 100)
在x为200时调用带有0的拼写。使用0调用拼写将返回'zero'
。如果你真的想保留当前的实现,你可以将当前函数变成一个辅助函数并用这样的方法调用它:
def spelltowords(x):
if x == 0: return 'Zero'
if x < 0: return 'Negative ' + spelltowards_helper(-1*x)
return spelltowards_helper(x)
然后摆脱x is 0
和x < 0
个案。但是,我建议尝试找出更强大的解决方案。此外,无论如何,这两个案例都有错误:
if x is 0:
if x < 0:
return 'negative' + ' ' + spelltowords(-1*x)
return 'zero'
永远不会到达最里面的代码,x不能同时为0且小于0。
答案 1 :(得分:-1)
def spelltowords(x,inner=False):
digits_to_nineteen = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
decades = ['', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
if x < 1000000000:
if x < 100000000:
if x < 20000000:
if x < 1000000:
if x < 100000:
if x < 20000:
if x < 1000:
if x < 100:
if x < 20:
if x is 0:
if inner:
return ''
else:
return 'zero'
elif x < 0:
return 'negative' + ' ' + spelltowords(-1*x)
else:
return digits_to_nineteen[x]
else:
return decades[x // 10] + ' ' + digits_to_nineteen[x % 10]
else:
return digits_to_nineteen[x // 100] + ' ' + 'hundred' + ' ' + spelltowords(x % 100,inner=True)
else:
return digits_to_nineteen[x // 1000] + ' ' + 'thousand' + ' ' + spelltowords(x % 1000,inner=True)
else:
return decades[(x // 1000) // 10] + ' ' + digits_to_nineteen[(x // 1000) % 10] + ' ' + 'thousand' + ' ' + spelltowords(x % 1000,inner=True)
else:
return digits_to_nineteen[(x // 1000) // 100] + ' ' + 'hundred' + ' ' + spelltowords((x // 1000) % 100) + ' ' + 'thousand' + ' ' + spelltowords(x % 1000,inner=True)
else:
return digits_to_nineteen[x // 1000000] + ' ' + 'million' + ' ' + spelltowords(x % 1000000,inner=True)
else:
return decades[(x // 1000000) // 10] + ' ' + digits_to_nineteen[(x // 1000000) % 10] + ' ' + 'million' + ' ' + spelltowords(x % 1000000,inner=True)
else:
return digits_to_nineteen[(x // 1000000) // 100] + ' ' + 'hundred' + ' ' + spelltowords((x // 1000000) % 100,inner=True)+ ' ' + 'million' + ' ' + spelltowords(x % 1000000,inner=True)
else:
return 'over the limit!'
print(spelltowords(200))