Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法修复这个python代码?_Python - Fatal编程技术网

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

有没有办法修复这个python代码?,python,Python,10年级-11年级A453算术测验- 据我所知,所有这些都是正确的。我把这个留在这里只是为了有一些背景 file = open def menu(): entry = False while entry == False: print(' ***************************') print(' * Arithmetic Quiz Scores! *') print('

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()
你能帮我理解为什么这些数字没有按我期望的那样排序吗?如果我不应该这样提问,我很抱歉,我是新来的。

关于你的问题:

你能帮帮我吗

我会说,是的,我能

对于您尚未提出的问题:

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

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

score1 = int(parts[1])

关于

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

在这两种方法中,都加载文件

inputFile = open("names.txt", "r")
然后你读台词

lineList = inputFile.readlines()
现在您有了一个包含字符串的列表。排序算法然后比较字符串,而不是数字

对于平均数,你应该试着计算每个人的平均数,然后按平均数排序


问候语

问题在于字符串与整数的排序方式不同

这可能看起来很奇怪,但事实证明,以非常不同的方式对字符串和整数进行排序是合乎逻辑的。特别是字符串通常按顺序排列。例如:
“ab”<“b”
和类似的
“25”<“6”

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

"ab" < "b"
#prints True

"25" < "6"
#prints True

25 < 6
#prints False
“ab”<“b”
#打印正确
"25" < "6"
#打印正确
25 < 6
#打印错误

@Ocean,我认为snamecharmerb暗示了
“10”
,因为它们是作为字符串进行比较的,python默认将从低到高排序,您可以通过指定
lineList.sort(reverse=True)来颠倒顺序
我该怎么做呢?我不会给你确切的代码,因为这对我来说是一个学习练习。试着想象一下你的程序需要做什么。首先,您需要每个玩家的所有平均值。然后你需要对它们进行排序,最后你需要按照正确的顺序打印出来。请记住,你需要一个名称和平均值之间的链接,这样你就可以用每个名称打印出正确的平均值。这是课程作业,几天后到期。