Не могу найти ошибку

Рамзан_9264

Новичок
Пользователь
Сен 4, 2023
7
1
3
Привет!
Я писал типо космо-магазин. ну или просто опись грузов.
Крч вроде сдел что надо и осталось добавить удаление ненужного текста и всё. Но начала выскакивать ошибка. Испровляю её выскакивает другая. Исправляю другую выскакивает прошлая.

Файлы я вроде прикрепил.
По моему дело в том, что я делую переменную, которая несёт имя другой переменной с чилом. Мне надо использовать первую переменну но программа видет текст а не название переменной содержащей число.
Как сделать так, что бы когда я использовал переменную towar_name, программа видела не имя переменной а то, что в ней находится?
 

Рамзан_9264

Новичок
Пользователь
Сен 4, 2023
7
1
3
Файлы кода
 

Рамзан_9264

Новичок
Пользователь
Сен 4, 2023
7
1
3
Первый файл:
Название: StarShop.py
class StarShop: # Список товаров
def __init__(self):
self.bolt_gaiki = 0 # Болты и гайки
self.bio_material = 0 # Биоматериалы
self.stal_slitki = 0 # Стальные слитки
self.robot = 0 # Роботы работники
self.woda = 0 # Вода (10 литров)

# Прибавляем колво товара
def plus_towars(self, towar_name, plus_value): # Надо назвать нейм товара и колво добавления.
if hasattr(self, towar_name): # Проверка нейма
setattr(self, towar_name, getattr(self, towar_name) + plus_value)
print("Товар успешно добавлен!")
else:
print("Такого товара нет.")

# Убавляем колво товара
def minus_towars(self, towar_name, minus_value): # Называем нейм товара
if hasattr(self, towar_name): # Проверка нейма
if getattr(self, towar_name) >= minus_value:
setattr(self, towar_name, getattr(self, towar_name) - minus_value)
print("Товар успешно убавлен")
else:
print("Нельзя выгружать больше, чем имеется")
else:
print("Такого товара нет.")

# Статистика
def statis(self):
table = "{:<15} {:<15} {:<15}".format("Имя товара", "Кол-во", "Стоимость")
towar1 = "{:<15} {:<15} {:<15}".format("Болты и гайки", self.bolt_gaiki, "3 руб")
towar2 = "{:<15} {:<15} {:<15}".format("Биоматериалы", self.bio_material, "100 руб")
towar3 = "{:<15} {:<15} {:<15}".format("Стальные слитки", self.stal_slitki, "400 руб")
towar4 = "{:<15} {:<15} {:<15}".format("Роботы работяги", self.robot, "1500 руб")
towar5 = "{:<15} {:<15} {:<15}".format("Вода (10 л)", self.woda, "50 руб")

print(table)
print(towar1)
print(towar2)
print(towar3)
print(towar4)
print(towar5)

Второй файл:
Название: UseClass.py

from StarShopClass import StarShop

shop = StarShop()

print("\033[44m")

print("Это система сделана для того, что бы следить за колличеством товаров, их добавлением и убавлением \n")

while True:
print('\n')
print('1 - Добавить груз \n2 - Убавить груз \n3 - Статистика')

def statis(): # Функция проверки статистики
print('\n')
shop.statis()
print('\n\nНажмите пробел для возвращения в меню выбора.')
input()

def adding():
print('\n')
print('Вводите изначальные названия товаров.')
print('bolt_gaiki = Болты и гайки')
print('bio_material = Биоматериалы')
print('stal_slitki = Металлические слитки')
print('robot = Роботы Работники')
print('woda = Вода (10 литров)')

towar_name = input('\nНазвание : ' )
plus_value = input('колво прибавляемого товара : ' )
shop.plus_towars(towar_name, plus_value)

def minus():
print('\n')
print('Вводите изначальные названия товаров.')
print('bolt_gaiki = Болты и гайки')
print('bio_material = Биоматериалы')
print('stal_slitki = Металлические слитки')
print('robot = Роботы Работники')
print('woda = Вода (10 литров)')

towar_name = input('\nНазвание : ' )
minus_value = input('колво Убавляемого товара : ' )
shop.minus_towars(towar_name, minus_value)

aktion = input('Действие : ' )

if aktion =='1':
adding()
if aktion =='2':
minus()
if aktion == '3':
statis()
 

PYDEV

Пользователь
Пользователь
Авг 31, 2023
72
18
8
Покажи лучше конкретную ошибку
 

Рамзан_9264

Новичок
Пользователь
Сен 4, 2023
7
1
3
Покажи лучше конкретную ошибку
Скопипастить ошибку ? Ща, минутку..
 

Рамзан_9264

Новичок
Пользователь
Сен 4, 2023
7
1
3
Это система сделана для того, что бы следить за колличеством товаров, их добавлением и убавлением



1 - Добавить груз
2 - Убавить груз
3 - Статистика
Действие : 1


Вводите изначальные названия товаров.
bolt_gaiki = Болты и гайки
bio_material = Биоматериалы
stal_slitki = Металлические слитки
robot = Роботы Работники
woda = Вода (10 литров)

