Найти - Пользователи
Полная версия: Помогите найти ошибку в коде.
Начало » Python для новичков » Помогите найти ошибку в коде.
1
i4etverg_ex
Всем привет. Суть задачи прикрепил фото.

 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)

Вот что выводит терминал:
py.user.next
i4etverg_ex
Помогите найти ошибку в коде.
У тебя есть рейтинги в словаре, которые записаны в строковом виде. Переведи их в числа.
i4etverg_ex
py.user.next
Это входит в условия задачи.
py.user.next
У тебя либо все рейтинги должны быть в строковом виде, либо все рейтинги должны быть в числовом виде. А когда вперемешку идёт, это ты где-то что-то напутал или недопреобразовал.

Вот у тебя идёт вот такая фигня
  
'Секретные материалы': {'Жанр':'фантастика', 'Рейтинг':0.9}
И вот у тебя идёт вот такая фигня
  
'Клан Сопрано': {'Жанр':'криминал','Рейтинг':'0.8'}
С чего вдруг у тебя 0.8 в виде строки хранится?

А потом оно из-за этого пытается строку с числом сложить. Естественно, вылетает ошибка.
  
>>> 1 + '2'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>>
i4etverg_ex
py.user.next
У тебя либо все рейтинги должны быть в строковом виде, либо все рейтинги должны быть в числовом виде. А когда вперемешку идёт, это ты где-то что-то напутал или недопреобразовал.Вот у тебя идёт вот такая фигня
Это условие такое(
где необходимо использовать try, except
вот предыдущее задание, где надо было просто посчитать общий рейтинг:
 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 и сработало.
py.user.next
i4etverg_ex
Надо было при append всё подвести к float
Не, надо взять исходные данные, привести их к нормальному виду и подавать в код уже приведённые данные.

i4etverg_ex
Это условие такое(
Даже если так, надо данные сначала привести к нормальному виду. А ставить по всему коду приведение к float - это глупость. Завтра тип сменится с float на другой - ты как дурак будешь лазить по всему коду и менять это. А послезавтра тип опять сменится и всё опять повторится. А если данные вдруг станут чистыми, как и должно быть изначально, то твой код будет делать преобразование из float во float - избыточные операции.

i4etverg_ex
Это условие такое(
где необходимо использовать try, except
вот предыдущее задание
Думаю, ты попался на такой курс, где нужным вещам не учат, а всякой ерунде учат с умным видом.
Kristina1111
Ребят, помогите пожалуйста с задачкой. Проблема состоит в том, что я самоучка и курсы прохожу на версии 3. Задание на стороннем сайте попалось такое:
Перед вами код на python 2.7
a =
b = a
b += 177
print a
Есть ли в нем ошибки? Если да, предложите вариант/-ы исправления. Что выведет исправленный код в результате выполнения?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB