我是一个计算机专业的学生,他发了a question here the other day about helping me with my function to sort scores in order,我得到了一些很好的帮助,现在它可以工作了,但我也希望它能根据分数对名字进行排序(所以如果James得到10,它就会打印“James 10”)。现在正在发生的是,分数排序和打印到屏幕上是正确的,但姓名只是按输入的顺序打印。我试过了:
def sortlist():
global scorelist, namelist, hss
namelist = []
scorelist = []
hs = open("hstname.txt", "r")
namelist = hs.read().splitlines()
hss = open("hstscore.txt","r")
for line in hss:
scorelist.append(int(line))
switched = True
while switched:
switched = False
for i in range(len(scorelist)-1):
for j in range(len(namelist)-1):
if scorelist[i] < scorelist[i+1]:
scorelist[i],scorelist[i+1] = scorelist[i+1],scorelist[i]
namelist[j],namelist[j+1] = namelist[j+1],namelist[j]
switched = True
score部分工作得很好,我花了很长时间才得到它,而且我不允许使用像.sort()这样的预定义函数。有人能提供任何帮助/建议吗?或者如果你能看出我做错了什么,你能提供一个解决方案吗?我一辈子都解决不了这个问题
您不需要使用嵌套循环来遍历这两个列表。在
由于您应该以完全相同的方式操作这两个列表,所以您应该只使用一个
for
循环,并使用i
变量索引到两个列表中。在如果你转这个:
在这方面:
^{pr2}$然后你应该把这两个列表按你想要的排序。在
只有当这两个列表的长度不同时才会导致错误。如果
namelist
比scorelist
短,则此代码将引发异常。你可以通过在你的分类程序之前检查想象一下,您有一个函数,它返回一个已排序的列表,例如,Quicksort algorithm在Python中的实现:
然后您可以使用它对您的
^{pr2}$scorelist
进行排序:要按照
scorelist
的顺序对namelist
进行排序,可以使用Schwartzian transform:注意,相同的函数
qsorted()
在两种情况下都使用:对scorelist
进行排序,并将两个列表一起排序。您应该尝试将公共功能提取到单独的函数中,而不是针对稍微不同的任务修改排序算法。在要测试结果是否正确,可以使用内置的
sorted()
函数:相关问题 更多 >
编程相关推荐