Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 30.10.2022
Сообщений: 13

TypeError: __str__ returned non-string (type tuple)

07.04.2023, 12:41. Показов 7009. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делал задание в Яндексе. Всё сделал, должно работать, но мне показывают ошибку там, где её быть не может (то есть тело метода класса я прописал правильно)

Код:
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
class Weapon:
    def __init__(self, name, damage, range):
        self.name = name
        self.damage = damage
        self.range = range
 
    def hit(self, actor, target):
        if target.is_alive() is False:
            print('Враг уже повержен')
        else:
            if ((target.pos_x - actor.pos_x) ** 2 + (target.pos_y - actor.pos_y) ** 2) ** 0.5 > self.range:
                print('Враг слишком далеко для оружия', self.name)
            else:
                print('Врагу нанесен урон оружием', self.name, 'в размере', self.damage)
                target.hp -= self.damage
 
    def __str__(self):
        return {self.name}
 
 
class BaseCharacter:
    def __init__(self, pos_x, pos_y, hp):
        self.pos_x = pos_x
        self.pos_y = pos_y
        self.hp = hp
 
    def move(self, delta_x, delta_y):
        self.pos_x += delta_x
        self.pos_y += delta_y
 
    def is_alive(self):
        if self.hp <= 0:
            return False
        else:
            return True
 
    def get_damage(self, amount):
        if self.is_alive():
            self.hp -= amount
 
    def get_coords(self):
        return (self.pos_x, self.pos_y)
 
 
class BaseEnemy(BaseCharacter):
    def __init__(self, pos_x, pos_y, weapon, hp):
        super().__init__(pos_x, pos_y, hp)
        self.weapon = weapon
 
    def hit(self, target):
        if isinstance(target, MainHero):
            self.weapon.hit(self, target)
        else:
            print('Могу ударить только Главного героя')
 
    def __str__(self):
        return 'Враг на позиции', (self.pos_x, self.pos_y), 'с оружием', self.weapon
 
 
class MainHero(BaseCharacter):
    def __init__(self, pos_x, pos_y, name, hp):
        super().__init__(pos_x, pos_y, hp)
        self.name = name
        self.current_weapon = 0
        self.weapons = []
 
    def hit(self, target):
        if len(self.weapons) != 0:
            if isinstance(target, BaseEnemy):
                self.weapons[self.current_weapon].hit(self, target)
            else:
                print('Могу ударить только Врага')
        else:
            print('Я безоружен')
 
    def add_weapon(self, weapon):
        if isinstance(weapon, Weapon):
            self.weapons.append(weapon)
            print('Подобрал', weapon.name)
        else:
            print('Это не оружие')
 
    def next_weapon(self):
        if len(self.weapons) == 0:
            print('Я безоружен')
        elif len(self.weapons) == 1:
            print('У меня только одно оружие')
        else:
            if self.current_weapon == 0:
                self.current_weapon += 1
            elif self.current_weapon > 1:
                self.current_weapon = 0
            else:
                self.current_weapon += 1
            print('Сменил оружие на', self.weapons[self.current_weapon].name)
 
    def heal(self, amount):
        self.hp += amount
        if self.hp > 200:
            self.hp = 200
        print('Полечился, теперь здоровья', self.hp)
Code
1
2
3
4
5
6
Ошибка: Traceback (most recent call last):
  File "/temp/executing/test.py", line 3, in <module>
    exec(sys.stdin.read().strip())
  File "<string>", line 31, in <module>
TypeError: __str__ returned non-string (type tuple)
make: *** [Makefile:5: run] Error 1
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.04.2023, 12:41
Ответы с готовыми решениями:

Ошибка TypeError: 'in <string>' requires string as left operand, not tuple
В чем заключается ошибка и как ее исправить? @bot.callback_query_handler(func=lambda call: True) def user_register(call): ...

TypeError: an integer is required (got type tuple)
Здравствуйте, делаю программу по распознаванию лиц, я начинающий,помогите, пожалуйста. Когда я распознавал лицо через веб-камеру, все...

TypeError: unsupported operand type(s) for ** or pow(): 'tuple' and 'float'
Всем привет! Хотел к каждому полученному значению приписать название столбцов. Код работает, но когда хочу название столбцов добавить...

22
0 / 0 / 0
Регистрация: 30.10.2022
Сообщений: 13
08.04.2023, 22:04  [ТС]
Студворк — интернет-сервис помощи студентам
Отладчиком я и смотрел, пропускает последний элемент.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def next_weapon(self):
        if len(self.weapons) == 0:
            print('Я безоружен')
        elif len(self.weapons) == 1:
            print('У меня только одно оружие')
        else:
            if self.current_weapon == 0:
                self.current_weapon += 1
            elif self.current_weapon > 1:
                self.current_weapon = 0
            else:
                self.current_weapon += 1
            print(f'Сменил оружие на {self.weapons[self.current_weapon]}')
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
08.04.2023, 23:11
Цитата Сообщение от Vovan4ikYT Посмотреть сообщение
пропускает последний элемент.
Ну, так у Вас, молодой человек, в условном блоке неразбериха...
Если current_weapon равно 0, то current_weapon += 1 (итог 1)
Иначе Если больше 1, то current_weapon = 0 (итог 0)
Иначе current_weapon +=1 (итог текущее значение +1)

Если current_weapon == 1, то новое значение будет 2, согласно инструкции Иначе и на следующем шаге попадет в ИначеЕсли со сбросом в 0

Т.е. у Вас здесь возможны всего три значения 0,1,2... а ожидали:
Цитата Сообщение от Vovan4ikYT Посмотреть сообщение
Сменил оружие на Длинный меч
Сменил оружие на Лук
Сменил оружие на Лазерная орбитальная пушка
Сменил оружие на Короткий меч
получить четыре...
0
0 / 0 / 0
Регистрация: 30.10.2022
Сообщений: 13
08.04.2023, 23:20  [ТС]
А, ок, не заметил, я ещё до этого хотел по индексам пройтись и минус забыл поставить, а потом когда на число сменил, это осталось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.04.2023, 23:20

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

TypeError: setText(self, str): argument 1 has unexpected type 'list'
Я тут начал изучать PyQT и у меня возникла проблема с выводом списка. Если коротка я обращаюсь к базе данных с запросом, и мне...

TypeError: type str doesn't define __round__ method
Пытаюсь из функции вернуть переменную __ms: def __str_to_int_to_str(self): return map(round(str(int(str(self.__ms))))) ...

Ошибка TypeError: can't multiply sequence by non-int of type 'str'
https://open.kattis.com/problems/runlengthencodingrun задача Суть задачи зашифровать сообщение. В первом случае, при шифре, пишется буква...

Нельзя преобразовать тип Tuple<string,string,string,string> к string
Здравствуйте, у меня возникла проблема. При запуске кода, вылезает ошибка &quot;Нельзя преобразовать тип...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru