GCSE A453编程任务难度3

时间:2016-04-16 18:27:56

标签: python sorting

在过去的几天里,我一直在尝试为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

很遗憾,我无法联系我的老师,所以我们将非常感谢您的回复。

非常感谢, 克里斯

0 个答案:

没有答案