该程序的目标是为函数'Fib'取两个值,并将它们通过一个Fibonacci序列,并在变量“序列”中添加条件。当它通过'check'函数并返回Limit Reached时,它会将偶数值添加到'final'列表中,然后在循环后打印出'final'的总和。为什么函数不打印列表中的值的总和?
问题是无论Fib取什么样的值,'final'总是以没有值为结束。我很新的节目,似乎无法弄清楚它为什么这样做?
def even(x):
v = list(str(x))[-1]
if v == '0' or v == '2' or v == '4' or v == '6' or v == '8':
return x
else:
return 0
def check(sequence):
for v in sequence:
if v >= 20:
return 'Limit Reached'
else:
return None
def Fib(x,y):
sequence = [x,y]
a = 0
b = 1
final = []
while len(sequence) < 100:
term = sequence[a] + sequence[b]
sequence.append(term)
if check(sequence) == 'Limit Reached':
for v in sequence:
final.apppend(even(v))
print sum(final)
break
a += 1
b += 1
你可能需要做一些新的代码: 在序列v: 如果V%2 == 0: final.append(V) – darkphoenix 2012-07-09 21:26:46
据我所知,Fib()函数对整数进行操作,所以更好的方法是进行位操作:'somevalue&1'什么是平等的1只有当数字是奇数时(不是偶数) – ddzialak 2012-07-09 21:42:29
@ddzialak:可能最好使用'%'作为因为该算子位于整数的语义域中,而不是它们的表示。我们可能能够证明'a%2 == a&1',但除非我们最初着手按位进行操作,否则我认为最好使用'%'。在某些情况下,可能有理由不采取这种做法,但这显然是一个与初学者相关的问题,而不是看起来有点混乱的黑客。 – recursive 2012-07-09 21:45:36