Мне нужно несколько советов о том, как сделать следующий инженерный сценарий на Python - PullRequest
0 голосов
/ 11 июля 2019

У меня есть сценарий производства, где есть 8 разных корзин.Каждая корзина имеет разные типы частей.1 или более частей выбираются из каждой корзины, чтобы создать автомобиль, и я хочу создать как можно больше версий автомобилей, и это мое ожидаемое решение.Части могут быть выбраны случайным образом (например, деталь № 15 может быть выбрана до детали № 5 из корзины 2) из ​​каждой корзины, но она должна перетекать из корзины 1 в корзину 8 (например, корзина 3 не может быть перед корзиной 2).Все основано на тексте, то есть корзины с 1 по 8 являются списками, а автомобильные части - текстовыми записями в соответствующих списках.Проверьте ясность, например, ниже.Может ли кто-нибудь подсказать мне, как я мог бы создать такой сценарий, в котором я мог бы шаг за шагом генерировать случайно расположенные автомобили?У меня есть базовые знания в Python.

 1. Engine (Eng 1,Eng 2, Eng 3)
 2. Body (Body 1, Body 2, Body 3)
 3. Seats (Seat 1, Seat 2, Seat 3)
 4. Solution (eng 1+body 3+seat 1+seat3), (eng 1+body 1+seat 1)...,(eng n+body n+seat n)

1 Ответ

0 голосов
/ 11 июля 2019

Если вы хотите сгенерировать все комбинации, один из способов решить эту проблему - использовать itertools.product

import itertools
engines = ['Engine 1', 'Engine 2', 'Engine 3']
bodies = ['Body 1' ,'Body 2']
seats = ['Seats 1', 'Seats 2']
cars = itertools.product(engines, bodies, seats)

for car in cars:
    print(car)

Это даст

('Engine 1', 'Body 1', 'Seats 1')
('Engine 1', 'Body 1', 'Seats 2')
('Engine 1', 'Body 2', 'Seats 1')
('Engine 1', 'Body 2', 'Seats 2')
('Engine 2', 'Body 1', 'Seats 1')
('Engine 2', 'Body 1', 'Seats 2')
('Engine 2', 'Body 2', 'Seats 1')
('Engine 2', 'Body 2', 'Seats 2')
('Engine 3', 'Body 1', 'Seats 1')
('Engine 3', 'Body 1', 'Seats 2')
('Engine 3', 'Body 2', 'Seats 1')
('Engine 3', 'Body 2', 'Seats 2')

Если вы посмотрите на страницу itertools, вы найдете следующий рецепт для случайной генерации продукта

import random

def random_product(*args, repeat=1):
    "Random selection from itertools.product(*args, **kwds)"
    pools = [tuple(pool) for pool in args] * repeat
    return tuple(random.choice(pool) for pool in pools)

Вызов этого с аргументами для деталей

 random_product(engines, bodies, seats)

Вернет случайно сгенерированный автомобиль

('Engine 2', 'Body 1', 'Seats 2')
...