2017-04-01 43 views
0

我想創建一個模擬有兩臺打印機,我找到每個平均等待時間。我在程序中使用打印機和任務的類。基本上,我將等待時間添加到每個模擬列表並計算平均時間。我的問題是,我得到一個由0錯誤的分區,所以沒有被追加。當我用1臺打印機(基本上同樣的東西)進行試驗時,我沒有任何問題。這是我爲第二臺打印機設置的代碼。我爲此使用了一個隊列。東西不附加到我的列表

if printers == 2: 
    for currentSecond in range(numSeconds): 
     if newPrintTask(): 
      task = Task(currentSecond,minSize,maxSize) 
      printQueue.enqueue(task) 

     if (not labPrinter1.busy()) and (not labPrinter2.busy()) and \ 
      (not printQueue.is_empty()): 
      nexttask = printQueue.dequeue() 
      waitingtimes.append(nexttask.waitTime(currentSecond)) 
      labPrinter1.startNext(nexttask) 

     elif (not labPrinter1.busy()) and (labPrinter2.busy()) and \ 
      (not printQueue.is_empty()): 
      nexttask = printQueue.dequeue() 
      waitingtimes.append(nexttask.waitTime(currentSecond)) 
      labPrinter1.startNext(nexttask) 

     elif (not labPrinter2.busy()) and (labPrinter1.busy()) and \ 
      (not printQueue.is_empty()): 
      nexttask = printQueue.dequeue() 
      waitingtimes.append(nexttask.waitTime(currentSecond)) 
      labPrinter2.startNext(nexttask) 

     labPrinter1.tick() 
     labPrinter2.tick() 


     averageWait = sum(waitingtimes)/len(waitingtimes) 
     outfile.write("Average Wait %6.2f secs %3d tasks remaining." \ 
       %(averageWait,printQueue.size())) 

任何援助將是偉大的!

編輯:我應該提及,無論價值如何,都會發生這種情況。我可以有99-100的頁面範圍和1的PPM,但我仍然被除以0.

+0

_I'm通過0_得到一個師。這些通常是由於使用'int'而不是'float'。這是你檢查的東西嗎?另外,你使用Python 2或3? – patrick

+0

@patrick我已經在我的主要方法中設置了一個整數。我正在使用3 – John

+0

什麼是變量'waitingtimes'?它是一個列表,一個隊列,一個你建立的班級? –

回答

0

我認爲你的問題來自第一次迭代時的空waitingtimes左右。如果在隊列中沒有打印作業,從未有過插入的等待時間,你會與waitingtimes==[](空),以達到循環的底部,然後執行:

sum(waitingtimes)/len(waitingtimes) 

這將是

sum([])/len([]) 

這是

0/0 

來處理,這將僅僅是檢查它,或趕上它的最簡單方法:

if not waitingtimes: 
    averageWait = 0 
else: 
    averageWait = sum(waitingtimes)/len(waitingtimes) 

或者:

try: 
    averageWait = sum(waitingtimes)/len(waitingtimes) 

except ZeroDivisionError: 
    averageWait = 0 
+0

酷!你能用'while'很好嗎?或者這是不可能的/這是一個壞主意? – patrick

+0

用'while'做什麼?原來的聲明是在'for'循環中,我認爲這是所有的OP需求。 –

+0

檢查len()爲零 – patrick

相關問題