我的lis里没有东西

2024-03-29 05:20:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个模拟,其中有两台打印机,我找到了每台打印机的平均等待时间。我正在为程序中的打印机和任务使用一个类。基本上,我将每个模拟的等待时间添加到一个列表中,并计算平均时间。我的问题是,我得到一个0除错误,所以没有被附加。当我试着用一台打印机(本质上是一样的)我没有问题。这是第二台打印机的代码。我在用一个队列

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


Tags: andifis打印机notemptyappenddequeue
1条回答
网友
1楼 · 发布于 2024-03-29 05:20:39

我认为您的问题源于第一次迭代时的空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

相关问题 更多 >