<p><strong>问题:</strong></p>
<ul>
<li>您正在访问<code>myEvenList</code>和<code>myOddList</code>内的<code>medianCalculator</code>,这是您不应该访问的<code>medianCalculator</code>应与任何外部变量分离</李>
<li><code>myEvenList</code>参数对<code>myEvenList</code>全局变量进行阴影处理</li>
<li>您决定是运行偶数还是奇数算法取决于<code>n</code>,它是从<code>myOddList</code>计算出来的,因此它将始终只运行两条边中的一条</李>
<li>不要对参数调用<code>sort()</code>,因为它会修改基础列表。先复印一份</李>
</ul>
<p><strong>解决方案:</strong></p>
<ul>
<li>使你的<code>medianCalculator</code>功能没有副作用。这意味着,它不应该访问其自身函数之外的任何变量,而只对其输入参数进行操作</李>
<li>如果您想得到多个答案,请多次呼叫<code>medianCalculator</code>。使用不同的参数使其在不同的输入上运行</李>
</ul>
<p><strong>代码:</strong></p>
<pre class="lang-py prettyprint-override"><code>myOddList = [1, 2, 3, 4, 5]
myEvenList = [1, 2, 3, 4, 5, 6]
def medianCalculator(myList):
myList = myList.copy()
myList.sort()
n = len(myList)
if n % 2 != 0:
answerOdd = myList[int(n/2)]
return answerOdd
else:
one = myList [(n-1) // 2]
two = myList [(n+1) // 2]
answerEven = (one + two) / 2
return answerEven
medianForEvenList = medianCalculator(myEvenList)
print(medianForEvenList)
medianForOddList = medianCalculator(myOddList)
print(medianForOddList)
</code></pre>