2016-03-03 84 views
0

我是Python新手,我正在學習我的老師所需的Codecademy課程。讀取指令,定義一個函數因式,它將整數x作爲輸入。練習使完美階乘

計算並返回該數的階乘。

對於我的代碼,我把,

def factorial(x): 
    if x == 1: 
     return factorial('n' - 1) 

當我點擊保存並提交代碼,它給了我這個錯誤信息,

unsupported operand type(s) for -: 'str' and 'int' 

我試圖尋找在Codecademy網站Q和A論壇,但我沒有發現任何可行的。我甚至在這個網站上查找了錯誤信息的含義。我看着codecademy提供的提示,它讓我更加困惑!請幫忙。任何反饋/建議總是有幫助的。謝謝!

+0

爲什麼你有''n''?首先,這是一個'String',而不是對變量'n'的引用。此外,(如果我以前的陳述是真的),你把整數'x'作爲輸入,而不是'n'。 – AMACB

回答

1

您正試圖從字母n中減去數字1。相反,你應該從你得到的數字中減去1

0

您正在將字符串'n'傳遞給您的因子方法。有兩個問題:

1)您不能通過嘗試執行減法操作'n' - 1(字符串類型 - int類型)。

2)你很可能意味着通過x而不是'n'

接下來,您的用於檢查階乘的遞歸算法不正確。

您需要將數字乘以再次調用factorial方法的回報,但將該數字減去1.但是,您需要「退出」條件,即數字達到低於1的值時:

def factorial(x): 
    if x < 1: 
     return 1 
    else: 
     return x * factorial(x - 1) 
0

據我可以告訴你,你正試圖使用​​遞歸作出階乘函數。您的代碼有幾個問題:

所有的
def factorial(x): 
    if x == 1: 
     return factorial('n' - 1) 

首先,在第3行你想減去1(整數)'n'(字符串)。刪除引號來解決這個問題。其次,(如果我以前的陳述是正確的),你的函數輸入爲x,而不是n。你可能試圖這樣做:

def factorial(x): 
    if x == 1: 
     return factorial(x - 1) 
0

錯誤表明你正在嘗試操縱不同類型的整數和字符串。 Ans也似乎你的函數「factorial」只會在你給它一個整數1時才起作用。你可以簡單地用while循環來做這件事; (請記住你想操縱的東西的類型)。

def factorial(x): 
    n=1 
    total = x 
    last_int = x 
    while n < total: 
    x = x * (last_int-1) 
    n += 1 
    last_int -= 1 
    return x  


if __name__ == "__main__": 
    while 1: 
    number = raw_input("enter number: ") 
    result = factorial(int(number))  
    print 'factorial number for ' + str(number) + ' is ' + str(result) 
0

還有另一種方法來解決任務。您可以使用範圍爲負的步-1並從x乘以1:

def factorial (x): 
    total = 1 
    if x < 1: 
     return total 
    else: 
     for i in range(x, 0, -1): 
     total *= i 
    return total