首页 文章

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

提问于
浏览
0

这个问题在这里已有答案:

我是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 Traceback(最近一次调用最后一次):文件“fibonacci.py”,第11行,在fib(n)中
文件“fibonacci.py”,第4行,在fib返回n * fib(n - 1)
TypeError:不支持的操作数类型 - :'str'和'int'

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

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

我想把问题 Headers 改为特定的东西,但我真的不知道问题是什么 .

4 回答

  • 3

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

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

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

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

  • 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: ')

相关问题