<p>这两条线是错的。您使用的是<code>j</code>中的<code>j</code>索引,而不是存储在这些索引中的配置文件密钥。它停止工作,因为无论交换,总是比较相同的元素。在</p>
<pre><code>v1=database[j][0]
v2=database[j+1][0]
</code></pre>
<p>它们应该是这样的:</p>
^{pr2}$
<p>这是跑第一关的结果。顶部的v1/v2是错误的值,而底部的v1/v2是正确的值。在</p>
<pre><code>x = 0
print(['0', '1', '2', '3', '4'])
j = 0 | j = 1 | j = 2 | j = 3
v1 = 'Ninna' | v1 = 'Yela' | v1 = 'Denise' | v1 = 'Alia'
v2 = 'Yela' | v2 = 'Denise' | v2 = 'Alia' | v2 = 'Keeno'
| | |
v1 = 'Ninna' | v1 = 'Yela' | v1 = 'Yela' | v1 = 'Yela'
v2 = 'Yela' | v2 = 'Denise' | v2 = 'Alia' | v2 = 'Keeno'
| | |
| | |
| sorted = False | sorted = False | sorted = False
| temp = '2' | temp = '3' | temp = '4'
| profiles[2] = '1' | profiles[3] = '1' | profiles[4] = '1'
| profiles[1] = '2' | profiles[2] = '3' | profiles[3] = '4'
</code></pre>
<p>另外,这是在Python中交换的方式:</p>
<pre><code>profiles[j], profiles[j+1] = profiles[j+1], profiles[j]
</code></pre>
<p>这里有一个更好的算法:</p>
<pre><code>swapped = False
while not swapped:
swapped = True
print(profiles)
for j in range(len(profiles) - 1):
v1 = database[int(profiles[j])][0]
v2 = database[int(profiles[j+1])][0]
if v1 > v2:
swapped = False
profiles[j], profiles[j+1] = profiles[j+1], profiles[j]
</code></pre>
<p>下面是如何使用标准方法来实现:</p>
<pre><code>profiles = list(sorted(profiles, key=lambda x: database[int(x)]))
</code></pre>