我正在做一系列的课业项目,这是其中一个挑战:
Factorial Finder
The Factorial of a positive integer, n, is defined as the product of the sequence n, n-1, n-2, ...1 and the factorial of zero, 0, is defined as being 1.
Solve this using both loops and recursion.
num = input("Type number: ")
num1 = str(float(num) - float(1))
fnum = float(num) * float(num1)
while (num1 != 1):
num1 = str(float(num) - float(1))
fnum = float(num) * float(num1)
else:
print(fnum)"
但是在运行代码时,你输入一个数字,程序什么也不输出,它就在那里。我怎样才能解决这个问题?你知道吗
num1 != 1
永远不会为false,因为num1
是一个字符串。你也可以从num
中减去1,因为1
本身是不会改变的,所以你也永远不会达到1
,那样的话,如果num
从5开始,那么num1
永远是4
。你知道吗除此之外,您也从不与前面的
fnum
值相乘,而是用num * num1
结果替换每个迭代的fnum
。如果你的循环工作正常,你最终会得到num * 1
,错误的答案。你知道吗我不知道你为什么用字符串,把它作为一个数字。如果您坚持使用
float
值,请考虑到可能存在精度问题;最好检查小于等于1的数字。从num1
中减去1进行倒计时。无需每次都将所有内容转换为float()
;一旦有了浮点数,请坚持:但是,赋值告诉您使用整数。现在可以很容易地将上述内容转换为使用整数:
最后,我将在
range()
上使用一个for
循环。不管你用n * n - 1 * n - 2 * ... * 1
还是1 * ... * n - 2 * n - 1 * n
,结果都是一样的:这不起作用,因为num永远不会递减。如果num是5,那么while循环中num1将始终是4。同样,fnum总是20。你知道吗
如果您想要一个像5x4x3x2x1这样的模式,num实际上需要在while循环中减少1。你知道吗
还有,你为什么要把一切都变成一根绳子?如果num1是字符串,那么while循环甚至不会开始。你知道吗
相关问题 更多 >
编程相关推荐