使用Python3中的循环计算阶乘

问题描述 投票:0回答:3

我目前正作为一个初学者学习软件开发,并且在我的编程课上有一个任务,要使用循环来计算和显示阶乘。我已经获得了伪代码,必须将其转换为真实代码并在REPL中对其进行测试,以确保它返回预期的结果。

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

1)函数在计算之后返回额外的一行“ None”,并且

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

所以我有正确的答案,但要删除多余的一行“无”(我相信这与打印功能有关?),我不知道如何正确格式化。任何帮助将不胜感激。

python loops factorial
3个回答
0
投票

您的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

1
投票

您的函数calcFactorial(3)已经打印出来,因此您不应使用它来调用它

print(calcFactorial(3))

只需致电

calcFactorial(3)

没有打印功能。

为了清楚起见,您可能考虑调用函数calc_and_print_factorial(),该函数已经在打印了


1
投票

关于第二个问题:

Blockquote2)当我希望它显示在一行上时,答案显示在多行上。

您可以使用单个打印语句来解决它:

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

附带说明:您可能想考虑如何以递归方式实现此目标。也许这会在您课程的后面出现,但这将是它的第一个入门示例。


0
投票

所以我有正确的答案,但有一行我想删除的“无”

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

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

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

此外,您没有得到正确的答案。您应该得到6而不是12。看来您正在尝试从number开始倒数并将每个数字相乘。通过从1开始计数,可以获得相同的结果。这将导致代码简单得多,并避免了错误。

[如果您想了解为什么代码未正确执行操作,请仔细查看factorial = factorial*number-count,并在此处考虑用于计算结果的操作顺序。


0
投票

添加到blhsing's answer中,您应该在这些内置方法之间进行选择以打印“返回的”值。

第一种方式:

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

然后,使用print()调用函数以获取显式返回的值,如在return factorial行中所见。 See this reference for more details

print(calcFactorial(3))

第二种方式:

return语句具有相同的函数定义,只需使用其实例语句调用该函数:

calcFactorial(8)

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

第三种方式:

只需调用函数(不使用显式的return语句,默认情况下将返回“ None”(类似空值)的值),使用print()方法。 不要在另一个print()中使用print()

© www.soinside.com 2019 - 2024. All rights reserved.