С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 01.11.2021
Сообщений: 8
1

TypeError: unsupported operand type(s) for //: 'NoneType' and 'int'

08.04.2023, 06:27. Показов 1823. Ответов 9

Author24 — интернет-сервис помощи студентам
Код полностью не готов т.к не могу починить ошибку
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import numpy as np
 
class GiftSet:
    def __init__(self, *data):
        self.data = list(data)
 
    def __iadd__(self, other):
        for i in other:
            self.data.append(i)
 
    def __floordiv__(self, other):
        data = self.data[1] // other
        return GiftSet(data)
    
gs = gs1 = GiftSet(20, 16, 7, 15)
gs += [13, 27, 8]
res = gs // 3 # unsupported operand type(s) for //: 'NoneType' and 'int'
экземпляр класса можно разделить на число (количество наборов): res = gs // number, при этом возвращается список экземпляров класса длиной, равной числу; вещи распределены в каждом экземпляре (в том же порядке) по целому числу от деления общего количества вещей на делитель, последние вещи (остаток от деления количества вещей на число) остаются в исходном экземпляре - это я хотел сделать
и когда я начал это делать словил эту ошибку, решил пойти от простого и она снова появилась.
подскажите как починить пожалуйста

Код
Exception has occurred: TypeError
unsupported operand type(s) for //: 'NoneType' and 'int'
  File "F:\veryimportant\tgbot_test.py", line 17, in <module>
    res = gs // 3 # unsupported operand type(s) for //: 'NoneType' and 'int'
TypeError: unsupported operand type(s) for //: 'NoneType' and 'int'
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2023, 06:27
Ответы с готовыми решениями:

TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
def F(n): if n &gt; 2: return G(n-2) def G(n): if n &gt; 1: return F(n - 1)...

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
def task23(start, end): if start &gt; end and start == 17: return 0 if start ==...

TypeError: unsupported operand type(s) for %: 'NoneType' and 'float'
Здравствуйте, имеется код: import math import random #f1 = y**2 #f2 = y*z #f3 = x*y + 2*y...

TypeError на строке 5: unsupported operand types for +: 'NoneType' and 'int'
Вот задача: https://pythontutor.ru/lessons/inout_and_arithmetic_operations/problems/shoelace/ ...

9
Любознательный
6693 / 1948 / 335
Регистрация: 10.03.2016
Сообщений: 4,504
08.04.2023, 10:10 2
Цитата Сообщение от Plemenb Посмотреть сообщение
gs += [13, 27, 8]
Вот это, что за действие?
К экземпляру класса добавили список и получили что? Правильно, "NoneType"... и пытаетесь его поделить на что?
Подозреваю, что требовалось не это, а вот это:
Python
1
gs.data += [13, 27, 8]
Цитата Сообщение от Plemenb Посмотреть сообщение
при этом возвращается список экземпляров класса длиной, равной числу;
возвращается список... но делите вы число равное первому по индексу элементу, записываете результат в data и возвращаете новый экземпляр класса с этим числом, т.е. список с единственным числом... всё верно? Или что-то другое требовалось?
0
Эксперт Python
4324 / 1872 / 334
Регистрация: 18.01.2021
Сообщений: 3,459
08.04.2023, 10:44 3
Цитата Сообщение от Plemenb Посмотреть сообщение
gs += [13, 27, 8]
Когда выполняется это действие, то это равнозначно
Python
1
gs = gs.__iadd__([13, 27, 8])
Но __iadd__ у вас ничего не возвращает, поэтому gs становится Null.
Чтобы это исправить надо в конце метода добавить возврат объекта:
Python
1
2
3
    def __iadd__(self, other):
        self.data.extend(other)
        return self
