5 (трое мужчин и две женщины) человек должны выйти из разных точек, время хода у всех разное.
В пункт назначения женщины должны прийти на 1 мин раньше мужчин.
600, 320, 400, 120, 250 - время хода до пункта назначения.
Вот мой код:
a = {600: {'sex':'male','name':'Joe'}, 320: {'sex':'female','name':'Sara'}, 400: {'sex':'female','name':'Kristina'}, 120: {'sex':'male','name':'Bob'}, 250: {'sex':'male','name':'Fredd'}} print a # Подсчитываем разницу во времени прибытия и сортируем ее в обратном порядке wait = list(a) wait.sort(reverse=True) print wait wait = map(lambda x: x[0]-x[1], zip(wait, wait[1:]))+[0] print wait # Заносим в словарь разницу времени прибытия for i, z in zip(sorted(a, reverse=True), wait): a[i]['wait']=z #print a #{600: {'wait': 200, 'name': 'Joe', 'sex': 'male'}, 320: {'wait': 70, 'name': 'Sara', 'sex': 'female'}, 400: {'wait': 80, 'name': 'Kristina', 'sex': 'female'}, 250: {'wait': 130, 'name': 'Fredd', 'sex': 'male'}, 120: {'wait': 0, 'name': 'Bob', 'sex': 'male'}}) for i in sorted(a, reverse=True): print '%s ушел(ла)' %(a[i]['name']) time.sleep(a[i]['wait'])
Но у меня получается, что все придут одновременно. Как же сделать, чтобы женщины пришли раньше? Не соображу как сделать условие и оттяжку по времени, в разных потоках их запускать что ли?…
PS: В приведенном коде я сначала сортирую в обратном порядке время хода, затем вычисляю разницу между отрезками времени хода каждого человека, затем через time.sleep() выдерживаю паузу между запусками… Может есть какой-то другой способ? Я додумался только до этого…