2017-04-01 45 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

相关问题