2017-04-16 64 views
0

我试图测试每个输入,然后返回数字被清除,然后做数学。例如,用户输入的是N而不是我希望输出的数字,而不是数字,而如果用户输入1,那么我希望它移动到下一个功能请求功率,然后做同样的事情,如果通过然后进入输出问题答案的最后部分。Python Recrusive Statement错误未定义

程序通过了非数字区域的错误,当它到达非常最后的功能时,它告诉我基础也没有功率被定义。

代码是用Python2和Python3编写的。所有的作品都很好。我主要使用python3。

[试验Picture/Error Msg][1]

# Below we are creating the recursive statement to do the math for us. We are calling Base and Power 
    # from the main function where the user Inputs the numbers. 
    def pow(base, power): 
     if power == 0: 
      return 1 
     if power == 1: 
      return base 
     else : 
      return base * pow(base, power - 1) 
    def determineBase(): 
     while True: 
      try: 
       base = int(input ('Please Enter A Base: ')) 
      except ValueError: 
       print("Please use whole numbers only. Not text nor decimals.") 
       continue 
      else: 
       return base 

    def determinePower(): 

     while True: 
      try: 
       power = int(input ('Please Enter A Power: ')) 
      except ValueError: 
       print("Please use whole numbers only. Not text nor decimals.") 
       continue 
      else: 
       return power 

    def main(): 
     determineBase() 
     determinePower() 
     pow(base,power) 
     print("The answer to",base,"to the power of", power,"is", pow(base,power),".") 
    main() 
+0

尝试把递归返回和下一个def之间的差距也可以,请你从截图中删除这些行,以便我可以看到整个堆栈跟踪? –

+0

@James_Hughes不会改变任何东西。我为你添加了一张不同的照片。第48行和第46行是出现错误的地方 – Yrroth

+0

问题不在于递归函数本身,请参见下文。 –

回答

0
def main(): 
    determineBase() 
    determinePower() 
    pow(base,power) 

在此,既不base也不power定义。什么,而不是你的意思是存储从这些函数调用的结果,并通过这些则:

def main(): 
    base = determineBase() 
    power = determinePower() 
    pow(base, power) 
+0

仍然没有解决什么,除非整个程序是错误的 – Yrroth

+0

*“没有解决”*意味着什么?你确切的错误信息和堆栈跟踪是什么? – poke

+0

该消息发布在映像下的初始文章中。声明变量仍然输出相同的问题。 – Yrroth

0

的问题不是递归函数里面,这是你的主函数中。

问题出现是因为您将base作为参数传递给pow()函数,而没有首先定义变量基数(随后在power中相同)。

换句话说,你需要沿着线的东西:

def main(): 
    base = determineBase() 
    power = determinePower() 
    pow(base,power) #this line could probably be removed 
    print("The answer to",base,"to the power of", power,"is", pow(base,power),".") 

至于目前,你不存储这两个函数的值。

+0

甚至改变那些仍然抛出的错误。 – Yrroth