Python: подсчитать среднюю оценку всех учеников с одинаковым предметом - PullRequest
0 голосов
/ 09 января 2020

Я python новичок и выполнил задание для себя, чтобы лучше справиться с заявлением. Задача имеет следующие критерии:

  1. загрузить данные из файла .csv и показать его - файл содержит данные о имя и фамилию учащихся, какой предмет они слушают и какую оценку они имеют от 1 до 10
  2. , у пользователя есть возможность ввести предмет и , если предмет существует он показывает всех студентов, которые слушают предмет он также показывает средний балл всех студентов, которые слушают предмет
  3. , если вход не совпадает любой из субъектов отображает сообщение об ошибке и не показывает среднее значение оценка предмета .

Я отобразил данные и включил поиск по предмету, но не могу понять, как не показывать среднюю оценку, если ввод, если отличается от ввода существующие предметы.

Файл с именем Students.csv содержит:

John;Doe;Informatics;4
Max;King;Biology;3
Tim;Lambert;Computer Science;2
Anna;Gray;Geography;6
Megan;Hart;Englisch;7
Phil;Hill;German;8
Audrey;Ava;Informatics;3
Bella;Carol;Informatics;7
Diana;Diane;Englisch;2
Bella;Bernadette;Englisch;1
Carolyn;Chloe;Biology;9
Carol;Caroline;Biology;8
Elizabeth;Ella;Geography;3

Это мой task_2.py Python (3.8.1) код:

#open the file and create a list
work_file  = open("students.csv","r")
students = []
#print(work_file)

#create a sublist
for row in work_file:
    row = row.rstrip()
    row_sublist = row.split(";")
    students.append(row_sublist)

#ordered heading
print("--------------")
print("About the students: ")
print("--------------")
print("{0:18}{1:18}{2:18}{3:18}".format("Name","Last","Subject","Grade"))
print("{0:18}{1:18}{2:18}{3:18}".format("----","----","-------","-----"))

#print
for bundle in students:
    for data in bundle:
        print("{0:17}".format(data), end=" ")
    print()

print()#/n
#input
question = input("Witch subject do u wont to know mmore about? ")

#initialize
counter = 0
grade = 0
average = 0
valid = ""

#search
for bundle in students:
    if question == bundle[2]:
        valid = "yes"
        grade = grade + int(bundle[3])
        counter = counter + 1
        average = grade/counter
        for data in bundle:
            print("{0:17}".format(data), end=" ")
        print()

#print average
print("The average is: ", average)

#print the
if valid != "yes":
   print("Error")

#close
work_file.close()

Любая помощь будет принята с благодарностью. Спасибо за потраченное время и хорошего дня.

Правка: изменилась ведьма, на которую

Ответы [ 3 ]

1 голос
/ 09 января 2020

Вам просто нужно поместить среднее значение в операторе if:

if valid == "yes":
    print("The average is: ", average)
1 голос
/ 09 января 2020

Ничего себе. Ты так близко Просто сделайте небольшое изменение, как это.

Из этого

#print average 
print("The average is: ", average) 
#print the 
if valid != "yes": 
  print("Error")

В это

#print the 
if valid != "yes": 
  print("Error")
else:
  print("The average is: ", average) 

ТБХ, трудно поверить, что вы новичок. Уверен, если вы выполните go во всех концепциях, вы быстро станете экспертом.

0 голосов
/ 10 января 2020
import csv
import statistics
# Try these modules

# Get the question  first
subject = input("Which subject do u want to know more about? ")

# Read the file
student_file = open('students.csv', 'r')
reader = csv.reader(student_file, delimiter=';')

# Find Students who take same subject
same_subject_students = []
for row in reader:
    if subject.lower() == str(row[2]).lower():
        same_subject_student = [row[0], row[1], row[2], int(row[3])]
        same_subject_students.append(same_subject_student)

# Check if any students take same subject and print them along with their average grade
if len(same_subject_students) > 0:
    print("--------------")
    print("About the students: ")
    print("--------------")
    print("{0:18}{1:18}{2:18}{3:18}".format("Name", "Last", "Subject", "Grade"))

    grades = []
    for student in same_subject_students:
        grades.append(student[3])
        print("{0:18}{1:18}{2:18}{3:5}".format(student[0], student[1], student[2], student[3]))

    print("Their average is grade: %.2f" % statistics.mean(grades))
else:
    print("No Student is taking", subject)

student_file.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...