我目前正作为一个初学者学习软件开发,并且在我的编程课上有一个任务,要使用循环来计算和显示阶乘。我已经获得了伪代码,必须将其转换为真实代码并在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
所以我有正确的答案,但要删除多余的一行“无”(我相信这与打印功能有关?),我不知道如何正确格式化。任何帮助将不胜感激。
您的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
您的函数calcFactorial(3)已经打印出来,因此您不应使用它来调用它
print(calcFactorial(3))
只需致电
calcFactorial(3)
没有打印功能。
为了清楚起见,您可能考虑调用函数calc_and_print_factorial()
,该函数已经在打印了
关于第二个问题:
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
附带说明:您可能想考虑如何以递归方式实现此目标。也许这会在您课程的后面出现,但这将是它的第一个入门示例。
所以我有正确的答案,但有一行我想删除的“无”
您正在打印函数的返回值。在这种情况下,您没有使用return
语句指定返回值,因此该函数自动返回None
。
要解决此问题,您应该从函数中返回一个值。请注意,您不需要呼叫print()
来获得最终答案,因为REPL已经为您完成了此操作。
注意,REPL将自动为您打印返回值,因此您只需键入calcFactorial(3)
而不是print(calcFactorial(3))
。
此外,您没有得到正确的答案。您应该得到6
而不是12
。看来您正在尝试从number
开始倒数并将每个数字相乘。通过从1开始计数,可以获得相同的结果。这将导致代码简单得多,并避免了错误。
[如果您想了解为什么代码未正确执行操作,请仔细查看factorial = factorial*number-count
,并在此处考虑用于计算结果的操作顺序。
添加到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()
。