Название : woda
колво прибавляемого товара : 5
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>
start(fakepyfile,mainpyfile)
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
exec(open(mainpyfile).read(), __main__.__dict__)
File "<string>", line 49, in <module>
File "<string>", line 31, in adding
File "/storage/emulated/0/Python/ООП/Учим Заново/StarShop/StarShopClass.py", line 12, in plus_towars
setattr(self, towar_name, getattr(self, towar_name) + plus_value)
TypeError: unsupported operand type(s) for +: 'int' and 'str'

[Program finished]
 

Рамзан_9264

Новичок
Пользователь
Сен 4, 2023
7
1
3
Я понимаю что программа не может плюсовать число на текст.
но текстом тут является имя переменной, в которой уже содержится число.
Как сделать что бы программа видела не текст а число
 

PYDEV

Пользователь
Пользователь
Авг 31, 2023
72
18
8

Рамзан_9264

твой код запускается без ошибок, правда работает не так.
1693817483191.png

Я на всякий случай оставлю твой код в более читабельным виде, возможно кто-то захочет разобраться
Python:
class StarShop:  # Список товаров
    def __init__(self):
        self.bolt_gaiki = 0  # Болты и гайки
        self.bio_material = 0  # Биоматериалы
        self.stal_slitki = 0  # Стальные слитки
        self.robot = 0  # Роботы работники
        self.woda = 0  # Вода (10 литров)


# Прибавляем колво товара
    def plus_towars(self, towar_name, plus_value):  # Надо назвать нейм товара и колво добавления.
        if hasattr(self, towar_name):  # Проверка нейма
            setattr(self, towar_name, getattr(self, towar_name) + plus_value)
            print("Товар успешно добавлен!")
        else:
            print("Такого товара нет.")


# Убавляем колво товара
    def minus_towars(self, towar_name, minus_value):  # Называем нейм товара
        if hasattr(self, towar_name):  # Проверка нейма
            if getattr(self, towar_name) >= minus_value:
                setattr(self, towar_name, getattr(self, towar_name) - minus_value)
                print("Товар успешно убавлен")
            else:
                print("Нельзя выгружать больше, чем имеется")
        else:
            print("Такого товара нет.")


# Статистика
    def statis(self):
        table = "{:<15} {:<15} {:<15}".format("Имя товара", "Кол-во", "Стоимость")
        towar1 = "{:<15} {:<15} {:<15}".format("Болты и гайки", self.bolt_gaiki, "3 руб")
        towar2 = "{:<15} {:<15} {:<15}".format("Биоматериалы", self.bio_material, "100 руб")
        towar3 = "{:<15} {:<15} {:<15}".format("Стальные слитки", self.stal_slitki, "400 руб")
        towar4 = "{:<15} {:<15} {:<15}".format("Роботы работяги", self.robot, "1500 руб")
        towar5 = "{:<15} {:<15} {:<15}".format("Вода (10 л)", self.woda, "50 руб")
        print(table)
        print(towar1)
        print(towar2)
        print(towar3)
        print(towar4)
        print(towar5)
Python:
from StarShop import StarShop

shop = StarShop()

print("\033[44m")

print("Это система сделана для того, что бы следить за колличеством товаров, их добавлением и убавлением \n")

print('\n')
print('1 - Добавить груз \n2 - Убавить груз \n3 - Статистика')

while True:
    def statis(): # Функция проверки статистики
        print('\n')
        shop.statis()
        print('\n\nНажмите пробел для возвращения в меню выбора.')
        input()

    def adding():
        print('\n')
        print('Вводите изначальные названия товаров.')
        print('bolt_gaiki = Болты и гайки')
        print('bio_material = Биоматериалы')
        print('stal_slitki = Металлические слитки')
        print('robot = Роботы Работники')
        print('woda = Вода (10 литров)')

        towar_name = input('\nНазвание : ' )
        plus_value = input('колво прибавляемого товара : ' )
        shop.plus_towars(towar_name, plus_value)

    def minus():
        print('\n')
        print('Вводите изначальные названия товаров.')
        print('bolt_gaiki = Болты и гайки')
        print('bio_material = Биоматериалы')
        print('stal_slitki = Металлические слитки')
        print('robot = Роботы Работники')
        print('woda = Вода (10 литров)')

        towar_name = input('\nНазвание : ' )
        minus_value = input('колво Убавляемого товара : ' )
        shop.minus_towars(towar_name, minus_value)

        aktion = input('Действие : ' )

        if aktion =='1':
            adding()
        if aktion =='2':
            minus()
        if aktion == '3':
            statis()
 
Последнее редактирование:
  • Мне нравится
Реакции: Рамзан_9264

Рамзан_9264

Новичок
Пользователь
Сен 4, 2023
7
1
3
Всем спасибо.
Я всётаки разобрался в чем проблема и исправил. Соответственно дописал код.
Прикольно получилось.
 
  • Мне нравится
Реакции: regnor

Форум IT Специалистов