Подскажите, пожалуйста, каким способом можно это сделать

ks1891

Новичок
Пользователь
Янв 15, 2021
41
0
6
Начал решать задачу, но зашел в тупик. Уже перепробовал несколько вариантов - не получается. Можно, пожалуйста, небольшую подсказку, как можно это сделать

Python:
list = []
names = []
while True:
    a = input()
    list.append(a.split(", "))
    if a == "конец":
        break
list.pop(-1)
for i in list:
    if i[0] not in names:
        names.append(i[0])

1613299051641.png
 

Malchik_molodoi

Новичок
Пользователь
Июл 29, 2020
19
4
3
20
Вот, что получилось у меня. Конечно можно сделать и лучше, но в таком варианте все "по полочкам"
Python:
l = []
names = []
while True:                        #Получаем список состоящий типа [имя, балл]
    a = input()
    l.append(a.split(", "))
    if a == "конец":
        break
l.pop(-1)
for i in l:
    if i[0] not in names:       #Получаем список из имен [имя, имя, имя]
        names.append(i[0])

lis = []
for name in names:
    lis.append({'name':name, 'points':[], 'average':0})  #Составляем словари c ключами имя, баллы и средний балл

for x, one in enumerate(lis):                     #Добавляем баллы каждому человеку
    for y, el in enumerate(l):
        if l[y][0] == lis[x]['name']:
            lis[x]['points'].append(l[y][1])

for one in lis:
    summ = 0
    for dig in one['points']:
        summ += int(dig)
    one['average'] = summ / len(one['points'])  #Считаем средний балл каждому

highest = {'name':None, 'points':None, 'average':0}  #Находим лучшего
for one in lis:
    if one['average'] > highest['average']:
        highest = one

points_str = ''                                     #Формируем строку из баллов лучшего
for x, one in enumerate(highest['points']):
    if x == len(highest['points']) - 1:
        points_str = points_str + one + '.'
    else:
        points_str = points_str + one + ', '
        
print(f"{highest['name']}, {highest['average']}: {points_str}") #Выводим

Со словарями здесь будет проще, так как мы каждому человеку можем присвоить его баллы и средний балл.
Сейчас постараюсь все "разжевать":
1) Сначала я составил словари c ключами "имя", "баллы" и "средний балл" для каждого из представленных в вводе людей
Вставляя примеры из условия, мы получим:
Python:
[{'name': 'Клифф', 'points': [], 'average': 0}, {'name': 'Лиза', 'points': [], 'average': 0}, {'name': 'Сэм', 'points': [], 'average': 0}]

2) Далее я раскидал каждому его баллы и получилось:
Python:
[{'name': 'Клифф', 'points': ['1', '1', '1', '2'], 'average': 0}, {'name': 'Лиза', 'points': ['3', '5', '3', '4'], 'average': 0}, {'name': 'Сэм', 'points': ['5', '5', '4', '5'], 'average': 0}]

3)Потом я посчитал каждому его средний балл:
Python:
[{'name': 'Клифф', 'points': ['1', '1', '1', '2'], 'average': 1.25}, {'name': 'Лиза', 'points': ['3', '5', '3', '4'], 'average': 3.75}, {'name': 'Сэм', 'points': ['5', '5', '4', '5'], 'average': 4.75}]

4) Потом я нахожу лучшего из этого списка, сравнивая средние баллы

5) Под конец я формирую строку, для того чтобы потом вывести баллы на экран

6) Ну и вывожу всю информацию, используя форматирование и строку, ранее мною созданную
 
  • Мне нравится
Реакции: ks1891 и askme

ks1891

Новичок
Пользователь
Янв 15, 2021
41
0
6
Вот, что получилось у меня. Конечно можно сделать и лучше, но в таком варианте все "по полочкам"
Python:
l = []
names = []
while True:                        #Получаем список состоящий типа [имя, балл]
    a = input()
    l.append(a.split(", "))
    if a == "конец":
        break
l.pop(-1)
for i in l:
    if i[0] not in names:       #Получаем список из имен [имя, имя, имя]
        names.append(i[0])

lis = []
for name in names:
    lis.append({'name':name, 'points':[], 'average':0})  #Составляем словари c ключами имя, баллы и средний балл

for x, one in enumerate(lis):                     #Добавляем баллы каждому человеку
    for y, el in enumerate(l):
        if l[y][0] == lis[x]['name']:
            lis[x]['points'].append(l[y][1])

for one in lis:
    summ = 0
    for dig in one['points']:
        summ += int(dig)
    one['average'] = summ / len(one['points'])  #Считаем средний балл каждому

highest = {'name':None, 'points':None, 'average':0}  #Находим лучшего
for one in lis:
    if one['average'] > highest['average']:
        highest = one

points_str = ''                                     #Формируем строку из баллов лучшего
for x, one in enumerate(highest['points']):
    if x == len(highest['points']) - 1:
        points_str = points_str + one + '.'
    else:
        points_str = points_str + one + ', '
       
print(f"{highest['name']}, {highest['average']}: {points_str}") #Выводим

Со словарями здесь будет проще, так как мы каждому человеку можем присвоить его баллы и средний балл.
Сейчас постараюсь все "разжевать":
1) Сначала я составил словари c ключами "имя", "баллы" и "средний балл" для каждого из представленных в вводе людей
Вставляя примеры из условия, мы получим:
Python:
[{'name': 'Клифф', 'points': [], 'average': 0}, {'name': 'Лиза', 'points': [], 'average': 0}, {'name': 'Сэм', 'points': [], 'average': 0}]

2) Далее я раскидал каждому его баллы и получилось:
Python:
[{'name': 'Клифф', 'points': ['1', '1', '1', '2'], 'average': 0}, {'name': 'Лиза', 'points': ['3', '5', '3', '4'], 'average': 0}, {'name': 'Сэм', 'points': ['5', '5', '4', '5'], 'average': 0}]

3)Потом я посчитал каждому его средний балл:
Python:
[{'name': 'Клифф', 'points': ['1', '1', '1', '2'], 'average': 1.25}, {'name': 'Лиза', 'points': ['3', '5', '3', '4'], 'average': 3.75}, {'name': 'Сэм', 'points': ['5', '5', '4', '5'], 'average': 4.75}]

4) Потом я нахожу лучшего из этого списка, сравнивая средние баллы

5) Под конец я формирую строку, для того чтобы потом вывести баллы на экран

6) Ну и вывожу всю информацию, используя форматирование и строку, ранее мною созданную
Очень круто) Спасибо большое!!!
 

Форум IT Специалистов