Хранение в списке большего количества элементов, чем требуется

#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))
 

Ответ №3:

Я думаю, что это ваш ответ:

 marksheet = {}
n = int(input("Enter n: "))
key = input("Enter names: ")
marks = list()
for i in range(n):
    marks.append(float(input("Enter marks: ")))
marksheet[key] = marks
marksheet
 

выход:

введите описание изображения здесь