我正在使用Python解决问题。以下是我要解释的问题的相关代码:
def no_to_words(n):
num = str(n)
s = ""
if(len(num) == 3):
hunds = n/100
ten = n%100
tens = ten/10
units = ten%10
if(n == 100):
return "one hundred"
if(hunds == 1):
s = s + "one hundred and"
elif(hunds == 2):
s = s + "two hundred and"
elif(hunds == 3):
s = s + "three hundred and"
elif(hunds == 4):
s = s + "four hundred and"
elif(hunds == 5):
s = s + "five hundred and"
elif(hunds == 6):
s = s + "six hundred and"
elif(hunds == 7):
s = s + "seven hundred and"
elif(hunds == 8):
s = s + "eight hundred and"
else:
s = s + "nine hundred and"
def final(t):
ans = t
return ans
if(ten == 11):
s = s + " eleven"
final(s)
print no_to_words(111)
现在,这个函数将一个三位数字转换成它的字母等效字符串(我还没有在这里发布整个代码)。现在,如果有一个类似于' 111'是输入,然后是' ten'的值。将是11.这意味着,新的价值是'现在将是一百一十一'因此,为了返回此值并阻止程序进一步检查'单位'价值(这里没有包含这些代码),我试着打电话给最后一个'功能,用'作为参数。那个'最后的'函数的作用是返回'的值。
然而, 111'作为输入,我得到了没有'作为我的输出。我的代码出了什么问题?
答案 0 :(得分:7)
虽然它看起来可能正确,但实际上并没有为每一个结果return
做好准备。
尽管111
在最后(111 / 10 == 11
,if ten == 11
)符合条件,但您实际上并未为其返回值。
要解决此问题,您需要执行以下操作:
return final(s) # If you don't return it here, you are just throwing it away.
到return
该分支的东西。虽然目前您正在调用final
并返回一个值,但它处于更深的范围内(对调用者只有return
)。要从整体函数返回,如果有意义,则需要“返回返回的值”。
此外,您获得None
的原因是因为没有返回值时,它等同于返回None
,因此这是您的输出。
答案 1 :(得分:4)
您忽略final()
函数的输出:
if(ten == 11):
s = s + " eleven"
final(s)
仅仅因为final()
返回某些东西并不意味着你的外部功能也会返回。嵌套函数与任何其他函数一样,它只将返回给调用者。
答案 2 :(得分:4)
当您致电final()
时,它会返回一个值,但您不会返回该值。
return final(s)
或只是
return s
答案 3 :(得分:3)
111 % 10 = 11
。
在if ten == 11:
分支机构中,您不会返回值。您需要return final(s)
在python中也不需要围绕if语句的parens,你通常应该删除它们。