Member 13389943 Ответов: 2

Как мне подойти дальше к следующей проблеме?


Информация о курсах
Формат строки: код курса~название курса~семестр~год~преподаватель
Информация о студентах
Формат строки: номер рулона~полное имя
Информация об оценках
Формат строки: код курса~семестр~Год~Номер рулона~класс
Возможные оценки: A, AB, B, BC, C, CD, D с соответствующими оценочными баллами 10, 9, 8, 7, 6, 5 и 4. Средний балл студента - это сумма его баллов, деленная на количество курсов. Например, если студент прошел два курса с оценками а и С, средний балл оценки равен 8.50 = (10+7)÷2. Если студент не закончил ни одного курса, средний балл определяется как 0.

Можно предположить, что данные внутренне непротиворечивы. Для каждого класса во входных данных есть соответствующий код курса и номер рулона.

Каждый раздел ввода начинается со строки, содержащей одно ключевое слово. Первый раздел начинается со строки, содержащей курсы. Второй раздел начинается со строки, содержащей студентов. Третий раздел начинается со строки, содержащей оценки. Конец ввода обозначается строкой, содержащей EndOfInput.

Напишите программу на Python для чтения данных, как описано выше, и распечатайте строку со средним баллом оценки для каждого ученика в следующем формате:

Номер Рулона~Полное Имя~Средний Балл Оценки
Ваш вывод должен быть отсортирован по номеру рулона. Средний балл оценки должен быть округлен до 2 цифр после десятичной точки. Используйте встроенную функцию round().

Вот пример ввода и соответствующий ему вывод.

Пример Ввода
Courses
TRAN~Transfiguration~1~2011-2012~Minerva McGonagall
CHAR~Charms~1~2011-2012~Filius Flitwick
Students
SLY2301~Hannah Abbott
SLY2302~Euan Abercrombie
SLY2303~Stewart Ackerley
SLY2304~Bertram Aubrey
SLY2305~Avery
SLY2306~Malcolm Baddock
SLY2307~Marcus Belby
SLY2308~Katie Bell
SLY2309~Sirius Orion Black
Grades
TRAN~1~2011-2012~SLY2301~AB
TRAN~1~2011-2012~SLY2302~B
TRAN~1~2011-2012~SLY2303~B
TRAN~1~2011-2012~SLY2305~A
TRAN~1~2011-2012~SLY2306~BC
TRAN~1~2011-2012~SLY2308~A
TRAN~1~2011-2012~SLY2309~AB
CHAR~1~2011-2012~SLY2301~A
CHAR~1~2011-2012~SLY2302~BC
CHAR~1~2011-2012~SLY2303~B
CHAR~1~2011-2012~SLY2305~BC
CHAR~1~2011-2012~SLY2306~C
CHAR~1~2011-2012~SLY2307~B
CHAR~1~2011-2012~SLY2308~AB
EndOfInput


Sample Input

SLY2301~Hannah Abbott~9.5
SLY2302~Euan Abercrombie~7.5
SLY2303~Stewart Ackerley~8.0
SLY2304~Bertram Aubrey~0
SLY2305~Avery~8.5
SLY2306~Malcolm Baddock~6.5
SLY2307~Marcus Belby~8.0
SLY2308~Katie Bell~9.5
SLY2309~Sirius Orion Black~9.0


Что я уже пробовал:

(lis1, lis2, lis3)= ([], [], [])
 
a = input()
while True:
	
	if a == 'Courses':
		a =input()
		while a != 'Students':
			lis1.append(a.split('~'))
			a = input()
	elif a == 'Students':
		a =input()
		while a!= 'Grades':
			a.split(' ')
			lis2.append(a.split('~'))
			a = input()
	elif a == 'Grades':
		a =input()
		while a != 'EndOfInput':
			lis3.append(a.split('~'))
			a = input()
	elif a == 'EndOfInput':
		break
	else:
		break

мне удалось составить отдельный список курсов (lis1), студентов(lis2), классов(lis3), но я не знаю, что делать дальше и как подойти к дальнейшей помощи plz!!. Наверное, мне тоже нужны словари. кроме того, как я могу вычислить градацию по буквам и как, наконец, соединить все конкретные значения. Я предполагаю, что метод Join python будет полезен, но я не понимаю, как расположить все параметры

2 Ответов

Рейтинг:
2

Richard MacCutchan

Предположим, вам нужно просмотреть записи об оценках и найти ученика для каждого из них. Используя буквенные оценки, вы можете получить числовое значение и добавить его к общему количеству учащихся. После того как вы добавили все значения оценок, вы можете рассчитать средние значения. Возможно, Вам будет полезно создать класс для хранения всей информации для каждого ученика, а не использовать простые списки.

[редактировать]
Я вижу, что вы уже опубликовали этот вопрос, используя другую учетную запись (Пожалуйста, решите эту программу Python[^Пожалуйста, не создавайте несколько аккаунтов и не перепечатывайте один и тот же вопрос.
[/редактировать]


OriginalGriff

Но... но... но... он говорит: "Я еще один пользователь, столкнувшийся с той же проблемой", а вы ему не верите? :смеяться:

Member 13389943

Ха-ха...я совсем другой человек.

Richard MacCutchan

Да, конечно, вы. Странно, что у вас обоих один и тот же текст в ваших вопросах.

Member 13389943

Мы еще не выучили классы (ООП)!!
И все же мне это непонятно

Richard MacCutchan

Хорошо, тогда используйте то, чему вы научились. Самое главное-используйте свои заметки о курсе.

Рейтинг:
0

Member 13390209

# Установка оценок на их числовые значения
def convert_grade(класс):
если класс = = "а":
возврат 10
elif grade = = 'AB':
возвращение 9
elif grade == 'B':
возвращение 8
Элиф класс == 'Н':
возвращение 7
elif grade == 'C':
возвращение 6
Элиф класс == 'компакт':
возвращение 5
elif grade == 'D':
возвращение 4
еще:
возвращает 0


# 3 создание списков
(course_list, student_list, grade_list) = ([], [], [])

# Примите входные данные
inp = вход()


пока это правда:

если курсы ИНП =='':
inp = вход()
в то время как inp ! = 'студенты':
course_list.добавить(ЯП.сплит('~'))
inp = вход()

elif inp = = 'студенты':
inp = вход()
в то время как inp ! = 'оценки':
ИНП.сплит(' ')
student_list.добавить(ЯП.сплит('~'))
inp = вход()

elif inp = = 'оценки':
inp = вход()
while inp ! = 'EndOfInput':
grade_list.добавить(ЯП.сплит('~'))
inp = вход()
elif inp = = 'EndOfInput':
перерыв
еще:
перерыв

no_of_course = лен(course_list)
roll_list = []
список имен = []
trans_grade = []

# Получить номера рулонов
для i в диапазоне (0, len(student_list)):
roll_list. append(student_list[i][0])
name_list. append(student_list[i][1])

# Получение оценки для каждого студента
avg_grade = []

для i в диапазоне (0,len(grade_list)):
для j в диапазоне (i+1, len(grade_list)):
если grade_list[i][3] == grade_list[j][3]:
avg_grade.дописать((convert_grade(grade_list[я][4]) + convert_grade(grade_list[Дж][4]))/(no_of_course))


печати (avg_grade)
печать (roll_list)
печати (name_list)

печати (course_list)
печать (student_list)
печати (grade_list)


Dave Kreskowiak

Простите, а когда это у вас вошло в привычку делать за кого-то домашнее задание?