在过去的几天里,我一直在尝试为A453计算部分的任务3编写解决方案。从本质上讲,我的目标是生成一个程序,该程序从参与数学测验的类成员中获取数据(位于三个文本文件中,因为考试规范指出假设测验中的参与者必须来自“类” 1“”2级“或”3级“)然后根据用户的输入,按以下两种方式之一对其进行排序:
按字母顺序,每个学生(在适当的班级)的考试成绩最高。
按该班级每名学生的最高分,从最高到最低。
这是我到目前为止编写的代码:
def highest_score_first():
names_with_scores_list = []
ScoresFirstList = []
AlreadySeenList = []
for line in file:
names_with_scores_list.append(line.strip())
for row in names_with_scores_list:
nameString = row[0: row.index(', ') ]
scoreString = row[row.index(', ')+2 : len(row)]
scoresFirstString = scoreString+","+nameString
#print(scoresFirstString)
ScoresFirstList.append(scoresFirstString)
ScoresFirstList.sort(reverse = True)
for row in ScoresFirstList:
nameString = row[row.index(',') : len(row)]
if nameString not in AlreadySeenList:
print(row)
AlreadySeenList.append(nameString)
def alphabetical():
names_with_scores_list = []
NamesFirstList = []
AlreadySeenList = []
for line in file:
names_with_scores_list.append(line.strip())
for row in names_with_scores_list:
nameString = row[0: row.index(', ') ]
scoreString = row[row.index(', ')+2 : len(row)]
NamesFirstString = nameString+","+scoreString
NamesFirstList.append(NamesFirstString)
NamesFirstList.sort()
for row in NamesFirstList:
nameString = row[0: row.index(',') ]
if nameString not in AlreadySeenList:
print (row)
AlreadySeenList.append(nameString)
# main code here
chosen_class = input("Which class would you like to view - one, two or three?")
if chosen_class == "one":
file = open("classonescore.txt","r")
elif chosen_class == "two":
file = open("classtwoscore.txt","r")
elif chosen_class == "three":
file = open("classthreescore.txt","r")
else:
print("Unfortunately, you have entered an invalid class name. ")
function = input("How would you like to sort the data - alphabetically or by highest score? Choose A or H")
if function.upper() == "H":
highest_score_first()
elif function.upper() == "A":
alphabetical()
基本上,代码的问题在于,当用户希望按字母顺序(按最高分数)对类的数据进行排序时,仅生成每个学生的最低分数以及他的姓名。
例如,虽然Class 1中的数据按如下方式写入文本文件:
克里斯,08岁 克莱夫,09 威尔,04 哈利,10岁 艾哈迈德,08 杰夫,06 艾米,04 Vennu,10 Vennu,07 艾米,06 艾哈迈德,09 杰夫,04 哈利,07 威尔,06 克莱夫,10岁 克里斯,10岁在运行程序时显示(当用户希望使用“按字母顺序排列”生成分数时):
艾哈迈德08 艾米,04 克里斯,08 克莱夫,09 杰夫,04 哈里,07 Vennu,07 会,04
理想情况下,应按如下方式生成:
艾哈迈德,09 艾米,06 克里斯,10岁 克莱夫,10岁 杰夫,06 哈利,10岁 Vennu,10 威尔,06
很遗憾,我无法联系我的老师,所以我们将非常感谢您的回复。
非常感谢, 克里斯