TypeError:无法转换' int'在Fib中隐含地反对str

时间:2015-10-23 23:41:00

标签: python

我在Python中使用类似Fibonacci的序列。然后我必须将结果数字的所有数字相加,然后取这些数。

这是我的代码:

def fibSum(n):
    for x in str(n):

        x, n = x, x+int(n)
        print(x)
    print("The sum is: " + n)


def fib(n):
    total = 0
    a, b = 1, 1
    for i in range(0, n):
        a, b = b, a+b
        # print (a)
        if a % 2 == 0:
            total += a
            print("sum = " + str(total))
            return fibSum(total)
fib(10)

第5行出现问题,如果我使用str代替int,则会说:

x,n = x,x+ int(n)
TypeError: Can't convert 'int' object to str implicitly

4 个答案:

答案 0 :(得分:1)

Python中的字符串也是一个数组。找到数字字符串的长度,并随着时间的推移迭代它们。

我建议你不要在第一次通过时使用辅助功能。如果它是一个要求让它工作然后重构。

这可能会有所帮助

foo = '12345'
n = len(foo)

total = 0
for i in range(n):
     total += int(foo[i])

print total

答案 1 :(得分:1)

我们在collabedit上一起解决了你的问题,这就是结果。令人困惑的是,实际问题是:

  1. 将fib计算到2015年偶数序列
  2. 仅添加偶数
  3. 使用最终总和,将每个单独的数字相加
  4. 以下是代码:

    """
    A generator that yields fib numbers
    """
    def fibonacci():
        a, b = 0, 1
        while True:
            yield a
            a, b = b, a + b
    
    # Instantiate the generator
    f = fibonacci()
    
    # Some vars to hold stuff
    counter = 0
    the_sum = 0
    
    # Use our generator and loop
    for x in f:
        # Bonus points for printing
        print x
    
        # If it is an even number
        if x % 2 == 0:
            # Add it up
            the_sum += x
    
            # Increment counter so we don't go too far
            counter += 1
    
            # Are we there yet?
            if (counter == 2015): break
    
    # You don't want the final fib you want the sum of each
    # number in the final fib
    the_answer = 0
    
    # Split the fib number into individual numbers
    for n in list(str(the_sum)):
        the_answer += int(n) # Add each number together
    
    # Tada
    print the_answer
    

答案 2 :(得分:0)

打印int时,必须先将其转换为字符串。尝试将print语句更改为:

print("The sum is: " + str(n))

答案 3 :(得分:0)

如果您尝试print想要str的内容,并且想要添加您想要的内容int,那么+的工作方式会有所不同那些类型:

a = 1 + 2  # a=3
b = "1" + "2" # b="12"

执行此操作时:

x,n = x,x+ int(n)

如果第二个x是一个字符串,您将尝试将int(n)(这是一个整数)添加到字符串中,但这不起作用。修复它会产生这个:

>>> for x in str("12"):
...     x, n = x, int(x)+int(n)  # Forcing both values into numbers
...     print(x)
... 
1
2
>>> 

N.B。我不知道以上是否是您的预期结果。该函数似乎试图迭代一个字符串,因此它会将该字符串分解为一个字符数组。然后,对于每一个你正在做一些奇怪的元组数学与铸造。这很混乱。即:

>>> for x in str(12):
...     print(x)
... 
1
2

>>> for x in 12:
...     print(x)
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

我认为您要么不想在那里使用for循环,要么您需要输入可迭代。您可能正在寻找:

>>> from functools import reduce
>>> result = reduce(lambda x, y: int(x) + int(y), str(12), 0)
>>> result
3

这将使你的功能:

def fibSum(n):
    s = reduce(lambda x, y: int(x) + int(y), str(n), 0)
    print("The sum is: " + n)

reduce(当使用加法函数时)是一种在迭代时累积值的方法。这相当于:

x = 0
for n in int_list:
    x = x + n
return x
相关问题