我在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
答案 0 :(得分:1)
Python中的字符串也是一个数组。找到数字字符串的长度,并随着时间的推移迭代它们。
我建议你不要在第一次通过时使用辅助功能。如果它是一个要求让它工作然后重构。
这可能会有所帮助
foo = '12345'
n = len(foo)
total = 0
for i in range(n):
total += int(foo[i])
print total
答案 1 :(得分:1)
我们在collabedit上一起解决了你的问题,这就是结果。令人困惑的是,实际问题是:
以下是代码:
"""
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