我的python程序有问题吗

我的python程序有问题吗,python,math,python-3.4,Python,Math,Python 3.4,我有点麻烦。所以,对于我的作业,我的老师希望我们读入数据并将数据输出到另一个文件中。现在,我们阅读的数据是学生姓名(第一行)和他们的成绩(第二行)。现在,他想让我们读入它们,然后将它们写入另一个文件。把它们写成两行。第一行是学生的名字,第二行是他们的平均数。然后,将平均值写入一个列表,并通过平均值、中位数和标准差运行整个列表。下面是该文件中一些数据的示例 Aiello,Joseph 88 75 80 Alexander,Charles 90 93 100 98 Cambell,Heather 1

我有点麻烦。所以,对于我的作业,我的老师希望我们读入数据并将数据输出到另一个文件中。现在,我们阅读的数据是学生姓名(第一行)和他们的成绩(第二行)。现在,他想让我们读入它们,然后将它们写入另一个文件。把它们写成两行。第一行是学生的名字,第二行是他们的平均数。然后,将平均值写入一个列表,并通过平均值、中位数和标准差运行整个列表。下面是该文件中一些数据的示例

Aiello,Joseph
88 75 80
Alexander,Charles
90 93 100 98
Cambell,Heather
100 100
Denniston,Nelson
56 70 65
所以,正如你所看到的,它首先是姓氏,用逗号分隔,然后是第一个。然后,在第二行,他们的成绩。他想让我们找出平均数,然后写在学生名下。这是我遇到麻烦的部分。我知道如何找到一个平均值。把分数加起来,然后除以他们得到的分数。但是我如何将其放入python中呢?有人能帮忙吗?另外,我已经有了一个均值、中位数、标准差程序。我如何把从第一部分得到的平均值放入一个列表,然后通过平均值、中位数、标准贬值程序将整个列表放入。然后回到我最初的问题。到目前为止我的东西有什么问题吗?我需要添加/更改什么?这是我的密码

def main():
    input1 = open('StudentGrades.dat', 'r')
    output = open('StudentsAvg', 'w')
    for nextLine in input1:
        output.write(nextLine)
    list1 = nextLine.split()
    count = int(list1[3])
    for p in range(count):
        nextLine = input1.readlin()
        output.write(nextLine)
        list2 = nextLine.split()
        name = int(list2[1])
        grades = list2[2]
        pos = grades.index(grade)
        avg =

对原始代码进行了一些改进:

def averagMarksCalculator():  # Learn to name your functions "Meaningfully"
    # Using with clause - Learn to love it as much as you can!
    with open('StudentGrades.dat') as input1, open('StudentsAvg.txt', 'w') as output:    
    for nextLine in input1:
        strToWrite = nextLine;  # Write student's name
        output.write(nextLine)  # Print student name
        list1 = (input1.readline()).split() # split them into individual strings
        avg = 0 # initialise
        list1 = [int(x) for x in list1]
        avg = sum(list1)/len(list1) 
        output.write("Average marks........"+str(avg)+"\r\n") # avg marks of student
    input1.close()
    output.close()

请注意,“\r\n”用于确保在结果文件上打印的学生姓名和平均分数后有一个行距。如果不需要空的新行作为分隔符,请仅使用“\r”。

这里似乎有一些问题。首先,从文件中读取的所有内容都是字符串,而不是数字。其次,您可能应该在相同的for循环中执行所有这些操作,在该循环中您可以读取行。(还有一点-使用
with
语句允许在处理完文件对象后自动销毁它们。)因此,您可以按如下方式修改代码:

def main():
    with open('StudentGrades.dat', 'r') as input1, open('StudentsAvg.txt', 'w') as output:
        counter = 0
        student_name = ''
        for nextLine in input1:
            if counter % 2 == 0:
                student_name = nextLine
            else:
                grades = [int(x) for x in nextLine.split()]
                avg = sum(grades) / len(grades)
                print(student_name, file=output)
                print(str(avg), file=output)

            counter += 1

请注意,
print(str,file)
是当前写入文件的首选方法。

您尝试过此代码吗?你得到了什么?嗯,它在AVG=时失败,因为我没有添加任何内容。我知道如何找到分数的平均值,但我如何将其转换成python语言,以便它为每个人将其写入第二行。Grades+Grades left/number of Grades=Avg。但是,我如何将其转换为python语言。我如何打开程序将数据写入的文件?正如我所说,我必须读取数据(我向您展示的文件中的数据示例),然后将数据写入另一个文件(StudentsAvg),该文件中应该是Aiello,Joseph(第一行)和第一行下,这三个等级(第二行)的平均值。我必须为每个学生这样做。将他们的名字写在第一行,将他们的平均值写在第二行,写在另一个文件中。这就是我认为我必须做的。那么,python在哪里用新数据保存这个新文件呢?我不知道我是不是没有得到什么。我完全理解你的代码。谢谢你让它更有效顺便说一句,ent。现在,我看到你没有阅读StudentGrades.dat。有什么原因吗?还有,python创建的要编写的新文件在哪里?我似乎找不到它。顺便说一下,我的桌面上有所有的文件。如果你在Windows上,请将数据文件复制到C:\PythonXX目录。然后,打开python IDLE并调用你的funct例如,AverageMarkScalCalculator()您的结果文件将与源数据文件位于同一位置。如果您不知道如何执行此操作,则首先不应执行任何编码或任何操作。如何打开python将此数据放入的输出文件?@Matty您已经有了。这就是open('StudentsAvg'))does.Oh.我想我一定是弄错了什么。我必须读入StudentGrades的数据,然后告诉python打开一个全新的文件,保存它,然后将数据写入其中。新文件(StudentsAvg.txt)中的数据将包含它们的名称(在第1行)和平均值(在第2行)@Matty这就是该代码现在所做的。它打开
StudentGrades.dat
,对其进行迭代,并将读取文件中的每个学生姓名/所有成绩配对的一行学生姓名和平均成绩写入
StudentsAvg
中。你的意思不是说整个
StudentsAvg
应该只包含sed由两行组成,是吗?不,它不应该由两行组成。我想知道的是Python创建的名为StudentsAvg的新文件在哪里?它从StudentGrades.dat读取数据,并且应该创建一个全新的文件来存储新数据(输出).我在找那个文件,因为我需要它作为第二部分。在那个文件中会有学生的名字,在他们的名字下面是他们的平均分。然后第三行的下一个学生,然后第四行的平均分,这个过程会一直持续到不再有学生了。