Factorial和Fibonacci函数有效,但我无法使第三个函数起作用

时间:2018-03-19 20:59:42

标签: python function fibonacci factorial

 def Factorial(n):
    n=int(input("Input a number?"))
    if n==0:
        return 1
    else:
        return n * Factorial(n-1)    
def Fibonacci(num):
    i=0
    present=1
    previous=0
    while i<=num:
            nextterm=present+previous
            present=previous
            previous=nextterm
            i=i+1
            print("The fibonacci number for", i, "is", nextterm)
def CallFibOrFac(s):
    s=input('Fib or Fac?')
    if s == 'Fib':
        num=input('Up to what number?')
        print(Fibonacci(num))
    elif s == 'Fac':
        n=input('What number?')
        print(Factorial(n))   
CallFibOrFac()

我花了很多时间试图解决这个问题。我不明白我应该如何定义我的函数CallFibOrFac调用另外两个函数来解决Fibonacci或Factorial数。任何帮助/解释表示赞赏。谢谢!

这是我在课堂上留下的确切提示:

  

编写一个包含3个函数的Python程序:

     

第一个函数将被称为CallFibOrFac

     

它会收到一个字符串作为参数。

     

如果字符串是&#34; Fib&#34;它将调用第二个函数调用   斐波那契

     

如果字符串是&#34; Fac&#34;它将调用第三个函数调用   阶乘。

     

第二个函数打印Fibonacci中的前10个数字   序列

     

第三个函数打印10阶乘的值。

     

我们希望使第二和第三功能适用于其他情况   而不只是前10个数字,所以添加一个参数到斐波那契   函数和阶乘函数将告诉它要走多远   沿斐波那契序列或因子。

3 个答案:

答案 0 :(得分:3)

您的代码有一些错误:

  • 您的CallFibOrFac函数收到一个字符串但会覆盖它。任务说它只会传递字符串,按照给定的方式使用它;
  • 你要求对factorial方法的每次迭代都有一个新的输入,它应该在函数开始之前给出;
  • 在将字符串传递给Fibonacci函数之前,您忘记将字符串转换为int。

那就是说,所有纠正的功能应该是:

析因函数:

def Factorial(n):
    # Removed the input read
    if n==0:
        return 1
    else:
        return n * Factorial(n-1)

Fibonacci功能:

# It is working as expected
def Fibonacci(num):
    i=0
    present=1
    previous=0
    while i<=num:
        nextterm=present+previous
        present=previous
        previous=nextterm
        i=i+1
        print("The fibonacci number for", i, "is", nextterm)

CallFibOrFac

def CallFibOrFac(s):
    # Moved the number detection out of the ifs, since both will use it
    # Note that the task says it will _receive_ the string as parameter, so you don't need to ask here.
    num=int(input('Up to what number?'))
    if s == 'Fib':
        print(Fibonacci(num))
    elif s == 'Fac':
        print(Factorial(num))

注意:还有一些东西需要修复和/或改进,我刚刚处理过这个问题(正如@abarnert所说)

答案 1 :(得分:-1)

您定义CallFibOrFac以获取输入,但是当您在底部运行它时,您不会给它一个。将函数定义为def CallFibOrFac(),或在运行时为其提供字符串输入。通过询问带有input的字符串序列来编写脚本的方式意味着您在函数的定义中不需要s。当我摆脱定义中的s时,脚本运行对我很好,但请记住,你需要回复&#39; Fib&#39;或者&#39; Fac&#39;用标记来声明它们是字符串

此外,将来如果您发布了收到的错误消息

将会很有帮助

答案 2 :(得分:-2)

试试这个:

def Factorial(n):
    n=int(input("Input a number?"))
    if n==0:
        return 1
    else:
        return n * Factorial(n-1)

def Fibonacci(num):
    i=0
    present=1
    previous=0
    while i<=num:
        nextterm=present+previous
        present=previous
        previous=nextterm
        i=i+1
        print("The fibonacci number for", i, "is", nextterm)

def CallFibOrFac():
    s=input('Fib or Fac?')
    if s == 'Fib':
        num=input('Up to what number?')
        print(Fibonacci(int(num)))
    elif s == 'Fac':
        n=input('What number?')
        print(Factorial(int(n)))

CallFibOrFac()