使用 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()
。
我目前正在学习软件开发作为初学者,我的编程任务 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 中,但这将是它的第一个首选示例。
添加到
第一种方式:
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()
第三种方式:
只需调用该函数(没有明确的 return
语句,这将 return 默认为 "None" (类似 null 的)值,使用 print()
方法。 不要在另一个print()
中使用print()
。