2017-04-01 18 views
0

私は2台のプリンタがあり、それぞれの平均待ち時間を見つけるシミュレーションを作成しようとしています。自分のプログラムでプリンタとタスクのクラスを使用しています。基本的には、各シミュレーションの待ち時間をリストに追加し、平均時間を計算しています。私の問題は、何も付加されていないので、私は0エラーで除算を得ているということです。 1台のプリンター(これは本質的に同じものです)で試しても問題はありません。ここでは2番目のプリンタのコードを示します。私はこのためにキューを使用しています。スタッフが私のリストに追加されていません

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_による除算を取得。これは 'float'の代わりに' int'を使うことが多いためです。それはあなたがチェックしたものですか?また、Python 2または3を使用していますか? – patrick

+0

@patrick私はすべてを私のmainメソッドで整数に設定しました。私は3を使用しています – John

+0

変数 'waitingtimes'とは何ですか?リスト、キュー、作成したクラスですか? –

答えて

0

私はあなたの問題が最初の反復かそれほど空のwaitingtimesから生じると思います。印刷ジョブがキューに存在しない、そして挿入された待機時間があったことがない場合は、(空の)waitingtimes==[]とループの底に到達しようとしているし、次に実行します。

なります
sum(waitingtimes)/len(waitingtimes) 

これに対処する最も簡単な方法はそれをチェックすること、またはそれをキャッチでしょう

0/0 

ある

sum([])/len([]) 

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

または:

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

except ZeroDivisionError: 
    averageWait = 0 
+0

cool!あなたは 'while'とうまくやっていけませんでしたか?それとも不可能なのか/悪い考えですか? – patrick

+0

'while 'で何をしますか?元の文は 'for'ループの中にあります。私はこれがすべてのOPの必要性だと思っています。 –

+0

len()がゼロであることを確認します – patrick

関連する問題