我正在研究这个项目,当代码尝试返回“guess”变量时我不断遇到这个问题,而不是返回“guess”的值,它转到第9行,它将值转换为字符串for某种原因,然后返回。当我在某些东西中使用返回的值时,Python说该值为“NoneType”。
def ask_question(max_length, rowOrCol, guessNumber):
guess = raw_input("What is the "+rowOrCol+" number of your "+guessNumber+" guess? ")
try:
guess = int(guess)
if guess <= max_length:
return guess
else:
print "That number was too big, it must be no larger then " +str(max_length)
ask_question(max_length, rowOrCol, guessNumber)
except(TypeError):
print "Only numbers are accepted, please try again!"
ask_question(max_length, rowOrCol, guessNumber)
我用这一行调用函数:
first_guess_row = ask_question(4, "row", "first")
有什么我想念的吗?
答案 0 :(得分:4)
当然你所有的分支都需要返回......
{{1}}
在你回忆起这个函数之前......但你丢掉了它的返回值
答案 1 :(得分:2)
对于第9行和第12行,您正在进行递归调用。
递归调用是对函数内函数的全新调用。 假设第6行被执行,对ask_question的新调用返回一个值。但它在原始的ask_question调用中返回。
因此您需要更改
ask_question(max_length, rowOrCol, guessNumber)
第9行和第12行
return ask_question(max_length, rowOrCol, guessNumber)
检索该值。
另一个注意事项:递归调用为每次递归使用额外的内存,这可能导致速度减慢甚至崩溃python(如果你递归很多,具体取决于函数的大小)。我建议把你的代码放到这样的循环中:
continue_asking = True
while continue_asking:
guess = raw_input("What is the "+rowOrCol+" number of your "+guessNumber+" guess? ")
try:
# typecheck the guess value
guess = int(guess)
except (TypeError):
print "Only numbers are accepted, please try again!"
continue
if guess <= max_length:
return guess
else:
print "That number was too big, it must be no larger then " +str(max_length)
答案 2 :(得分:0)
这是另一种不使用递归函数调用的方法。
def ask_question(max_length, rowOrCol, guessNumber):
while True:
try:
guess = int(raw_input("What is the "+rowOrCol+" number of your "+guessNumber+" guess? "))
if guess <= max_length:
return guess
else:
print "That number was too big, it must be no larger then " +str(max_length)
except(ValueError):
print "Only numbers are accepted, please try again!"