2017-02-22 101 views
0

Я пытаюсь использовать результат формулы для вычисления следующего результата, а затем следующий результат после этого и так далее и так далее.Как использовать результат для вычисления следующего результата, а затем следующего результата?

def waiting(element, start_waiting_time=0, service_time=1.2, interarrival=1, default=0): 
    if element == 1: 
     return max((start_waiting_time + service_time - interarrival, 0)) 
    elif element == 0: 
     return default 

def waiting_time(elements, start_time=0): 
    next_patient_waits = start_time 
    for i in elements: 
     next_patient_waits += waiting(i) 
     print("{:.1f}".format(next_patient_waits)) 

elements = [1, 1, 1] 
waiting_time(elements) 

Этот код возвращает результат:

# 0.2, 0.4, 0.6 

Я ожидал, что это возвращает результаты:

#0, 0.2, 0.4 

Я хочу, чтобы установить первую waiting_time до 0, потому что start_waiting_time равен нулю. Я надеюсь, что компьютер будет вычислить:

#For 1st item in elements: waiting_time = 0 
#For 2nd item in elements: waiting_time = (waiting time 1st element) + service_time - interarrival = 0 + 1.2 -1 = 0.2 
#For 3rd item in elements: waiting_time = (waiting time 2nd element) + service_time - interarrival = 0.2 + 1.2 -1 = 0.4 
+0

Строго говоря, 'waiting_time' не является (математической) формула. Не большая проблема, но структурированный подход для вашего алгоритма может выиграть от изменения его до реальной формулы (которая имеет «возврат»). Ваш «ожидание» - это то, что я имею в виду, потому что у него есть «возврат». – Elmex80s

ответ

2

Вы должны просто напечатать next_patient_waits до увеличения его:

def waiting_time(elements, start_time=0): 
    next_patient_waits = start_time 
    for i in elements: 
     print("{:.1f}".format(next_patient_waits)) 
     next_patient_waits += waiting(i)