2016-08-17 110 views
-2

我開始學習Python,我有一小部分代碼需要用戶輸入的階乘。我試圖理解發生了什麼的邏輯,以便更好地理解過程。爲什麼當我改變輸出變化的一個變量的位置? (我使用python 2)初學者的因子代碼

user_input = input("enter a positive number") 

for i in range(user_input): 
    product = 1  #the output changes when I move it here instead of above the for loop 
    product = product * (i + 1)  
    print(product) 
+2

因爲在每次循環wokr,你product'如果你這樣做外循環,你之前的環跑了第一隻設置'product' 1'設置爲1。時間。 –

回答

1

通過將

product = 1 

內循環,要重新初始化的總價值循環的每次迭代。

如果用戶要輸入3, 它會顯示1, 2, 3,因爲每次迭代只需創建一個值爲1的變量乘積並乘以(迭代器+1)即(1 *(迭代器+1))。

如果你把

product = 1 

外循環,總價值將只在開始時初始化爲1,您將能夠正確總結階乘的值。

如果用戶輸入3作爲輸入一遍,它會顯示1, 2, 6,因爲它不再乘以(1 *(迭代器+ 1)),但(以前的總和*(迭代器+ 1))

0

如果是在循環,這意味着每次循環迭代,產品將向1.所以,你最終獲得相同的結果,如果你跑了剛剛被重置循環的最終迭代。換句話說,產品不會積累。

0

這是因爲每一次的循環運行,你設置:

產品= 1個

0

產品是在循環的每個迭代復位爲1。

1

環路是這樣的:

user_input = input("enter a positive number") 

for i in range(user_input): 
    product = 1     #Set product to 1 
    product = product * (i + 1) #Increase product 
    print(product)    #Print the product 

每個循環的product值將做計算之前重置回1

迴路1
產物= 1
產物= 1 *(1 + 1)= 2
迴路2
產物= 1
產物= 1 *(1 + 2)= 3

1

這個心不是要回答你的問題......但我發現階乘是最容易想到遞歸

def factorial(n): 
    #base case if n is 0 or 1 : 0! == 1! = 1 
    if n in (1,0): return 1 
    #recursive case : otherwise n! == n*(n-1)! 
    return n*factorial(n-1) 
0

我認爲這是你想要做的。

user_input = int(input("enter a positive number")) 
product = 1 
for i in range(user_input): 
    product = product * (i + 1)  
    print(product) 

但是當你把產品= 1進入循環,每次循環開始產品= 1,它刪除以前的生產。這樣

user_input = int(input("enter a positive number")) 
for i in range(user_input): 
    product = i + 1 
    print(product)