Как присвоить скрипт одномерного массива для каждого нового элемента другого списка
прошу помочь с заданием, нужно реализовать работу некоторого количества устройств, с заданными параметрами в виде списка. Необходимо вводить устройства, но так, чтобы для каждого нового срабатывали параметры.
Вопрос состоит в том, как присвоить каждому новому элементу одномерного массива device_names рандомные значения всех трех элементов в списке sensor_names? Пока что значения и элементы массива работают отдельно друг от друга, я же пытаюсь добиться их взаимосвязи, то-есть: при добавлении двух устройств, допустим new_1 и new_2 - результат должен выглядеть примерно так:
Длина объекта new_1 составляет - случайное значение
Ширина объекта new_1 составляет - 14
Высота объекта new_1 составляет - 99
Длина объекта new_2 составляет - 11
Ширина объекта new_2 составляет - 14
Высота объекта new_2 составляет - 99
Ниже привожу свой код, подскажите как реализовать задуманное?
import sys
import time
import random
from threading import Thread
device_names = []
sensor_names = ["Длина","Ширина","Высота"]
class Item:
def __init__(self):
self.sensors = []
for name in sensor_names:
self.sensors.append(Sensors(name))
class Sensors(Thread):
def __init__(self, value):
Thread.__init__(self)
self.value = value
def run(self):
self.value_random = random.randint(0, 100)
msg = f"%s объекта составляет - {self.value_random}" % self.value
print(msg)
def sensors_threads():
for name in sensor_names:
Sensors(name).start()
if __name__ == "__main__":
item = []
number_of_devices = int(input("Введите количество подключаемых устройств:"))
for _ in range(number_of_devices):
new_device = input("Введите название устройств:")
item.append(new_device)
device_names.extend(item)
sensors_threads()
Ответы (1 шт):
Я бы разделил на три класса: Sensor, Item, Items. В Items хранятся все устройства и методы работы с ними, в Item хранятся сенсоры и методы работы с ними, в Sensor есть метод выдачи данных. Ниже вариант представления.
import random
class Item:
def __init__(self):
self.sensors = {} # Сенсоры
self.responses = {} # Данные по сенсорам
def add_sensor(self, sensor_id: str, sensor: object):
self.sensors[sensor_id] = sensor
self.responses[sensor_id] = self.sensors[sensor_id].get_data()
def update_sensors(self):
for sensor_id in self.sensors:
self.responses[sensor_id] = self.sensors[sensor_id].get_data()
def get_info(self):
return ', '.join(['{}: {}'.format(sensor_id, self.responses[sensor_id]) for sensor_id in self.responses])
class Items:
def __init__(self):
self.items = {} # Устройства
def add_item(self, item_id, item: object):
self.items[item_id] = item
def get_ids(self):
return self.items.keys()
def get_info(self):
return ['Объект {}. Параметры: {}'.format(item_id, self.items[item_id].get_info()) for item_id in self.items]
class Sensor:
def get_data(self):
return random.randint(0, 100)
# На базе этого делаем __main__
device_names = ['new_1', 'new_2']
sensor_names = ["Длина","Ширина","Высота"]
devices = Items()
for device_name in device_names:
devices.add_item(device_name, Item())
for item_id in devices.get_ids():
for sensor_id in sensor_names:
devices.items[item_id].add_sensor(sensor_id, Sensor())
print(devices.get_info())
# ['Объект new_1. Параметры: Длина: 45, Ширина: 4, Высота: 4', 'Объект new_2. Параметры: Длина: 69, Ширина: 18, Высота: 50']