1
Любознательный
6693 / 1948 / 335
Регистрация: 10.03.2016
Сообщений: 4,504
08.04.2023, 12:53 4
Цитата Сообщение от Plemenb Посмотреть сообщение
это я хотел сделать
если правильно понял:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class GiftSet:
    def __init__(self, data):
        self.data = data
 
    def __iadd__(self, other):
        for i in other:
            self.data.append(i)
        return self
 
    def __floordiv__(self, other):
        x = divmod(len(self.data), other)
        d1 = self.data[:(len(self.data)-x[1])]
        d2 = self.data[(len(self.data)-x[1]):]
        j, arr, out = 0, [], []
        for y in d1:
            j +=1
            if j < x[0]:
                arr.append(y)
            else:
                arr.append(y)
                if len(arr) == x[0]:
                    out.append(arr)
                    arr = []
                j = 0
        self.data = d2
        return [GiftSet(z) for z in out]
    
gs = gs1 = GiftSet([20, 16, 7, 15])
gs += [13, 27, 8]
res = gs // 3
1
1 / 1 / 0
Регистрация: 01.11.2021
Сообщений: 8
15.04.2023, 07:17  [ТС] 5
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class GiftSet :
    def __init__(self, *args):
        self.gifts = list(args)
 
    def __floordiv__(self, other):
        x = divmod(len(self.data), other)
        d1 = self.data[:(len(self.data)-x[1])]
        d2 = self.data[(len(self.data)-x[1]):]
        j, arr, out = 0, [], []
        for y in d1:
            j +=1
            if j < x[0]:
                arr.append(y)
            else:
                arr.append(y)
                if len(arr) == x[0]:
                    out.append(arr)
                    arr = []
                j = 0
        self.data = d2
        return [GiftSet(z) for z in out]
 
    def __add__(self, new_gifts):
        self.gifts.extend(new_gifts)
 
    def cost(self):
        cost = 0
        for i, gift in enumerate(self.gifts):
            if i == 0:
                cost += gift
            elif i < 5:
                cost += gift * 0.95 ** i
            else:
                cost += gift * 0.5
        return int(cost)
 
    def get_gifts(self):
        return str(self.gifts)
вот мой код, а ошибка осталась
Код
Exception has occurred: TypeError
unsupported operand type(s) for //: 'NoneType' and 'int'
  File "F:\veryimportant\wall.py", line 43, in <module>
    res = gs // 3
TypeError: unsupported operand type(s) for //: 'NoneType' and 'int'
ТЕСТ на котором она появляеться
Python
1
2
3
4
5
gs = gs1 = GiftSet(20, 16, 7, 15)
gs += [13, 27, 8]
res = gs // 3
print(*[res[i].get_gifts() for i in range(len(res))], gs.get_gifts())
print(gs1.get_gifts())
вывод этого теста:
[20, 16] [7, 15] [13, 27] [8]
[8]
0
Любознательный
6693 / 1948 / 335
Регистрация: 10.03.2016
Сообщений: 4,504
15.04.2023, 08:15 6
Цитата Сообщение от Plemenb Посмотреть сообщение
вот мой код, а ошибка осталась
Это же Ваш код... ну, ок, вижу, что с пониманием передачи параметров, мягко говоря, не разобрались... а с наименованиями атрибутов совсем беда. Простой копи-паст здесь не поможет, необходимо же осмысленно создавать классы с их атрибутами.
В первом варианте у Вас был при инициализации параметр data, теперь появился gifts, но деление осуществляется по первому варианту... так не получится.
Цитата Сообщение от Plemenb Посмотреть сообщение
вывод этого теста:
[20, 16] [7, 15] [13, 27] [8]
[8]
Это то, что должно быть результатом? Тогда вот:
найдите "десять" отличий:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class GiftSet:
    def __init__(self, *args):
        self.gifts = list(args)
 
    def __add__(self, new_gifts):
        self.gifts.extend(new_gifts)
        return self
 
    def __floordiv__(self, other):
        x = divmod(len(self.gifts), other)
        d1 = self.gifts[:(len(self.gifts)-x[1])]
        d2 = self.gifts[(len(self.gifts)-x[1]):]
        j, arr, out = 0, [], []
        for y in d1:
            j +=1
            if j < x[0]:
                arr.append(y)
            else:
                arr.append(y)
                out.append(arr)
                arr, j = [], 0
        self.gifts = d2
        return [GiftSet(*[v for v in z]) for z in out]
 
    def cost(self):
        cost = 0
        for i, gift in enumerate(self.gifts):
            if i == 0:
                cost += gift
            elif i < 5:
                cost += gift * 0.95 ** i
            else:
                cost += gift * 0.5
        return int(cost)
 
    def get_gifts(self):
        return str(self.gifts)
