<p>有多种方法可以解决这个问题。您可以在读取时处理输入,但将输入读入列表,然后处理列表会使事情变得更简单。你知道吗</p>
<p>您可以这样读取输入:</p>
<pre><code>a = []
while True:
n = int(input())
if n == -1:
break
a.append(n)
</code></pre>
<p>请注意,如果读取非整数,则会引发<code>ValueError</code>。你知道吗</p>
<p>既然我们已经把数字列在了一个列表中,我们就可以按照罗里·道尔顿的建议来处理它们了。你知道吗</p>
<pre><code>a = [1, 2, 3, 4, 5, 8, 13, 21, 34, 55, 10, 6, 7, 8, 20, 25, 30, 40]
prev2, prev1, *a = a
maxlen = seqlen = 0
for n in a:
seqlen = seqlen + 1 if n == prev1 + prev2 else 0
maxlen = max(maxlen, seqlen)
prev2, prev1 = prev1, n
print(maxlen)
</code></pre>
<p><strong>输出</strong></p>
<pre><code>4
</code></pre>
<hr/>
<p>只是为了好玩,这里有一个“一行”。你知道吗</p>
<pre><code>from itertools import groupby
maxlen = max((len(list(g)) for k, g in groupby(u + v == w
for u,v,w in zip(a, a[1:], a[2:])) if k), default=0)
</code></pre>
<p>这两种解决方案都适用于<code>len(a) <= 2</code>。你知道吗</p>
<p>最后一个有点晦涩难懂。下面是一个细分:</p>
<pre><code>from itertools import groupby
a = [1, 2, 3, 4, 5, 8, 13, 21, 34, 55, 10, 6, 7, 8, 20, 25, 30, 40]
print('tuples')
b = list(zip(a, a[1:], a[2:]))
print(b)
print('tests')
b = [u + v == w for u,v,w in b]
print(b)
print('group lengths')
b = [(k, len(list(g))) for k, g in groupby(b)]
print(b)
maxlen = max((l for k, l in b if k), default=0)
print(maxlen)
</code></pre>
<p><strong>输出</strong></p>
<pre><code>tuples
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 8), (5, 8, 13), (8, 13, 21), (13, 21, 34), (21, 34, 55), (34, 55, 10), (55, 10, 6), (10, 6, 7), (6, 7, 8), (7, 8, 20), (8, 20, 25), (20, 25, 30), (25, 30, 40)]
tests
[True, False, False, False, True, True, True, True, False, False, False, False, False, False, False, False]
group lengths
[(True, 1), (False, 3), (True, 4), (False, 8)]
4
</code></pre>