0

基本上,我需要将学生的姓名按列表的顺序归属于他们各自的成绩。所以这就是我到目前为止所拥有的:

def main():

定义 myFile 并打开/读取 grades.txt 文件

myFile = open("grade.txt", "r")

定义作业、测验和考试的学生人数和成绩百分比

numStudents = int(myFile.readline())
prctgs = myFile.readline().split()
students = ["Amy", "Jack", "Arron", "Zack", "Jen", "Jane"]

创建for循环遍历每个学生的分数

for i in range(numStudents):

存储每个学生的成绩

stdntGrades = myFile.readline().split()

计算成绩百分比

grade = 0
for j in range(len(prctgs)):
    grade = grade + float(prctgs[j]) * int(stdntGrades[j])
    print("Student #", i+1, ": ", " %.2f" % grade, sep="")

myFile.close()

main()

'students' 是有问题的列表,我也曾尝试将名称直接输入到文件中,但失败得很惨

“grade.txt”文件包含以下内容:

6
.3 .1 .6
90 89 78
96 92 79
85 100 94
87 92 96
81 88 93
85 91 99

注意:这是我的第五个程序,所以我是一个完整的初学者。

4

2 回答 2

0

假设我们有 2 个字符串...

weights = "0.3 0.1 0.3"
grades =  "90   87  92"

您已经知道可以将它们拆分为列表:

weights.split() #['0.3', '0.1', '0.3]
grades.split() #['90', '87', '92']

现在你对自己说——“如果我能同时得到匹配的数字不是很好吗?” 嗯,你可以。这就是zip为:

total = 0
for weight,grade in zip(weights.split(),grades.split()):
    total += float(weight)*float(grade)

sum如果您愿意,甚至可以使用以下方法缩短:

total = sum( float(w)*float(g) for w,g in zip(weights.split(),grades.split() )

所以,这给了你一个人的总数。现在,我们可以在处理文件时使用相同的概念。我们想用他们的成绩信息“压缩”这个人的名字。就是这样:

with open('grade.txt') as data: #fancy way of opening files...
    npeople = int(next(data)) #read first line, make an integer
    weights = [float(x) for x in next(data).split()] #get the weights as a list of floats
    people = ['jack','jill','mary','little miss muffet','kermit','animal']
    for person, grade_info in zip(people,data):
        grade = sum( w*float(g) for w,g in zip(weights,grade_info.split() )
        print person,grade

我在这里使用的另一个技巧是next(fileobject). 这只是一种花哨的说法fileobject.readline()。其实在python3.x中,fileobject.readline()已经不存在了……还不如现在习惯使用next:)。

我在这里使用的4 个内置函数zip是、next和。 并且很明显它们是如何工作的,所以他们不需要做太多的工作来解释。 并且有点棘手。阅读链接的文档,直到您理解它们。它们非常有用。我还使用列表理解来构建一些列表。它们也非常有用。绝对是你想要的蟒蛇实用腰带。floatsumfloatsumzipnext

于 2013-02-15T03:48:27.590 回答
0

学生的姓名应该是数据的一部分,而不是代码:

6
.3 .1 .6
Amy 90 89 78
Jack 96 92 79
Aaron 85 100 94
Zack 87 92 96
Jen 81 88 93
Jane 85 91 99

然后将它们与数据一起读入:

line = file.readline().split()
student = line[0]
prctgs = line[1:]
于 2013-02-15T03:20:37.623 回答