对于我的软件主要工作,我必须创建一个程序。总之,高分列表需要在写入文件之前进行排序。为此,我使用冒泡排序,我不能使用内置排序功能。正在读取数据的文本文件存储在嵌套列表中。文本文件如下所示:
NameOne
10
NameTwo
15
NameThree
9
这是我的冒泡排序代码,但不起作用:
b_not_sorted = True
while b_not_sorted:
counter = 0
b_not_sorted = False
for counter in range(len(highest_scores) - 1):
if highest_scores[counter] < highest_scores[counter + 1]:
b_not_sorted = True
highest_scores[counter], highest_scores[counter+1] = highest_scores[counter+1], highest_scores[counter]
counter = counter + 1
我需要将分数从最高到最低排序。任何帮助将不胜感激,您将在我的计划学分:)中得到适当的记录。感谢。
答案 0 :(得分:5)
这是一个提示:
检查外部while
循环运行的次数。它应该运行不止一次,对吗?什么总是会导致循环退出,无论如何?
尝试逐行检查代码,看看每一点都会发生什么。
外部循环结束时的语句b_not_sorted = False
导致外部循环在仅执行一次后退出。您需要将该语句移动到代码的另一部分。尝试将b_not_sorted
的名称更改为I_still_need_to_go_through_the_list
:
显然在第一行:
while I_still_need_to_go_through_the_list:
它应该是真的,因为你根本没有超过列表。你不知道它是否有序。
并在行之后:
if highest_scores[counter] < highest_scores[counter + 1]:
当然,我们仍然需要再次传递,因为我们只是对列表进行了更改,并且需要确保不需要进一步更改。
但如果没有改变怎么办? I_still_need_to_go_through_the_list
应为False
。嗯。如果我们在I_still_need_to_go_through_the_list = False
循环之前将for
放在之前,那么它将是False
,除非我们对列表进行了更改,正是我们想要的。
答案 1 :(得分:0)
你在第一次迭代后正在做b_not_sorted = False
,但它不应该在那里!算法在完成排序之前就停止了。
您只应b_not_sorted = True
if highest_scores[counter] < highest_scores[counter + 1]
此外,交换代码在Python中看起来更好。而不是使用temp_var
只需执行此操作:
highest_scores[counter], highest_scores[counter+1] = highest_scores[counter+1], highest_scores[counter]
Python样式指南建议您不要在== True
语句中写== False
或if
。这样做:
while b_not_sorted: