有没有办法修复这个python代码?

时间:2016-04-05 13:23:33

标签: python

10年级 - 11年级A453算术测验 -

据我所知,这一切都正常。我要离开这里,所以有一些背景。

file = open

def menu():
    entry = False
    while entry == False:
        print('            ***************************')
        print('            * Arithmetic Quiz Scores! *')
        print('            ***************************')
        print('')
        print('')
        print('1. Alphabetic Order (Highest)')
        print('')
        print('2. Highest - Lowest')
        print('')
        print('3. Average (Highest-Lowest)')
        print('')
        print('4. Quit')
        print('')
        choice=input('What do you want to do - 1, 2, 3, 4? ')
        if choice == '1':
            print("")
            alphabetic_order()
            entry = False
        elif choice == '2':
            print("")
            highest_lowest()
            entry = False
        elif choice == '3':
            print("")
            average()
            entry = False
        elif choice == '4':
            print("Goodbye")
            entry = True
        else:
            print("")
            print("Im Sorry But That Is Not An Option, Please Choose Again!")
            input("Press Enter!")
            print("")

def alphabetic_order():
    inputFile = open("Names.txt", 'r')
    lineList = inputFile.readlines()
    lineList.sort()
    for line in lineList:
        line = line.strip()
        parts = line.split(" - ")
        name =   parts[0]
        score1 = parts[1]
        score2 = parts[2]
        score3 = parts[3]
        alphabetical=(max(score1, score2, score3))
        print(" "+ name + "   " + alphabetical)
        print("")
    inputFile.close()

这是文件Names.txt的内容:

Tim - 5 - 6 - 7
Chloe - 6 - 3 - 9
Zack - 9 - 10 - 8
Bob - 7 - 4 - 6
Bo - 8 - 9 - 9
Adam - 8 - 4 - 5
Joe - 3 - 2 - 5
Zoey - 6 - 6 - 6
Larry - 7 - 3 - 3
Mary - 5 - 6 - 9

[FIXED]此时代码不会将得分从最高到最低排序,它输出的大部分从最低到最高,我相信对于其中一个得分为10,代码认为它只是一个1. [固定]

def highest_lowest():
inputFile = open("Names.txt", 'r')
lineList = inputFile.readlines()
lineList.sort()
for line in lineList:
    line = line.strip()
    parts = line.split(" - ")
    name =   parts[0]
    score1 = int(parts[1])
    score2 = int(parts[2])
    score3 = int(parts[3])
    total=(score1, score2, score3)
    highestlowest=sorted(total, key=int, reverse=True)
    print(" "+ name + "  " + str(highestlowest))
    print("")
inputFile.close()

[帮助]在这部分,代码应该根据他们的平均值(从最高到最低)对学生进行排序,但是不会这样做。[帮助]

def average():
    inputFile = open("names.txt", "r")
    lineList = inputFile.readlines()
    lineList.sort()
    for line in lineList:
        line = line.strip()
        parts = line.split(" - ")
        name =   parts[0]
        score1 = parts[1]
        score2 = parts[2]
        score3 = parts[3] 
        total= int(score1) + int(score2) + int(score3)
        average_= int(total) /3
        print (" "+ name + " " + str(round(average_)))
        print("")
    inputFile.close()

menu()

能帮助我理解为什么这些数字没有像我预期的那样排序吗?我很抱歉如果这不是我应该问的问题,我是新的。

3 个答案:

答案 0 :(得分:1)

问题:

  

你能帮我吗?

我会说,是的,我可以。

对于你没有问过的问题:

  

为什么我的代码没有按预期对数字进行排序?

答案是因为你的数字仍然是字符串。您需要将它们转换为数字,即:

score1 = int(parts[1])

此致

答案 1 :(得分:1)

您的代码中的主要问题是您尝试对字符串进行排序并期望与数字相同的结果。

在两种方法中加载文件

inputFile = open("names.txt", "r")

然后你读了

lineList = inputFile.readlines()

现在你有一个包含字符串的列表。排序算法然后比较字符串而不是数字。

对于平均值,例如你应该尝试计算每个人的平均值,然后按平均值进行排序。

问候

答案 2 :(得分:1)

问题是字符串排序与整数的区别。

这似乎令人惊讶,但事实证明,以非常不同的方式对字符串和整数进行排序是合乎逻辑的。特别是字符串通常按lexicographical order排序。例如:"ab" < "b"和类似"25" < "6"

在Python中,您可以直接输入这些内容以查看它们的解释方式:

"ab" < "b"
#prints True

"25" < "6"
#prints True

25 < 6
#prints False