2010-11-01 115 views
0

我對Python完全陌生,我一直試圖用它製作一個斐波那契程序。Python新手問題 - 我無法弄清楚我的問題到底是什麼

def fib(n): 
    print 'n =', n 
    if n > 1: 
     return n * fib(n - 1) 
    else: 
     print 'end of the line' 
    return 1 

n = raw_input('Input number: ') 
int(n) 
fib(n) 

當我嘗試運行這個程序,我得到輸入號碼後出現以下錯誤:

Input number: 5

n = 5

Traceback (most recent call last):

File "fibonacci.py", line 11, in

fib(n) 

File "fibonacci.py", line 4, in fib

return n * fib(n - 1) 

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

如果我跑瞭解釋和進口只是功能(無後它的代碼),提供n的值並以該值作爲參數調用該函數,它可以工作。

我試圖將輸入轉換爲int,因爲我認爲這是一個字符串問題,但沒有骰子。我真的不知道我哪裏出了問題,所以如果你可以請點亮這個主題,它將非常感激。

我很想將問題標題改爲特定的內容,但我並不真正瞭解問題所在。

+0

請提供下一次 – 2017-11-15 08:08:34

回答

3

問題是raw_input提供的是字符串,而不是整數。我可以建議只是把整數值到n擺在首位:

n = int(raw_input('Input numver: ')) 
fib(n) 

避免n = int(n)中的代碼一長段那就不清楚,當你回來吧n是什麼類型的,你有沒有需要原始字符串值。

你需要更深入的理解是,Python是強類型的 - 它關心的是什麼類型的一切,但它也是動態類型的,所以n可以從保持一個字符串值改變爲保持一個整數值。但是Python仍在追蹤所持有的內容,所以當你將返回值raw_input置於n時,Python知道它是一個字符串,因此將該字符串乘以一個數字是沒有意義的,並返回一個錯誤。

+0

的問題,我會接受這個作爲答案有意義的標題。我喜歡你的解釋和你的答案。 – 2010-11-01 06:20:21

6

raw_input()返回一個字符串,正如你猜測的那樣。但是,int(n)不會將n的值更改爲整數,而是會返回轉換後的值。您需要做:

n = int(n) 

改爲。

3

只是做一個小的變化:

n = raw_input('Input number: ') 
n = int(n) 
fib(n) 

的int的轉換需要您的raw_input從得到的字符串,並返回一個整數。您需要將返回值傳遞給fib(..)。

int_obj = int(str_obj) 
0

使用int(raw_input('Input number: '))代替raw_input('Input number: ')

相關問題