任何人都可以告诉我我的功能有什么问题吗?

问题描述:

我正在处理这个项目,当代码试图返回“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") 

有什么我失踪?

+1

尝试在这条线(9号线)的开头加上'return'声明;) – alfasin

当然

所有的分支需要返回....

... 
     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)