#python #list #dictionary
Вопрос:
Я пытаюсь получить несколько значений, хранящихся в списке, а затем этот список должен действовать как значение для ключа в словаре. Проблема состоит в том, чтобы получить имена 'n'
студентов и сохранить отметки по 3 предметам в списке и составить из них словарь, т. е.
Marksheet = {'Name': [mark1,mark2,mark3]}
Но, внося вклад в список, я вынужден учитывать n x subjects
вклады в своем списке, а не только 3. Я прикрепил свой код для справки —
marksheet = {}
n = int(input("Enter n: "))
marks = []
for i in range(n):
key = input("Enter names:")
num = 3
for a in range(num):
ele = float(input("Enter marks: "))
marks.append(ele)
marksheet[key] = marks
print(marks)
print(marksheet)
avg = sum(marks)/3
print(f'avg')
Комментарии:
1. Вы должны
marks = []
войти в цикл, или вы будете продолжать добавлять один и тот же список для всех студентов. Но на самом деле вопрос в том, как попросить несколько отметок в одной строке, верно?2. Не очень ясно, каков предполагаемый формат ввода. Можете ли вы привести пример?
3. Отступ в вашем коде нарушен.
4. @tobias_k Спасибо, ваше предложение работает
5. Любые предложения о том, как найти среднее значение оценок
Ответ №1:
Если вы хотите запросить все метки в одной строке, вы можете split
ввести данные, map
подстроки float
и собрать их в a list
. Обратите внимание, что таким образом количество отметок не ограничивается 3
(или гарантированно будет одинаковым для всех учащихся), а просто количеством цифр, разделенных пробелами, которые вводит пользователь.
marksheet = {}
n = int(input("Enter n: "))
for i in range(n):
key = input("Enter names: ")
marks = list(map(float, input("Enter marks: ").split()))
marksheet[key] = marks
Если вы хотите продолжать использовать этот внутренний цикл, обязательно повторяйте инициализацию marks
на каждой итерации, чтобы не использовать один и тот же список для каждого имени:
...
for i in range(n):
marks = []
...
Ответ №2:
Я думаю, что это поможет разместить список внутри вашего цикла, чтобы очистить его для каждого имени.
Например:
marksheet = {}
n = int(input("Enter n: "))
for i in range(n):
marks = []
key = input("Enter names:")
num = 3
for a in range(num):
ele = float(input("Enter marks: "))
marks.append(ele)
marksheet[key] = marks
print(marks)
print(marksheet)
avg = sum(marks)/3
print('avg {}'.format(avg))
Я также изменил инструкцию печати в конце на:
print('avg {}'.format(avg))