Aplicando o Sistema de Avaliação a um Conjunto de Dados Real
Agora, vamos aplicar nosso sistema de avaliação a um cenário mais realista. Criaremos um programa que lê dados de alunos de um arquivo, calcula as notas e escreve um relatório abrangente.
Criando um Conjunto de Dados de Amostra
Primeiro, vamos criar um arquivo com dados de alunos de amostra. Crie um novo arquivo chamado student_data.csv no diretório /home/labex/project com o seguinte conteúdo:
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
Criando a Aplicação de Avaliação Completa
Agora, crie um novo arquivo chamado grading_application.py no diretório /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())
Executando a Aplicação Completa
Execute a aplicação:
python3 /home/labex/project/grading_application.py
O programa lerá os dados dos alunos, calculará as notas, gerará um relatório e o exibirá no console. Você deve ver uma saída semelhante a:
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
Examinando o Arquivo de Relatório
Você também pode verificar o arquivo de relatório gerado:
cat /home/labex/project/grade_report.txt
O arquivo deve conter o mesmo conteúdo que foi exibido no console.
Compreendendo a Aplicação Completa
A aplicação de avaliação completa que criamos demonstra vários conceitos importantes de programação:
- I/O de Arquivo (File I/O): Leitura de dados de e escrita de dados em arquivos
- Processamento de Dados: Conversão e análise de dados brutos
- Cálculo de Estatísticas: Cálculo de médias e localização de valores mínimo/máximo
- Tratamento de Erros: Gerenciamento de erros potenciais durante operações de arquivo
- Formatação de Saída: Criação de um relatório bem estruturado e legível
Esta aplicação representa um caso de uso do mundo real para nosso sistema de avaliação, mostrando como as instruções if-elif-else do Python podem ser aplicadas para resolver problemas práticos em ambientes educacionais.