Кортежи и словари могут работать вместе
Мы подготовили простой пример, показывающий, как кортежи и словари могут работать вместе.
Представим себе следующую проблему:
- вам нужна программа для оценки средних баллов учеников;
- программа должна запрашивать имя ученика, а затем одну ее/его оценку;
- имена можно вводить в любом порядке;
- ввод пустого имени завершает ввод данных (примечание 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 }}
×