使用Python3中的循环计算阶乘



我目前是一名初学者,正在学习软件开发,我的编程课上有一项任务是使用循环计算和显示阶乘。我得到了伪代码,必须将其翻译成真正的代码,并在REPL中进行测试,以确保它返回预期的结果。

我几乎做到了,但我遇到了两个似乎无法解决的问题。

1( 该函数在计算和之后返回一行额外的"无">

2( 当我希望答案显示在一行上时,它会显示在多行上。

我当前的代码(返回正确答案(如下:

def calcFactorial(number):
factorial = 1
print(str(number)+"! =", number)
for count in range (1, number):
if number-count > 0:
factorial = factorial*number-count
print("x", str(number-count))
factorial = factorial*number
print("=", factorial)

当我测试时,例如使用3,REPL返回以下内容:

>>> print(calcFactorial(3))
3! = 3
x 2
x 1
= 12
None

所以我有正确的答案,但有一行"无",我想删除它(我认为这与打印功能有关?(,我不知道如何正确格式化它。任何帮助都将不胜感激。

您的函数calcFactorial(3(已经打印出来了,所以您不应该用调用它

print(calcFactorial(3))

用就可以了

calcFactorial(3)

没有打印功能。

您可能会考虑调用函数calc_and_print_factorial(),以便清楚地表明,该函数已经完成了打印

关于您的第二个问题:

区块报价2( 当我希望答案显示在一行上时,它会显示在多行上。

您可以使用单一打印语句修复它:

def calcFactorial(number):
factorial = 1
string = str(number) + "! = " + str(number)
for count in range (1, number):
if number-count > 0:
factorial = factorial*(number-count)
string = string + " x " + str(number-count)
factorial = factorial * number
print(string + " = " + str(factorial))

这将给你:

IN: calcFactorial(3)
OUT: 3! = 3 x 2 x 1 = 6

附带说明一下:您可能需要考虑如何递归地实现它。也许这会在你的课上晚些时候出现,但这将是第一个例子

添加到blhsing的答案中,您应该在这些内置的打印"返回"值的方法之间进行选择。

第一种方式:

def calcFactorial(number):
... # <- Your function content
return factorial

然后,使用print()调用函数,以获取显式返回的值,如return factorial行中所示。有关更多详细信息,请参阅此参考:

print(calcFactorial(3))

第二种方式:

使用与其return语句相同的函数定义,只需使用其实例语句调用函数即可:

calcFactorial(8)

默认情况下,python将打印不带print()的返回值

第三种方式:

只需使用print()方法调用函数(如果没有显式的return语句,默认情况下会返回"None"(类似null(值(请勿在另一个print()中使用print()

您的calcFactorial函数没有显式返回值,因此默认情况下会返回None,因此print(calcFactorial(3))将始终打印None

您应该使calcFactorial函数在末尾返回factorial作为结果:

def calcFactorial(number):
factorial = 1
print(str(number)+"! =", number)
for count in range (1, number):
if number-count > 0:
factorial = factorial*number-count
print("x", str(number-count))
factorial = factorial*number
print("=", factorial)
return factorial

所以我有正确的答案,但多了一行"无",我想删除

您正在打印函数的返回值。在这种情况下,您没有使用return语句指定返回值,因此函数会自动返回None

要解决此问题,您应该从函数中返回一个值。请注意,您不需要调用print()来获得最终答案,因为REPL已经为您完成了这项工作。

请注意,REPL将自动为您打印返回值,因此您可以只键入calcFactorial(3)而不是print(calcFactorial(3))

此外,您没有得到正确的答案。您应该得到6而不是12。看起来你正试图从number开始倒计时,并将每个数字相乘。从1开始向上计数可以得到相同的结果。这将导致更简单的代码并避免错误。

如果您想了解为什么您的代码没有做正确的事情,请仔细查看factorial = factorial*number-count,并思考用于计算结果的操作顺序。

最新更新