0
Модератор
Эксперт С++
13710 / 10910 / 6476
Регистрация: 18.12.2011
Сообщений: 29,133
15.04.2023, 14:51 7
У меня получилось попроще
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import copy
class GiftSet:
    def __init__(self, data):
        self.data = copy.deepcopy(data)
 
    def __iadd__(self, other):
        for i in other:
            self.data.append(i)
        return self
    def __floordiv__(self, other):
        tmp = GiftSet(self.data)
        for i in range(len(tmp.data)):
            tmp.data[i] //= other
        return tmp
    def print(self):
        print(self.data)
    
gs = GiftSet([20, 16, 7, 15])
gs += [13, 27, 8]
gs.print()
res = gs // 3
res.print()
0
Любознательный
6693 / 1948 / 335
Регистрация: 10.03.2016
Сообщений: 4,504
15.04.2023, 17:27 8
Цитата Сообщение от zss Посмотреть сообщение
У меня получилось попроще
Наверное, условия были недопоняты... что поделать, так уж написаны и я тоже с первого прочтения понял не так, как оно должно быть... но, т.к. ТС ничего не уточнил, всё же не исключено, что я таки и со второго прочтения понял неправильно.
Вернуть от деления нацело, необходимо не результат деления каждого элемента, тем же списком, той же длины, а разделить сам список на (other), то бишь на n частей и вернуть эти части новыми экземплярами класса, а остаток элементов, вернуть в исходном экземпляре.
Цитата Сообщение от Plemenb Посмотреть сообщение
при этом возвращается список экземпляров класса длиной, равной числу
в том смысле, что:
Цитата Сообщение от Plemenb Посмотреть сообщение
вещи распределены в каждом экземпляре (в том же порядке) по целому числу от деления общего количества вещей на делитель
т.е. в каждой части m элементов и порядок следования сохраняется...
0
1 / 1 / 0
Регистрация: 01.11.2021
Сообщений: 8
17.04.2023, 12:52  [ТС] 9
Вот сама задача:

Напишите класс GiftSet для распределения вещей по наборам.
Экземпляр класса инициализируется с произвольным числом вещей – чисел, выражающих их цену без скидки.
Методы, реализуемые классом (gs – экземпляр класса):
экземпляр класса можно разделить на число (количество наборов): res = gs // number, при этом возвращается список экземпляров класса длиной, равной числу; вещи распределены в каждом экземпляре (в том же порядке) по целому числу от деления общего количества вещей на делитель, последние вещи (остаток от деления количества вещей на число) остаются в исходном экземпляре;
к экземпляру класса можно прибавить список вещей: gs += array; они все добавляются в конец;

gs.cost() – возвращает стоимость набора: если в наборе одна вещь, она продается по полной стоимости, каждая следующая снижает общую стоимость набора на 5%, но не больше, чем до 50%, дальше не уменьшается; стоимость со скидкой округляется до целого числа вниз (в пользу покупателя);

gs.get_gifts() – возвращает все вещи в квадратных скобках через запятую и пробел в порядке, в котором они находятся в наборе.

