Python新手问题 - 我无法弄清楚我的问题究竟是什么

时间:2010-11-01 05:55:45

标签: 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)

当我尝试运行此程序时,输入数字后出现以下错误:

  

输入数字:5

     

n = 5

     

追踪(最近一次呼叫最后一次):

     

文件“fibonacci.py”,第11行,in   

fib(n)
     

文件“fibonacci.py”,第4行,在fib

return n * fib(n - 1)
     

TypeError:不支持的操作数类型   for - :'str'和'int'

如果我运行解释器并仅导入函数(后面没有代码),请提供n的值并使用值作为参数调用函数,它可以工作。

我尝试将输入转换为int,因为我认为这是一个字符串问题,但没有骰子。我真的不知道自己哪里出错了,所以如果你能够对这个问题有所了解,我们将不胜感激。

我很乐意将问题标题更改为具体的内容,但我真的不知道问题是什么。

4 个答案:

答案 0 :(得分:6)

raw_input()返回一个字符串,正如您所推测的那样。但是,int(n)不会将n的值更改为整数,而是返回转换后的值。你需要这样做:

n = int(n)

代替。

答案 1 :(得分:3)

只需做一个小改动:

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

int转换采用从raw_input获取的字符串并返回一个整数。您需要将返回值传递给fib(..)。

int_obj = int(str_obj)

答案 2 :(得分:3)

问题是raw_input提供的是字符串,而不是整数。我可以建议首先将整数值放入n

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

避免n = int(n),因为在更长的代码段中,当您回到它时,不清楚n类型是什么,并且您不需要原始字符串值。

你需要更深入的理解是Python是强类型的 - 它关心什么类型的东西,但它也是动态类型的,所以n可以从持有字符串值变为持有整数值。但是Python仍在跟踪所持有的内容,所以当你将raw_input的返回值放入n时,Python知道它是一个字符串,所以将该字符串乘以一个数字是没有意义的并且返回错误。

答案 3 :(得分:0)

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