Оптимизировать метод в Python.Симиллар к перестановке - PullRequest
2 голосов
/ 30 мая 2011

У меня есть метод, который генерирует мне количество пассажиров в процессе бронирования.Параметры минимальное и максимальное количество пассажиров.

Существует только 2 условия:

  • number_of_adults должно быть больше 0
  • number_of_infants должно быть меньше или равно number_of_adults

Это код:

    def generate_numbers_of_paxes(min_number=1,max_number=9):

    number_of_passengers=random.randint(min_number, max_number)
    print(number_of_passengers)
    number_of_adults=random.randint(min_number, number_of_passengers)
    number_of_youths=random.randint(0, number_of_passengers-number_of_adults)
    number_of_children=random.randint(0, number_of_passengers-number_of_adults-number_of_youths)
    number_of_infants=random.randint(0, number_of_passengers-number_of_adults-number_of_youths-number_of_children)
    number_of_adults+=number_of_passengers-number_of_adults-number_of_youths-number_of_children-number_of_infants
    if(number_of_adults<number_of_infants):
        difference=number_of_infants-number_of_adults
        number_of_infants-=difference
        number_of_adults+=difference

    return [number_of_adults,number_of_youths,number_of_children,number_of_infants]

numbers_of_paxes=generate_numbers_of_paxes()
for (x,y) in enumerate(numbers_of_paxes):
    print(x,y)

Этот код работает хорошо, но, как вы можете видеть, в строке есть

number_of_adults+=number_of_passengers-number_of_adults-number_of_youths-number_of_children-number_of_infants

, потому что сумма числа длякаждая возрастная группа не всегда равна number_of_passegers, и я добавляю разницу к number_of_adult.

1 Ответ

2 голосов
/ 30 мая 2011

Ваш number_of_infants расчет должен быть простым:

number_of_infants = number_of_passengers - number_of_adults - number_of_youths - number_of_children

В противном случае оно может быть меньше требуемого числа для удовлетворения требований вашего пассажира (число random между 0 и number_of_passengers - number_of_adults - number_of_youths - number_of_children).

Однако ... вам лучше рассчитать количество младенцев до взрослых, а затем рассчитать количество взрослых с number_of_infants в качестве минимума для random() с учетом перечисленных вами ограничений. Оставьте количество детей до последнего и примените ту же логику. Поскольку это похоже на домашнюю работу, я не буду предоставлять код для этого.

То есть:

  1. Генерация случайного числа пассажиров

  2. Генерация случайного числа младенцев (не может быть больше половины числа пассажиров)

  3. Генерация случайного числа взрослых (должно быть как минимум количество детей)

  4. Генерация случайного числа молодых людей (не может быть больше пассажиров меньше младенцы меньше взрослых)

  5. Количество детей - это число пассажиры меньше предыдущих трех группы.

Кроме того, зачем ты это делаешь?

for (x,y) in enumerate(numbers_of_paxes):
    print(y)

Либо сделать:

for (x,y) in enumerate(numbers_of_paxes):
    print(x, y)

Или:

for y in numbers_of_paxes:
    print(y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...