实践使得完美的因子

时间:2016-03-03 04:33:25

标签: python

我是Python的新手,我正在接受老师要求的Codecademy课程。指令读取,定义一个以整数x作为输入的函数阶乘。

计算并返回该数字的阶乘。

对于我的代码,我说,

def factorial(x):
    if x == 1:
        return factorial('n' - 1)

当我点击保存并提交代码时,它给了我这个错误消息,

unsupported operand type(s) for -: 'str' and 'int'

我试着看一下codecademy Q和A论坛,但我找不到任何可行的东西。我甚至去了这个网站,查看了错误信息的含义。我查看了codecademy提供的提示,这让我更加困惑!请帮忙。任何反馈/建议总是有帮助的。谢谢!

5 个答案:

答案 0 :(得分:1)

您正试图从字母1中减去n的数字。相反,你应该从你给出的数字中减去1

答案 1 :(得分:0)

您正在将字符串'n'传递给您的阶乘方法。这有两个问题:

1)你不能通过尝试'n' - 1(字符串类型 - int类型)来执行减法操作。

2)您很可能打算通过x而不是'n'

接下来,检查阶乘的递归算法不正确。

你需要取一个数字,乘以再次调用阶乘法的回报,但是将数字减去1.然后你需要你的"退出"条件,即数字达到1以下的值时:

def factorial(x):
    if x < 1:
        return 1
    else:
        return x * factorial(x - 1)

答案 2 :(得分:0)

据我所知,你试图使用递归来建立一个阶乘函数。您的代码有一些问题:

def factorial(x):
    if x == 1:
        return factorial('n' - 1)

首先,在第3行,您试图从'n'(整数)中减去1(一个字符串)。删除引号以解决此问题。

其次,(如果我之前的陈述是正确的),您的函数将输入视为x,而不是n。您可能正在尝试:

def factorial(x):
    if x == 1:
        return factorial(x - 1)

答案 3 :(得分:0)

错误表明您正在尝试操作两种不同类型的东西,整数和字符串。 Ans似乎你的函数“factorial”只有在你给它一个整数1时才能工作。你可以用while循环来做到这一点; (请记住您想要操纵的事物的类型)。

def factorial(x):
  n=1
  total = x
  last_int = x
  while n < total:
     x = x * (last_int-1)
     n += 1
     last_int -= 1
  return x     


if __name__ == "__main__":
  while 1:
    number = raw_input("enter number: ")
    result = factorial(int(number))       
    print 'factorial number for ' + str(number) + ' is ' + str(result)

答案 4 :(得分:0)

还有另一种方法可以解决这个问题。您可以使用带负值-1的范围,并将x乘以1:

def factorial (x):
    total = 1
    if x < 1:
        return total
    else:
        for i in range(x, 0, -1):
        total *= i
    return total