我目前是一名初学者,正在学习软件开发,我的编程课上有一项任务是使用循环计算和显示阶乘。我得到了伪代码,必须将其翻译成真正的代码,并在REPL中进行测试,以确保它返回预期的结果。
我几乎做到了,但我遇到了两个似乎无法解决的问题。
1( 该函数在计算和之后返回一行额外的"无">
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(3(已经打印出来了,所以您不应该用调用它
print(calcFactorial(3))
用就可以了
calcFactorial(3)
没有打印功能。
您可能会考虑调用函数calc_and_print_factorial()
,以便清楚地表明,该函数已经完成了打印
区块报价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
附带说明一下:您可能需要考虑如何递归地实现它。也许这会在你的课上晚些时候出现,但这将是第一个例子
添加到blhsing的答案中,您应该在这些内置的打印"返回"值的方法之间进行选择。
第一种方式:
def calcFactorial(number):
... # <- Your function content
return factorial
然后,使用print()
调用函数,以获取显式返回的值,如return factorial
行中所示。有关更多详细信息,请参阅此参考:
print(calcFactorial(3))
第二种方式:
使用与其return
语句相同的函数定义,只需使用其实例语句调用函数即可:
calcFactorial(8)
默认情况下,python将打印不带print()
的返回值
第三种方式:
只需使用print()
方法调用函数(如果没有显式的return
语句,默认情况下会返回"None"(类似null(值(请勿在另一个print()
中使用print()
。
您的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
所以我有正确的答案,但多了一行"无",我想删除
您正在打印函数的返回值。在这种情况下,您没有使用return
语句指定返回值,因此函数会自动返回None
。
要解决此问题,您应该从函数中返回一个值。请注意,您不需要调用print()
来获得最终答案,因为REPL已经为您完成了这项工作。
请注意,REPL将自动为您打印返回值,因此您可以只键入calcFactorial(3)
而不是print(calcFactorial(3))
。
此外,您没有得到正确的答案。您应该得到6
而不是12
。看起来你正试图从number
开始倒计时,并将每个数字相乘。从1开始向上计数可以得到相同的结果。这将导致更简单的代码并避免错误。
如果您想了解为什么您的代码没有做正确的事情,请仔细查看factorial = factorial*number-count
,并思考用于计算结果的操作顺序。