簡體   English   中英

在 Python3 中使用循環計算階乘

[英]Calculating a factorial using loops in Python3

我目前正在作為初學者學習軟件開發,並且我在編程 class 以使用循環計算和顯示階乘時有一個任務。 我已經獲得了偽代碼,並且必須將其轉換為真實代碼並在 REPL 中對其進行測試,以確保它返回預期的結果。

我幾乎擁有它,但我遇到了兩個我似乎無法解決的問題。

1) function 在計算后返回額外的“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

所以我有正確的答案,但我想刪除額外的“無”行(我相信它與打印 function 有關?)我不知道如何正確格式化它。 任何幫助將非常感激。

你的 function calcFactorial(3) 已經打印了,所以你不應該用

print(calcFactorial(3))

只需調用它

calcFactorial(3)

沒有打印 function。

您可能會考慮調用 function calc_and_print_factorial()以明確說明,這個 function 已經進行了打印

關於你的第二個問題:

Blockquote 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

附帶說明:您可能想考慮如何遞歸地實現它。 也許稍后會出現在您的 class 中,但這將是它的第一個首選示例。

添加到blhsing 的答案中,您應該在這些內置方式之間進行選擇以打印“返回”值。

第一種方式:

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

然后,使用print()調用 function 以獲取顯式返回的值,如在return factorial行中所見。 有關更多詳細信息,請參閱此參考

print(calcFactorial(3))

第二種方式:

具有相同的 function 定義及其return語句,只需調用 function 及其實例語句:

calcFactorial(8)

默認情況下,python 將打印返回的值而不使用print()

第三種方式:

只需使用print()方法調用 function (沒有顯式的return語句,這將默認返回一個“None”(類似 null)值)。 不要在另一個print()中使用print() () 。

您的calcFactorial function 沒有顯式返回值,因此默認情況下它將返回None ,因此print(calcFactorial(3))將始終打印None

最后,您應該使calcFactorial function 返回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

所以我有正確的答案,但我想刪除額外的“無”行

您正在打印 function 的返回值。 在這種情況下,您沒有使用return語句指定返回值,因此 function 會自動返回None

要解決此問題,您應該從 function 返回一個值。 請注意,您不需要調用print()來獲得最終答案,因為 REPL 已經為您完成了這項工作。

請注意,REPL 會自動為您打印返回值,因此您只需鍵入calcFactorial(3)而不是print(calcFactorial(3))

此外,您沒有得到正確的答案。 你應該得到6而不是12 看起來您正在嘗試從number倒數並將每個數字相乘。 您可以通過從 1 開始計數來獲得相同的結果。這將導致代碼更簡單並避免錯誤。

如果您想了解為什么您的代碼沒有做正確的事情,請仔細查看factorial = factorial*number-count並考慮此處用於計算結果的操作順序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM