我是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提供的提示,这让我更加困惑!请帮忙。任何反馈/建议总是有帮助的。谢谢!
答案 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