[英]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.