как быть питоническим в 2-ом вложенном для понимания цикла для мякоти - PullRequest
0 голосов
/ 25 июня 2018

Я не могу преодолеть этот горб в моей программе.Я хотел бы сократить этот повторяющийся код до более простого кода.Для краткости это ограничения для целлюлозы.

У меня есть 2 шаблона смены: «Shift_Pattern_1» и «Shift_Pattern_Master»

Сотрудники - это список с именами внутри.

 Days:["Monday", "Tuesday", "Wednesday", "Thursday", "Friday",    
 "Saturday", "Sunday"]

Shift_pattern_Master = ["Morning", "Mid", "Night"]
Shift_pattern_1 = ["Morning", "Night"]

Week1={"Monday":2, "Tuesday":2, "Wednesday":3, "Thursday":2, "Friday":2,    
"Saturday":3, "Sunday":2} # number a people needed a to day work.

for day in Days[0:2]: # Monday and Tuesday only
    for employee in Employees:
        prob += pulp.lpSum(avail[employee, day, shift] for shift in      
Shift_pattern_1)==requests[employee][day]

for day in Days[2:3]: #wednesday
    for employee in Employees:
        prob += pulp.lpSum(avail[employee, day, shift] for shift in     
 Shift_pattern_Master)==requests[employee][day]

 ....more code to finish the week.........

Когда я завершу весь код сверху, я получу 35 ограничений.

Я пытался использовать if и else, чтобы сократить код, и я получил только 30 ограничений.Я знаю, что проблема в том, «если Неделя 1 [день] == 2», потому что некоторые ограничения отсутствуют.

  1. я не знаю, куда поместить это утверждение if, или
  2. есть ли лучший способ стать более питоническим?

    для дня вДни: если неделя 1 [день] == 2: для сотрудника в Служащие: prob + = pulp.lpSum (в качестве выгоды [сотрудник, день, смена] для смены в
    Shift_pattern_1) == запросы [сотрудник] [день], остальное:
    prob + = pulp.lpSum (доступно [сотрудник, день, смена] для смены в Shift_pattern_Master) == запросы [сотрудник] [день]

заранее, спасибо.

1 Ответ

0 голосов
/ 26 июня 2018

, если единственный день - среда, которую вы хотите сделать:

for day in Days: 
   if day=="Wednesday": 
      for employee in Employees: 
          prob += pulp.lpSum(avail[employee, day, shift] for shift in Shift_pattern_1)==requests[employee][day] 
   else:
      for employee in Employees: 
          prob += pulp.lpSum(avail[employee, day, shift] for shift in Shift_pattern_Master)==requests[employee][day]

однако, я думаю, что вы на самом деле хотите вышеуказанное условие, поэтому вам просто нужно включить цикл сотрудников

for day in Days: 
   if Week1[day]==2: 
      for employee in Employees: 
          prob += pulp.lpSum(avail[employee, day, shift] for shift in Shift_pattern_1)==requests[employee][day] 
   else:
      for employee in Employees: 
          prob += pulp.lpSum(avail[employee, day, shift] for shift in Shift_pattern_Master)==requests[employee][day]
...