Python 3:在包含字母和数字的文件中打印考试成绩的平均值



如果我做错了什么,我提前道歉,因为我是一个新的编程…

在我的计算机科学课上,他们要求有一个界面,允许用户创建具有作业名称和成绩的文件。我能够编写创建文件功能,但我在项目中要求的另一个功能有困难。在这个函数中,它要求打开。txt文件,打印。txt文件中的内容,打印所有作业阅读后文件中的作业总数,打印所有作业的平均成绩,以及打印字母成绩。这是目前为止我所做的,但它根本不起作用:

    try:
        sms=[]
        with open(fileName, "r") as f:
            print(f.read())  # prints grades
            for line in f:
                numbers = line.split('n')  # split the scores form the text
                s=0
                for number in numbers:
                    try:
                        s=+int(number)
                    except:
                        print('cant cast int')
                sms.append(s)
            average=sum(sms)/len(fileName)
            avg='F'
            if average>= 90:
                avg='A'
            if average>= 80:
                avg='B'
            if average>= 70:
                avg='C'
            if average>= 60:
                avg='D'
            print('Average grade: '+str(average))
            print('Letter grade assigned: '+str(avg))
    except FileNotFoundError:
        print('**Error: This file cannot be found**')
        processmenu()

try语句是必需的。processmenu()重新启动它。我如何隔离文本文件,或者更具体地说,等级号(如12.0,56.0等),并制作/打印平均值这就是文本文件的样子,它们的长度取决于用户在创建文件时的输入,所以可能有20多个赋值。

Assignment 1:      12.0
Assignment 2:      56.0
Assignment 3:      76.0

请注意,此解决方案要求python 3.6或更高版本保留字典顺序,因为它使用字典。

输出:

Total number of assignments in file: 12
Grade for individual assignment:
Assignment 1 : 12.0 : F
Assignment 2 : 56.0 : F
Assignment 3 : 76.0 : C
Assignment 4 : 13.0 : F
Assignment 5 : 59.0 : F
Assignment 6 : 78.0 : C
Assignment 7 : 14.0 : F
Assignment 8 : 58.0 : F
Assignment 9 : 79.0 : C
Assignment 10 : 15.0 : F
Assignment 11 : 57.0 : F
Assignment 12 : 80.0 : B
Average grade for all assignments:
All assignments : 49.75 : F

代码:

import re
from decimal import Decimal
file_name = "results.txt"

with open(file_name) as file_in:
    lines = []
    for line in file_in:
        if re.match(r"^Assignmentsd+:s+d+.d+$", line):
            lines.append(line)
def retProper(temp4):
    global lines
    temp5 = -1
    for temp6 in range(len(lines)):
        temp7 = len(lines[temp6].split(":")[1].strip().split(".")[1])
        if temp7 > temp5:
            temp5 = temp7
    return round(Decimal(temp4),temp5)
grade_threshold = {retProper(0):"F", retProper(60):"D", retProper(70):"C", retProper(80):"B", retProper(90):"A"}
def getGradeLetter(temp2):
    global grade_threshold
    temp3 = list(grade_threshold)[0]
    for key, elem in grade_threshold.items():
        if (temp2 >= key):
            temp3 = key
    return grade_threshold.get(temp3)
print("Total number of assignments in file: "+str(len(lines)))
print("nGrade for individual assignment:")
for temp1 in range(len(lines)):
    exec('print(lines[temp1].split(":")[0]+" : "+lines[temp1].split(":")[1].strip()+" : "+getGradeLetter(retProper('+lines[temp1].split(":")[1].strip()+')))')
print("nAverage grade for all assignments:")
temp10 = []
for temp8 in range(len(lines)):
    exec("temp9 = retProper("+lines[temp8].split(':')[1].strip()+")")
    temp10.append(temp9)
temp12 = retProper(0)
for temp11 in range(len(temp10)):
    temp12 = temp12 + temp10[temp11]
average_grade_number = (temp12/len(temp10))
print("All assignments : "+str(average_grade_number)+" : "+getGradeLetter(average_grade_number))

最新更新