【问题标题】:Python newbie question - I can't figure out what my problem is exactly [duplicate]Python新手问题-我无法弄清楚我的问题到底是什么[重复]
【发布时间】:2011-05-03 06:53:43
【问题描述】:

我对 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 中

return n * fib(n - 1)

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

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

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

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

【问题讨论】:

  • 下次请为问题提供有意义的标题

标签: python


【解决方案1】:

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

n = int(n)

改为。

【讨论】:

    【解决方案2】:

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

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

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

    您需要更深入地了解 Python 是强类型的 - 它关心所有内容的类型,但它也是动态类型的,因此 n 可以从保存字符串值更改为保存整数值。但是 Python 仍在跟踪所持有的内容,因此当您将 raw_input 的返回值放入 n 时,Python 知道它是一个字符串,因此将该字符串乘以一个数字没有任何意义并返回错误。

    【讨论】:

    • 我会接受这个作为答案。我喜欢你的解释和你的回答。
    【解决方案3】:

    只需稍作改动即可:

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

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

    int_obj = int(str_obj)
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2015-04-05
        • 1970-01-01
        • 1970-01-01
        • 2013-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多