【问题标题】:TypeError: unsupported operand type(s) for -=: 'class' and 'int'类型错误:-= 不支持的操作数类型:'class' 和 'int'
【发布时间】:2020-09-30 18:22:59
【问题描述】:

我有一个错误消息:TypeError: unsupported operand type(s) for -=: 'Workers' and 'int'。我知道消息说Workers 不是int,但我不知道如何解决。

我的代码应该做什么:创建 5 个以生命力 100 开头的工人,并且我的工人姓名是当前生命力。假设他们一次去工厂生产一个单位的产品,如果他们成功了,他们会失去 10 个单位的生命力并返回到队列的后面,不得不在那里轮流等待。但是如果发生事故,他们会失去 100 单位的生命力,然后死亡并从模拟中移除。只要有工人活着,模拟就应该运行,最后打印出生产了多少单位的产品。

如果我删除class Workers: 并将class Roads: 中的第一个def 更改为:

class Roads:
    def __init__(self):
        self._workers_road = []
        for worker in range(5):
            self._workers_road.append(100)

然后它工作得很好,但从长远来看,我需要class Workers: 来扩展我的代码并培育更多工人并将它们附加到class Roads: 的列表中。

import random

class Workers:
    def __init__(self):
        self._worker = 100

    def get_worker(self):
        return self._worker

class Products:
    def __init__(self):
        self._product = True

    def get_product(self):
        return self._product

class Roads:
    def __init__(self):
        self._workers_road = []
        for worker in range(5):
            self._workers_road.append(Workers())

    def workers_left(self):
        if len(self._workers_road) == 0:
            return True

class Storage:
    def __init__(self):
        self._product_stock = []

    def add_product(self):
        self._product_stock.append(Products())

    def get_product_stock(self):
        return 'Storage: ' + str(len(self._product_stock))

class Plants:
    def __init__(self):
        self._plant_list = []
        self._plant_storage = Storage()
        self._road = Roads()

    def add_worker(self):
        self._plant_list.append(self._road._workers_road[0])
        self._road._workers_road.pop(0)

    def create_product(self):
        accident = random.randint(1,10)

        if accident < 5:
            self._plant_storage.add_product()
            self._plant_list[0] -= 10
        else:
            self._plant_list[0] -= 100

    def sub_worker(self):
        if self._plant_list[0] <= 0:
            self._plant_list.pop(0)
        else:
            self._road._workers_road.append(self._plant_list[0])
            self._plant_list.pop(0)

if __name__ == "__main__":
    a = Plants()
    while not a._road.workers_left():
        a.add_worker()
        a.create_product()
        a.sub_worker()
    print(a._plant_storage.get_product_stock())

这似乎是一件很容易解决的事情,但我被卡住了......

【问题讨论】:

标签: python


【解决方案1】:

您似乎在操作错误的对象。你可能想改变这个:

self._plant_list[0] -= 10

到这里:

self._plant_list[0]._worker -= 10

代码中-= 的其他用法也是如此。

【讨论】:

    【解决方案2】:

    您正在尝试从工作对象中减去整数

    self._plant_list[0]._worker
    

    【讨论】:

      猜你喜欢
      • 2018-09-01
      • 2013-10-04
      • 2021-06-16
      • 2014-06-16
      • 2014-03-16
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多