final version
This commit is contained in:
parent
5d0c1614c8
commit
5981e1c814
18
result.txt
Normal file
18
result.txt
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
Загружено записей: 7
|
||||||
|
После удаления дубликатов: 7
|
||||||
|
|
||||||
|
Записи после удаления дубликатов:
|
||||||
|
1. Анна Кузнецова (ИВТ-201, курс 2) – Математика: 85.0 2. Иван Соколов (ИВТ-201, курс 2) – Математика: 92.0 3. Анна Кузнецова (ИВТ-201, курс 2) – Программирование: 78.0 4. Мария Ткач (ПИ-101, курс 1) – Программирование: 88.0 5. Иван Соколов (ИВТ-201, курс 2) – Программирование: 91.0 6. Иван Иванович (ИНБб-2301, курс 3) – Программирование: 95.0 7. Иван Иванович (ИНБб-2301, курс 3) – Математика: 91.0
|
||||||
|
После фильтрации (курс 2, оценка >= 70.0): 4 записей
|
||||||
|
Средний балл по выборке: 86.50
|
||||||
|
Список студентов (по убыванию среднего балла):
|
||||||
|
1. Иван Соколов - 91.50
|
||||||
|
2. Анна Кузнецова - 81.50
|
||||||
|
Распределение оценок:
|
||||||
|
5 (90-100): 2
|
||||||
|
4 (75-89): 2
|
||||||
|
3 (60-74): 0
|
||||||
|
2 (0-59): 0
|
||||||
|
Статистика по предметам:
|
||||||
|
Математика: оценок 2, средний 88.50
|
||||||
|
Программирование: оценок 2, средний 84.50
|
||||||
61
src/main.py
61
src/main.py
@ -93,21 +93,27 @@ def remove_duplicate_records(records):
|
|||||||
unique.append(r)
|
unique.append(r)
|
||||||
return unique
|
return unique
|
||||||
|
|
||||||
def export_grade_report(records, filtered, output_file):
|
def export_grade_report(records, filtered, output_file, course, min_grade, group):
|
||||||
with open(output_file, 'w', encoding='utf-8') as f:
|
with open(output_file, 'w', encoding='utf-8') as f:
|
||||||
f.write(f"Загружено записей: {len(records)}\n")
|
f.write(f"Загружено записей: {len(records)}\n")
|
||||||
f.write(f"После удаления дубликатов: {len(records)}\n")
|
f.write(f"После удаления дубликатов: {len(records)}\n")
|
||||||
f.write(f"После фильтрации (курс 2, оценка >= 80): {len(filtered)} записей\n")
|
f.write("\nЗаписи после удаления дубликатов:\n")
|
||||||
|
i = 1
|
||||||
|
for r in records:
|
||||||
|
f.write(f" {format_record(r, i)}")
|
||||||
|
i += 1
|
||||||
|
f.write(f"\nПосле фильтрации (курс {course}, оценка >= {min_grade}" + (f", группа {group}" if group else "") + f"): {len(filtered)} записей\n")
|
||||||
if filtered:
|
if filtered:
|
||||||
overall_avg_filtered = sum(r['grade'] for r in filtered) / len(filtered)
|
overall_avg_filtered = sum(r['grade'] for r in filtered) / len(filtered)
|
||||||
f.write(f"Средний балл по выборке: {overall_avg_filtered:.2f}\n")
|
f.write(f"Средний балл по выборке: {overall_avg_filtered:.2f}\n")
|
||||||
else:
|
else:
|
||||||
f.write("Средний балл по выборке: нет данных\n")
|
f.write("Средний балл по выборке: нет данных\n")
|
||||||
top3 = top_students_by_avg(filtered, 3)
|
unique_students_ids = set(r['student_id'] for r in filtered)
|
||||||
f.write("Топ-3 студента:\n")
|
all_students = top_students_by_avg(filtered, len(unique_students_ids))
|
||||||
|
f.write("Список студентов (по убыванию среднего балла):\n")
|
||||||
i = 1
|
i = 1
|
||||||
for sid, name, avg in top3:
|
for sid, name, avg in all_students:
|
||||||
f.write(f" {i}. {name} - {avg:.2f}")
|
f.write(f" {i}. {name} - {avg:.2f}\n")
|
||||||
i += 1
|
i += 1
|
||||||
dist = grade_distribution(filtered)
|
dist = grade_distribution(filtered)
|
||||||
f.write("Распределение оценок:\n")
|
f.write("Распределение оценок:\n")
|
||||||
@ -120,25 +126,52 @@ def export_grade_report(records, filtered, output_file):
|
|||||||
for subj, data in subj_stats.items():
|
for subj, data in subj_stats.items():
|
||||||
f.write(f" {subj}: оценок {data['count']}, средний {data['avg']:.2f}\n")
|
f.write(f" {subj}: оценок {data['count']}, средний {data['avg']:.2f}\n")
|
||||||
|
|
||||||
|
def format_record(r, idx):
|
||||||
|
return f"{idx}. {r['full_name']} ({r['group']}, курс {r['course']}) – {r['subject']}: {r['grade']:.1f}"
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
records = load_students('data/students.csv')
|
records = load_students('data/students.csv')
|
||||||
print(f"Загружено записей: {len(records)}")
|
print(f"Загружено записей: {len(records)}")
|
||||||
|
print("Исходные данные (все записи):")
|
||||||
|
i = 1
|
||||||
|
for r in records:
|
||||||
|
print(f" {format_record(r, i)}")
|
||||||
|
i += 1
|
||||||
records = remove_duplicate_records(records)
|
records = remove_duplicate_records(records)
|
||||||
|
|
||||||
print(f"После удаления дубликатов: {len(records)}")
|
print(f"После удаления дубликатов: {len(records)}")
|
||||||
filtered = filter_by_course(records, 2)
|
i = 1
|
||||||
filtered = filter_by_min_grade(filtered, 80)
|
for r in records:
|
||||||
print(f"После фильтрации (курс 2, оценка >= 80): {len(filtered)} записей")
|
print(f" {format_record(r, i)}")
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
try:
|
||||||
|
course = int(input("\nВведите курс для фильтрации (1-4): "))
|
||||||
|
min_grade = float(input("Введите минимальную оценку (0-100): "))
|
||||||
|
group = input("Введите название группы (или Enter, чтобы не фильтровать по группе): ").strip()
|
||||||
|
if group == "":
|
||||||
|
group = None
|
||||||
|
except ValueError:
|
||||||
|
print("Ошибка ввода. курс=2, мин.оценка=80, группа не фильтруется")
|
||||||
|
course, min_grade, group = 2, 80.0, None
|
||||||
|
filtered = filter_by_course(records, course)
|
||||||
|
filtered = filter_by_min_grade(filtered, min_grade)
|
||||||
|
if group:
|
||||||
|
filtered = filter_by_group(filtered, group)
|
||||||
|
print(f"\nПосле фильтрации (курс {course}, оценка >= {min_grade}" + (f", группа {group}" if group else "") + f"): {len(filtered)} записей")
|
||||||
if filtered:
|
if filtered:
|
||||||
overall_avg_filtered = sum(r['grade'] for r in filtered) / len(filtered)
|
overall_avg_filtered = sum(r['grade'] for r in filtered) / len(filtered)
|
||||||
print(f"Средний балл по выборке: {overall_avg_filtered:.2f}")
|
print(f"Средний балл по выборке: {overall_avg_filtered:.2f}")
|
||||||
else:
|
else:
|
||||||
print("Средний балл по выборке: нет данных")
|
print("Средний балл по выборке: нет данных")
|
||||||
top3 = top_students_by_avg(filtered, 3)
|
unique_students_ids = set(r['student_id'] for r in filtered)
|
||||||
print("Топ-3 студента:")
|
all_students = top_students_by_avg(filtered, len(unique_students_ids))
|
||||||
|
print("Список студентов (по убыванию среднего балла):")
|
||||||
i = 1
|
i = 1
|
||||||
for sid, name, avg in top3:
|
for sid, name, avg in all_students:
|
||||||
print(f" {i}. {name} - {avg:.2f}")
|
print(f" {i}. {name} - {avg:.2f}")
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
dist = grade_distribution(filtered)
|
dist = grade_distribution(filtered)
|
||||||
print("Распределение оценок:")
|
print("Распределение оценок:")
|
||||||
print(f" 5 (90-100): {dist[5]}")
|
print(f" 5 (90-100): {dist[5]}")
|
||||||
@ -149,8 +182,8 @@ def main():
|
|||||||
print("Статистика по предметам:")
|
print("Статистика по предметам:")
|
||||||
for subj, data in subj_stats.items():
|
for subj, data in subj_stats.items():
|
||||||
print(f" {subj}: оценок {data['count']}, средний {data['avg']:.2f}")
|
print(f" {subj}: оценок {data['count']}, средний {data['avg']:.2f}")
|
||||||
export_grade_report(records, filtered, 'output.txt')
|
export_grade_report(records, filtered, 'result.txt', course, min_grade, group)
|
||||||
print("Полный отчёт сохранён в output.txt")
|
print("Полный отчёт сохранён в result.txt")
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
Loading…
Reference in New Issue
Block a user