Применение системы оценивания к реальному набору данных
Теперь давайте применим нашу систему оценивания к более реалистичному сценарию. Мы создадим программу, которая считывает данные о студентах из файла, вычисляет оценки и записывает подробный отчет.
Создание образца набора данных
Сначала давайте создадим файл с образцом данных о студентах. Создайте новый файл с именем student_data.csv в каталоге /home/labex/project со следующим содержимым:
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
Создание полного приложения для оценивания
Теперь создайте новый файл с именем grading_application.py в каталоге /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())
Запуск полного приложения
Запустите приложение:
python3 /home/labex/project/grading_application.py
Программа прочитает данные о студентах, вычислит оценки, сгенерирует отчет и отобразит его в консоли. Вы должны увидеть вывод, похожий на:
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
Изучение файла отчета
Вы также можете проверить сгенерированный файл отчета:
cat /home/labex/project/grade_report.txt
Файл должен содержать то же содержимое, которое отображалось в консоли.
Понимание полного приложения
Полное приложение для оценивания, которое мы создали, демонстрирует несколько важных концепций программирования:
- Ввод/вывод файлов (File I/O): Чтение данных из файлов и запись данных в файлы
- Обработка данных (Data Processing): Преобразование и анализ необработанных данных
- Вычисление статистики (Statistics Calculation): Вычисление средних значений и поиск минимальных/максимальных значений
- Обработка ошибок (Error Handling): Управление потенциальными ошибками во время операций с файлами
- Форматирование вывода (Formatting Output): Создание хорошо структурированного, читаемого отчета
Это приложение представляет собой реальный пример использования нашей системы оценивания, показывающий, как операторы if-elif-else в Python могут быть применены для решения практических задач в образовательных учреждениях.