任何人都可以告诉我我的功能有什么问题吗?
问题描述:
我正在处理这个项目,当代码试图返回“guess”变量时,我不断收到这个问题,而不是返回“guess”的值,它会将第9行转换为字符串原因,然后返回。当我去使用返回的值时,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")
有什么我失踪?
答
当然
所有的分支需要返回....
...
else:
print "That number was too big, it must be no larger then " +str(max_length)
return ask_question(max_length, rowOrCol, guessNumber)
except(TypeError):
print "Only numbers are accepted, please try again!"
return ask_question(max_length, rowOrCol, guessNumber)
你回顾该功能前...但你扔掉它的返回值
答
这里的另一种方法,而无需使用递归函数调用。
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!"
答
的线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)
尝试在这条线(9号线)的开头加上'return'声明;) – alfasin