Пример 1:
Ввод
Код
gs = gs1 = GiftSet(20, 16, 7, 15)
gs += [13, 27, 8]
res = gs // 3
print(*[res[i].get_gifts() for i in range(len(res))], gs.get_gifts())
print(gs1.get_gifts())
Вывод
Код
[20, 16] [7, 15] [13, 27] [8]
[8]
Пример 2
Ввод
Код
gs = gs1 = GiftSet(20, 16, 7, 15)
print(gs.cost())
gs += [13, 27, 8, 9, 10, 12, 3, 6]
print(gs1.cost())
print(gs is gs1)
Вывод
Код
49
73
True
0
Любознательный
6693 / 1948 / 335
Регистрация: 10.03.2016
Сообщений: 4,504
17.04.2023, 21:10 10
Лучший ответ Сообщение было отмечено Plemenb как решение

Решение

Цитата Сообщение от Plemenb Посмотреть сообщение
gs.cost() – возвращает стоимость набора: если в наборе одна вещь, она продается по полной стоимости, каждая следующая снижает общую стоимость набора на 5%, но не больше, чем до 50%, дальше не уменьшается; стоимость со скидкой округляется до целого числа вниз (в пользу покупателя);
У Вас и здесь с реализацией проблема...
К тому же, Ваш тест (пример 2), с ошибкой во втором ответе...
здесь, все верно:
(20 + 16 + 7 + 15) * 0.15 = 49

а вот, далее... максимальная скидка, по алгоритму, равна 50%, это должно быть 11 вещей в наборе со скидкой на всю сумму, плюс оставшиеся вещи с полной стоимостью:
(20 + 16 + 7 + 15 + 13 + 27 + 8 + 9 + 10 + 12 + 3) * 0.5 + 6 = 76
- проверяйте...
А подсчет:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class GiftSet:
    def __init__(self, *args):
        self.gifts = list(args)
 
    def __add__(self, new_gifts):
        self.gifts.extend(new_gifts)
        return self
 
    def __floordiv__(self, other):
        x = divmod(len(self.gifts), other)
        d1 = self.gifts[:(len(self.gifts)-x[1])]
        d2 = self.gifts[(len(self.gifts)-x[1]):]
        j, arr, out = 0, [], []
        for y in d1:
            j +=1
            if j < x[0]:
                arr.append(y)
            else:
                arr.append(y)
                out.append(arr)
                arr, j = [], 0
        self.gifts = d2
        return [GiftSet(*[v for v in z]) for z in out]
 
    def cost(self):
        cst, res = 0, 0
        for i, gift in enumerate(self.gifts):
            if i == 0:
                cst += gift
                res += cst
            elif i <= 10:
                cst += gift
                res = cst * (1 - i * .05)
            else:
                res += gift
        return int(res)
 
    def get_gifts(self):
        return str(self.gifts)    
 
gs = gs1 = GiftSet(20, 16, 7, 15)
print(gs.cost())
gs += [13, 27, 8, 9, 10, 12, 3, 6]
print(gs1.cost())
print(gs is gs1)
1
17.04.2023, 21:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2023, 21:10
Помогаю со студенческими работами здесь

TypeError: unsupported operand type(s) for -: 'int' and 'list'
Подскажите пожалуйста, что нужно сделать, что бы исправить данную ошибку import cv2 from...

TypeError: unsupported operand type(s) for +: 'int' and 'list'
Привет, пытаюсь написать бота vk с помощью библиотеки vk_api Хочу сделать так чтобы сообщение...

TypeError: unsupported operand type(s) for *: 'int' and 'type'
Подскажите что за ошибка? TypeError: unsupported operand type(s) for *: 'int' and 'type' import...

Ошибка: TypeError: unsupported operand type(s) for >>: 'str' and 'int'
class Note(): def __init__(self, note, found=False): self.note = note ...

TypeError: unsupported operand type(s) for
Traceback (most recent call last): File &quot;G:/Питон/0003.py&quot;, line 5, in &lt;module&gt; ...

TypeError: unsupported operand type(s)
class Person: def print_info(self, n): for i in range(n): print(f'Name: {self.name},...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru