Форум сайта python.su
Всем привет. Суть задачи прикрепил фото.
import pickle shows = {'Секретные материалы': {'Жанр':'фантастика', 'Рейтинг':0.9},'Ведьмак': {'Жанр':'фэнтази', 'Рейтинг':0.95}, 'Клан Сопрано': {'Жанр':'криминал','Рейтинг':'0.8'},'24': {'Genre':'драма', 'Rating': '0.75'}, 'Черное зеркало': {'Жанр':'фантастика', 'Рейтинг':0.98},'Во все тяжкие':{'Жанр': 'криминал', 'Рейтинг':'0.85'}, 'Игра престолов':{'Жанр':'фэнтази','Рейтинг':0.87},'Карточный домик':{'Genre':'драма', 'Rating':0.82}, 'Рик и Морти':{'Жанр':'фантастика','Рейтинг':1}} def gen_names (genres): # функция : serials = {} # словарь сериалов ratings = [] # сбор рейтинга quantity = 0 # переменная для количества сериалов for k, v in shows.items(): # создаюм цикл для ключей и значений в shows try: # используем исключения if v['Жанр'] == genres and type(v['Рейтинг']) != float: # если ключ равено жанру; если значение не равно флоат quantity += 1 # +1 к переменной number_ratings = float(v['Рейтинг']) # подводим к float ratings.append(number_ratings) # добавляем в список ratings serials[k] = v # запись в словарь elif v['Жанр'] == genres: # тоже самое, но без уточнения типа значения ratings.append(v['Рейтинг']) quantity += 1 serials[k] = v except KeyError: # исключаем ошибку и меняем ключ if v['Genre'] == genres: quantity += 1 ratings.append(v['Rating']) serials[k] = v avg_rating = sum(ratings) / quantity file = open(genres + '.dat', 'wb') pickle.dump(serials, file) file.close() resik = print('Жанр: {}, Кол-во сериалов: {},'.format(genres,quantity) + 'Рейтинг: {}'.format(avg_rating)) return resik g_list = [] for k, v in shows.items(): try: g_list.append(v['Жанр']) except: g_list.append((v['Genre'])) best_genres = set(g_list) for i in best_genres: gen_names(i)
Офлайн
i4etverg_exУ тебя есть рейтинги в словаре, которые записаны в строковом виде. Переведи их в числа.
Помогите найти ошибку в коде.
Отредактировано py.user.next (Июль 5, 2021 01:41:09)
Офлайн
py.user.nextЭто входит в условия задачи.
Офлайн
У тебя либо все рейтинги должны быть в строковом виде, либо все рейтинги должны быть в числовом виде. А когда вперемешку идёт, это ты где-то что-то напутал или недопреобразовал.
Вот у тебя идёт вот такая фигня
'Секретные материалы': {'Жанр':'фантастика', 'Рейтинг':0.9}
'Клан Сопрано': {'Жанр':'криминал','Рейтинг':'0.8'}
>>> 1 + '2' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str' >>>
Офлайн
py.user.nextЭто условие такое(
У тебя либо все рейтинги должны быть в строковом виде, либо все рейтинги должны быть в числовом виде. А когда вперемешку идёт, это ты где-то что-то напутал или недопреобразовал.Вот у тебя идёт вот такая фигня
shows = {'Секретные материалы': {'Жанр':'фантастика', 'Рейтинг':0.9},'Ведьмак': {'Жанр':'фэнтази', 'Рейтинг':0.95}, 'Клан Сопрано': {'Жанр':'криминал','Рейтинг':'0.8'},'24': {'Genre':'драма', 'Rating': '0.75'}, 'Черное зеркало': {'Жанр':'фантастика', 'Рейтинг':0.98},'Во все тяжкие':{'Жанр': 'криминал', 'Рейтинг':'0.85'}, 'Игра престолов':{'Жанр':'фэнтази','Рейтинг':0.87},'Карточный домик':{'Genre':'драма', 'Rating':0.82}, 'Рик и Морти':{'Жанр':'фантастика','Рейтинг':1}} rating_sum = 0 # создаём переменную с рейтингами quantity_shows = len(shows.keys()) # переменная для количества ключей for show in shows.values(): # цикл шоус в значениях шоус try: rating_sum += show['Рейтинг'] # прибавляем к перемнной rating_sum значения в 'Рейтинг' except KeyError: # исключаем ошибку KeyError try: rating_sum += show['Rating'] # прибавляем к перемнной rating_sum значения в 'Rating' except: rating_sum += float(show['Rating']) # прибавляем к перемнной rating_sum значения в 'Rating' except TypeError: # исключая ошибку TypeError rating_sum += float(show['Рейтинг']) # прибавляем к перемнной rating_sum значения в 'Рейтинг' print (rating_sum / quantity_shows) # сумму всех рейтингов делем на количество сериалов
Офлайн
i4etverg_exРешил.
Офлайн
i4etverg_exНе, надо взять исходные данные, привести их к нормальному виду и подавать в код уже приведённые данные.
Надо было при append всё подвести к float
i4etverg_exДаже если так, надо данные сначала привести к нормальному виду. А ставить по всему коду приведение к float - это глупость. Завтра тип сменится с float на другой - ты как дурак будешь лазить по всему коду и менять это. А послезавтра тип опять сменится и всё опять повторится. А если данные вдруг станут чистыми, как и должно быть изначально, то твой код будет делать преобразование из float во float - избыточные операции.
Это условие такое(
i4etverg_exДумаю, ты попался на такой курс, где нужным вещам не учат, а всякой ерунде учат с умным видом.
Это условие такое(
где необходимо использовать try, except
вот предыдущее задание
Офлайн
Ребят, помогите пожалуйста с задачкой. Проблема состоит в том, что я самоучка и курсы прохожу на версии 3. Задание на стороннем сайте попалось такое:
Перед вами код на python 2.7
a =
b = a
b += 177
print a
Есть ли в нем ошибки? Если да, предложите вариант/-ы исправления. Что выведет исправленный код в результате выполнения?
Офлайн