2014-09-20 187 views
-1

我试图打印阶乘的一个数字,我想知道这是怎么回事错了,当我在做什么,而不是Python和阶乘

fact *= j+1

我总是得到0作为输出,当我尝试了评论部分。这是什么原因,难道他们不应该是同一件事吗?或者我在错误的语法?

test = int(raw_input()) 
while test: 
    test = test-1 
    num = int(raw_input()) 
    fact = 1 
    for j in range(num):  
     fact *= j+1    # fact *= j 
           # j += 1 
    print fact 

回答

2

Becasue 0次任意数为零。数字0和num-1之间

>>> 0 * 1 
0 
>>> 0 * 1 * 2 * 3 
0 

range(num)回报列表:

>>> range(5) 
[0, 1, 2, 3, 4] 

如果要排除0,则需要使用range(1, n)

>>> range(1, 5) 
[1, 2, 3, 4] 

BTW,在标准库,有math.factorial

>>> import math 
>>> math.factorial(4) 
24 
1

range(num)返回[0, 1, ... , num-1]

这样:

fact *= j 
j += 1 

在第一步乘以0

而:

fact *= j+1 

开始使用J + 1

0

你可以使用Python例如阶乘函数: -

进口数学

math.factorial(数量)#这将返回一个数字

的阶乘