回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试图编写一个算法,将数组最大值(包括最大值)左右的所有值相加。当满足条件时,求和应停止。例如:</p>
<pre><code>import numpy as np
data = [-1, 1, 2, 3, 4, 5, 4, 3, 2, 2, 4, 1, -1]
summ1 = 0
summ2 = 0
j = 1
k = 0
n = 0
for i in range(len(data)):
if data[i] == np.amax(data):
while data[i + j] > 1:
summ1 = summ1 + data[i + j]
j += 1
while data[i - k] > 1:
summ2 = summ2 + data[i - k]
k += 1
total = summ1 + summ2
</code></pre>
<p>这个很好用。但根据情况,这可能会引发<code>IndexError</code>。例如:</p>
<pre><code>import numpy as np
data = [-1, 1, 2, 3, 4, 5, 4, 3, 2, 2, 4, 1, -1]
summ1 = 0
summ2 = 0
j = 1
k = 0
n = 0
for i in range(len(data)):
if data[i] == np.amax(data):
while data[i + j] > -2:
summ1 = summ1 + data[i + j]
j += 1
while data[i - k] > 1:
summ2 = summ2 + data[i - k]
k += 1
total = summ1 + summ2
</code></pre>
<p>现在,我正试图找出一种方法来操纵循环中的条件,直到它可以进入while循环。我想到过这样的事情:</p>
<pre><code>data = [-1, 1, 2, 3, 4, 5, 4, 3, 2, 2, 4, 1, -1]
summ1 = 0
summ2 = 0
j = 1
k = 0
n = 0
while True:
try:
for i in range(len(data)):
if data[i] == np.amax(data):
while data[i + j] > -2 + n:
summ1 = summ1 + data[i + j]
j += 1
while data[i - k] > 3:
summ2 = summ2 + data[i - k]
k += 1
total = summ1 + summ2
break
except IndexError:
n = n + 1
</code></pre>
<p>但这不起作用,我也不明白为什么。其思想是增加<code>n</code>,当引发<code>IndexError</code>时,重新输入<code>try</code>-语句并检查<code>while</code>条件是否可以满足(在本例中,如果<code>while data[i + j] > -1:</code>,那么<code>n == 3</code>),最后中断while循环。但是它只是不断地增加我的<code>n</code>,并且<code>while</code>条件永远不会满足。这是一个非常人为的例子,但我需要知道为什么这不起作用</p>