Module (72%)
Section (75%)

Кортежи и словари могут работать вместе

Мы подготовили простой пример, показывающий, как кортежи и словари могут работать вместе.

Представим себе следующую проблему:

  • вам нужна программа для оценки средних баллов учеников;
  • программа должна запрашивать имя ученика, а затем одну ее/его оценку;
  • имена можно вводить в любом порядке;
  • ввод пустого имени завершает ввод данных (примечание 1: ввод пустой оценки вызовет исключение ValueError, но не беспокойтесь об этом сейчас, Вы увидите, как обрабатывать такие случаи, когда мы говорим об исключениях во второй части серии курсов Основы Python)
  • затем должен быть создан список всех имен вместе с вычисленным средним баллом.

Посмотрите на код в редакторе. Вот как это делается.

Теперь давайте проанализируем это построчно:

  • строка 1: создание пустого словаря для входных данных; имя студента используется в качестве ключа, а все связанные с ним оценки хранятся в кортеже (кортеж может быть значением словаря - это совсем не проблема)
  • строка 3: вход в "бесконечный" цикл (не волнуйтесь, он прервется в нужный момент)
  • строка 4: чтение имени ученика;
  • строка 5-6: если имя - пустая строка ( ), выход из цикла ;
  • строка 8: запрос одной из оценок ученика (целое число от 0 до 10)
  • строки 9-10: если введенная оценка не находится в диапазоне от 0 до 10, выход из цикла;
  • строки 12-13: если имя ученика уже есть в словаре, добавить к связанному кортежу новую оценку (обратите внимание на оператор +=)
  • строки 14-15: если это новый ученик (неизвестный словарю), создать новую запись - ее значение представляет собой одноэлементный кортеж, содержащий введенную оценку;
  • строка 17: итерирование по отсортированным именам студентов;
  • строки 18-19: инициализация данных, необходимых для вычисления среднего (sum и counter)
  • строки 20-22: мы перебираем кортеж, беря все последующие оценки и обновляя sum вместе с counter;
  • строка 23: узнать и вывести имя ученика и средний балл.

Диалог с нашей программой:

Enter the student's name: Bob Enter the student's score (0-10): 7 Enter the student's name: Andy Enter the student's score (0-10): 3 Enter the student's name: Bob Enter the student's score (0-10): 2 Enter the student's name: Andy Enter the student's score (0-10): 10 Enter the student's name: Andy Enter the student's score (0-10): 3 Enter the student's name: Bob Enter the student's score (0-10): 9 Enter the student's name: Andy : 5.333333333333333 Bob : 6.0

output



Code

school_class = {}

while True:
name = input("Enter the student's name: ")
if name == '':
break

score = int(input("Enter the student's score (0-10): "))
if score not in range(0, 11):
break

if name in school_class:
school_class[name] += (score,)
else:
school_class[name] = (score,)

for name in sorted(school_class.keys()):
adding = 0
counter = 0
for score in school_class[name]:
adding += score
counter += 1
print(name, ":", adding / counter)
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×