Anwendung des Bewertungssystems auf einen realen Datensatz
Wenden wir nun unser Bewertungssystem auf ein realistischeres Szenario an. Wir erstellen ein Programm, das Schülerdaten aus einer Datei liest, Noten berechnet und einen umfassenden Bericht schreibt.
Erstellen eines Beispieldatensatzes
Erstellen wir zunächst eine Datei mit Beispieldaten von Schülern. Erstellen Sie eine neue Datei namens student_data.csv im Verzeichnis /home/labex/project mit folgendem Inhalt:
name,subject,marks
John,Mathematics,88
Emily,Mathematics,92
Michael,Mathematics,75
Sophia,Mathematics,68
Daniel,Mathematics,42
Olivia,Mathematics,95
William,Mathematics,73
Emma,Mathematics,60
James,Mathematics,79
Ava,Mathematics,85
Erstellen der vollständigen Bewertungsanwendung
Erstellen Sie nun eine neue Datei namens grading_application.py im Verzeichnis /home/labex/project:
def get_grade_with_feedback(marks):
"""
Convert numerical marks to letter grades with personalized feedback.
Returns a tuple containing the grade and a feedback message.
"""
try:
marks = float(marks)
if marks < 0 or marks > 100:
return (None, "Invalid marks: must be between 0 and 100")
elif marks >= 90:
return ('A', "Excellent! Outstanding performance.")
elif marks >= 80:
return ('B', "Very good! Above average performance.")
elif marks >= 70:
return ('C', "Good work! Average performance.")
elif marks >= 60:
return ('D', "Satisfactory. Below average but passing.")
else:
return ('F', "Needs improvement. Please study more.")
except ValueError:
return (None, "Invalid marks: not a number")
def process_student_data(input_filename, output_filename):
"""
Process student data from a CSV file and generate a report.
"""
try:
## Read the input file
with open(input_filename, 'r') as file:
lines = file.readlines()
## Skip the header line
headers = lines[0].strip().split(',')
data = [line.strip().split(',') for line in lines[1:]]
## Prepare the output
output_lines = ["Student Grade Report\n", "=" * 20 + "\n\n"]
## Calculate statistics
valid_marks = []
grade_counts = {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'F': 0, 'Invalid': 0}
## Process each student
for student in data:
name, subject, marks = student
grade, feedback = get_grade_with_feedback(marks)
if grade:
valid_marks.append(float(marks))
grade_counts[grade] += 1
output_lines.append(f"Student: {name}\n")
output_lines.append(f"Subject: {subject}\n")
output_lines.append(f"Marks: {marks}\n")
output_lines.append(f"Grade: {grade}\n")
output_lines.append(f"Feedback: {feedback}\n\n")
else:
grade_counts['Invalid'] += 1
output_lines.append(f"Student: {name}\n")
output_lines.append(f"Subject: {subject}\n")
output_lines.append(f"Error: {feedback}\n\n")
## Calculate statistics
if valid_marks:
average_mark = sum(valid_marks) / len(valid_marks)
max_mark = max(valid_marks)
min_mark = min(valid_marks)
output_lines.append("Class Statistics\n")
output_lines.append("-" * 15 + "\n")
output_lines.append(f"Average Mark: {average_mark:.2f}\n")
output_lines.append(f"Highest Mark: {max_mark:.1f}\n")
output_lines.append(f"Lowest Mark: {min_mark:.1f}\n\n")
output_lines.append("Grade Distribution\n")
output_lines.append("-" * 17 + "\n")
for grade, count in grade_counts.items():
output_lines.append(f"{grade}: {count}\n")
## Write the output file
with open(output_filename, 'w') as file:
file.writelines(output_lines)
print(f"Report successfully generated and saved to {output_filename}")
except Exception as e:
print(f"An error occurred: {str(e)}")
## Run the application
input_file = "/home/labex/project/student_data.csv"
output_file = "/home/labex/project/grade_report.txt"
process_student_data(input_file, output_file)
## Display the report in the console as well
print("\nGenerated Report Contents:")
print("--------------------------")
with open(output_file, 'r') as file:
print(file.read())
Ausführen der vollständigen Anwendung
Führen Sie die Anwendung aus:
python3 /home/labex/project/grading_application.py
Das Programm liest die Schülerdaten, berechnet die Noten, generiert einen Bericht und zeigt ihn in der Konsole an. Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Report successfully generated and saved to /home/labex/project/grade_report.txt
Generated Report Contents:
--------------------------
Student Grade Report
====================
Student: John
Subject: Mathematics
Marks: 88
Grade: B
Feedback: Very good! Above average performance.
Student: Emily
Subject: Mathematics
Marks: 92
Grade: A
Feedback: Excellent! Outstanding performance.
...
Class Statistics
---------------
Average Mark: 75.70
Highest Mark: 95.0
Lowest Mark: 42.0
Grade Distribution
-----------------
A: 2
B: 2
C: 3
D: 1
F: 2
Invalid: 0
Untersuchen der Berichtdatei
Sie können auch die generierte Berichtdatei überprüfen:
cat /home/labex/project/grade_report.txt
Die Datei sollte den gleichen Inhalt enthalten, der in der Konsole angezeigt wurde.
Verstehen der vollständigen Anwendung
Die von uns erstellte vollständige Bewertungsanwendung demonstriert mehrere wichtige Programmierkonzepte:
- Datei-E/A (File I/O): Lesen von Daten aus und Schreiben von Daten in Dateien
- Datenverarbeitung (Data Processing): Konvertieren und Analysieren von Rohdaten
- Statistikberechnung (Statistics Calculation): Berechnen von Durchschnittswerten und Ermitteln von Minimal-/Maximalwerten
- Fehlerbehandlung (Error Handling): Verwalten potenzieller Fehler während Dateioperationen
- Ausgabeformatierung (Formatting Output): Erstellen eines gut strukturierten, lesbaren Berichts
Diese Anwendung stellt einen realen Anwendungsfall für unser Bewertungssystem dar und zeigt, wie die If-Elif-Else-Anweisungen von Python angewendet werden können, um praktische Probleme in Bildungseinrichtungen zu lösen.