为什么我的阶乘循环没有结束?

2024-05-19 20:54:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一系列的课业项目,这是其中一个挑战:

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)"

但是在运行代码时,你输入一个数字,程序什么也不输出,它就在那里。我怎样才能解决这个问题?你知道吗


Tags: andofthe项目finderisasfloat
2条回答

num1 != 1永远不会为false,因为num1是一个字符串。你也可以从num中减去1,因为1本身是不会改变的,所以你也永远不会达到1,那样的话,如果num从5开始,那么num1永远是4。你知道吗

除此之外,您也从不与前面的fnum值相乘,而是用num * num1结果替换每个迭代的fnum。如果你的循环工作正常,你最终会得到num * 1,错误的答案。你知道吗

我不知道你为什么用字符串,把它作为一个数字。如果您坚持使用float值,请考虑到可能存在精度问题;最好检查小于等于1的数字。从num1中减去1进行倒计时。无需每次都将所有内容转换为float();一旦有了浮点数,请坚持:

num = float(num)
num1 = num - 1
fnum = num * num1
while num1 > 1: 
    num1 = num1 - 1
    fnum = fnum * num1

但是,赋值告诉您使用整数。现在可以很容易地将上述内容转换为使用整数:

num = int(num)
num1 = num - 1
fnum = num * num1
while num1 > 1: 
    num1 = num1 - 1
    fnum = fnum * num1

最后,我将在range()上使用一个for循环。不管你用n * n - 1 * n - 2 * ... * 1还是1 * ... * n - 2 * n - 1 * n,结果都是一样的:

num = int(num)
fnum = 1
for i in range(2, num + 1):
    fnum = fnum * i

这不起作用,因为num永远不会递减。如果num是5,那么while循环中num1将始终是4。同样,fnum总是20。你知道吗

如果您想要一个像5x4x3x2x1这样的模式,num实际上需要在while循环中减少1。你知道吗

还有,你为什么要把一切都变成一根绳子?如果num1是字符串,那么while循环甚至不会开始。你知道吗

相关问题 更多 >