使用 Python3 中的循环计算阶乘

Calculating a factorial using loops in Python3

我目前正在学习软件开发作为初学者,我的编程任务 class 使用循环计算和显示阶乘。我得到了伪代码,必须将其转换为真实代码并在 REPL 中对其进行测试以确保它 return 是预期的结果。

我几乎搞定了,但我 运行 遇到了两个我似乎无法解决的问题。

1) 函数是return计算后多出一行"None"和

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

我当前的代码(return 正确答案)如下:

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 return如下:

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

所以我得到了正确的答案,但是我想删除额外的一行 "None"(我相信它与打印功能有关?)但我不知道如何正确格式化。 任何帮助将不胜感激。

你的 calcFactorial 函数没有明确地 return 一个值,所以默认情况下它会 return None,所以 print(calcFactorial(3)) 总是打印 None.

你应该使 calcFactorial 函数 return 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

So I have the correct answer but with an extra line of "None" which I would like to remove

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

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

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

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

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

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

调用它
print(calcFactorial(3))

只需用

调用它
calcFactorial(3)

没有打印功能。

您可能会考虑调用函数 calc_and_print_factorial() 以明确表示此函数已经打印

关于你的第二个问题:

Blockquote 2) The answer is displaying over multiple lines when I want it to display on a single line.

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

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

旁注:您可能想考虑如何递归地实现它。也许稍后会出现在您的 class 中,但这将是它的第一个首选示例。

添加到 ,您应该在这些内置方式之间进行选择以打印 "returned" 值。

第一种方式:

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

然后,使用 print() 调用您的函数以获得 显式 returned 值,如您在 return factorial 中所见线。 See this reference for more details:

print(calcFactorial(3))

第二种方式:

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

calcFactorial(8)

默认情况下,python 将打印没有 print()

的 returned 值

第三种方式:

只需调用该函数(没有明确的 return 语句,这将 return 默认为 "None" (类似 null 的)值,使用 print()方法。 不要在另一个print()中使用print()