Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 22.11.2022
Сообщений: 13

TypeError: bad operand type for abs(): 'str'

02.01.2024, 21:55. Показов 2938. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код и проверяющая программа выдает такую ошибку (сам код полностью рабочй). Помогите, почему ошибка вылезает?

Вот условие: Давайте попробуем создать небольшую игру с графическим пользовательским интерфейсом на PyQT, которая по своей сути напоминает некоторую вариацию игр Ним, которые мы делали раньше.

В начале игры генерируется число X и выводится на экран. Также создаются две кнопки, одна из которых отвечает за увеличение этого числа на Y, а вторая — за уменьшение числа на Z. X, Y, Z — случайные положительные целые числа.

Задача игрока — с помощью этих двух кнопок за 10 ходов привести значение Х к 0. Количество оставшихся ходов должно выводиться на экран. Если у пользователя получилось выиграть, нужно вывести поздравительное сообщение, если нет — вывести сообщение о проигрыше и начать игру заново с новыми значениями X, Y, Z.

Task10.gif

Класс, реализующий окно приложения, назовите NimStrikesBack. Сообщения о проигрыше и выигрыше поместите в QLabel result_label. Также в классе должны быть поля X, Y, Z, с соответствующей информацией. Кнопку для увеличения на Y назовите btnp, для уменьшения на Z назовите btnm.
Вот код:

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
import sys
import random
from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton, QLabel
 
 
class NimStrikesBack(QWidget):
 
    def check(self):
        self.output0.setText(self.count)
        self.output1.setText(self.X)
        if int(self.X) == 0 and int(self.count) > 0:
            self.result_label.setText('Вы победили, начинаем новую игру')
            self.new_game()
        if int(self.count) == 0:
            self.result_label.setText('Вы проиграли')
            self.new_game()
 
    def __init__(self):
        super().__init__()
 
        self.setGeometry(100, 300, 720, 500)
        self.setWindowTitle('Ним наносит ответный удар')
 
        self.X = str(random.randint(1, 10))  # число
        self.Y = str(random.randint(1, 10))  # увеличение
        self.Z = str(random.randint(-10, -1))  # уменьшение
        self.count = str(10)
 
        # пишем результат
        self.result_label = QLabel(self)
        self.result_label.setText("                                             ")
        self.result_label.move(0, 0)
 
        # button +
        self.btnp = QPushButton(self)
        self.btnp.resize(50, 40)
        self.btnp.move(30, 30)
        self.btnp.setText('+' + self.Y)
        self.btnp.clicked.connect(self.plus)
 
        # button -
        self.btnm = QPushButton(self)
        self.btnm.resize(50, 40)
        self.btnm.move(100, 30)
        self.btnm.setText(self.Z)
        self.btnm.clicked.connect(self.minus)
 
        # txt ввода 1
        self.tabel0 = QLabel(self)
        self.tabel0.setText("Осталось ходов")
        self.tabel0.move(0, 100)
 
        # вывод 1
        self.output0 = QLineEdit(self)
        self.output0.move(100, 90)
        self.output0.resize(30, 30)
        self.output0.setText(self.count)
        self.output0.setEnabled(False)
 
        # txt ввода 2
        self.tabel1 = QLabel(self)
        self.tabel1.setText("Текущее число")
        self.tabel1.move(0, 150)
 
        # вывод 2
        self.output1 = QLineEdit(self)
        self.output1.setText(self.X)
        self.output1.move(100, 150)
        self.output1.resize(30, 30)
        self.output1.setEnabled(False)
 
    def plus(self):
        self.X = str(int(self.X) + int(self.Y))
        # self.output1.setText(self.x)
        self.count = str(int(self.count) - 1)
        # self.output0.setText(self.count)
        self.check()
 
    def minus(self):
        self.X = str(int(self.X) + int(self.Z))
        # self.output1.setText(self.x)
        self.count = str(int(self.count) - 1)
        # self.output0.setText(self.count)
        self.check()
 
    def new_game(self):
        self.X = str(random.randint(1, 10))  # число
        self.Y = str(random.randint(1, 10))  # увеличение
        self.Z = str(random.randint(-10, -1))  # уменьшение
        self.count = str(10)
        self.output0.setText(self.count)
        self.output1.setText(self.X)
        self.btnm.setText(self.Z)
        self.btnp.setText('+' + self.Y)
 
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
    wnd = NimStrikesBack()
    wnd.show()
    sys.exit(app.exec())
Добавлено через 38 минут
Вот сама ошибка:
Traceback (most recent call last):
File "/temp/executing/test.py", line 60, in check
if not (pX - abs(solO.Z) == solO.X):
^^^^^^^^^^^
TypeError: bad operand type for abs(): 'str'
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.01.2024, 21:55
Ответы с готовыми решениями:

Ошибка unsupported operand type(s) for +: 'int' and 'str'
Здравствуйте, выскакивает такая ошибка, после введения числа и текста и нажатия на кнопку зашифровать. Хотя все переменные я задал и вроде...

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

bad operand type for abs(): 'str'
Как исправить данную ошибку #!/usr/bin/env python3 import rospy from geometry_msgs.msg import Twist def move(): # Starts...

3
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,307
03.01.2024, 12:08
неправильный тип операнда для abs(): 'str' и что тут не понятного? явно написано что в строке
Python
1
if not (pX - abs(solO.Z) == solO.X):
переменные solO.Z и solO.X должны быть числами а не строкой.
1
0 / 0 / 0
Регистрация: 22.11.2022
Сообщений: 13
04.01.2024, 14:43  [ТС]
Просто я переписал, чтобы в self.X и тд сохранялось численное значение, а ошибка сохраняется
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,307
04.01.2024, 18:02
Цитата Сообщение от bbng Посмотреть сообщение
Просто я переписал, чтобы в self.X
так ошибка указывает на 60 строку
Цитата Сообщение от bbng Посмотреть сообщение
File "/temp/executing/test.py", line 60, in check
if not (pX - abs(solO.Z) == solO.X):
а у тебя нет условия в 60 строке. в чем подвох?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.01.2024, 18:02
Помогаю со студенческими работами здесь

Ошибка: 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: unsupported operand type(s) for *: 'int' and 'type'
Подскажите что за ошибка? TypeError: unsupported operand type(s) for *: 'int' and 'type' import math a=float(input("Введите...

TypeError: unsupported operand type(s) for +: 'type' and 'type'
x = int y = int while x + y <= 100: x = input() y = input() print(x, y, x + y) пишет такую ошибку в 3 строчке...

TypeError: unsupported operand type(s) for
помогите пожалуйста бороться с ошибками питона

TypeError: unsupported operand type(s) for
ll ist= n = int(input("Enter the length of your list: ")) for i in range (1,n+1): a=int(input("Enter the %d number: " %i )) ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru