|
发表于 2023-10-17 11:37:21
|
显示全部楼层
报错分析:
在你的代码中,出现了一些问题导致报错。
1. 在task类的waittime方法中,awaittime计算有误。应该是self.currenttime,而不是currenttime。
2. 在moni函数中的第一个if条件语句中,你尝试将一个布尔值与整数相加,这是非法的操作。
3. 在moni函数中,用于计算等待时间的a.waittime(maketime)并没有正确返回等待时间,并且没有将等待时间添加到listtime中。
修改后的代码如下:
- from pythonds.basic import Queue
- import random
- class Printer:
- def __init__(self, ppm):
- self.pagerate = ppm
- self.currenttask = None
- self.timeremaining = 0
- def is_busy(self):
- return self.currenttask is not None
- def tick(self):
- if self.currenttask is not None:
- self.timeremaining -= 1
- if self.timeremaining <= 0:
- self.currenttask = None
- def set_next_task(self, next_task):
- self.currenttask = next_task
- self.timeremaining = next_task.get_page() * 60 / self.pagerate
- class Task:
- def __init__(self, time):
- self.timestamp = time
- self.page = random.randrange(1, 21)
- def get_page(self):
- return self.page
- def wait_time(self, current_time):
- return current_time - self.timestamp
- def get_stamp(self):
- return self.timestamp
- def new_task():
- num = random.randrange(1, 181)
- return num == 180
- def moni(pagerate, number_seconds):
- lab_printer = Printer(pagerate)
- list_time = []
- task_stack = Queue()
- for make_time in range(number_seconds):
- if new_task():
- print("New task created at", make_time)
- next_task = Task(make_time)
- task_stack.enqueue(next_task)
- if not lab_printer.is_busy() and not task_stack.is_empty():
- a = task_stack.dequeue()
- list_time.append(a.wait_time(make_time))
- lab_printer.set_next_task(a)
- lab_printer.tick()
- sum_time = sum(list_time)
- print("Total wait time:", sum_time)
- for i in range(10):
- moni(5, 3600)
复制代码
在修改后的代码中,我更正了类名的大小写,以及方法和变量的命名风格。还修复了waittime方法的计算错误,并改正了在moni函数中的其他问题。
请注意,无法判断你的代码逻辑是否符合预期,因为我无法理解你的实际需求和预期结果,所以以上只是对报错进行修复,并未对整个代码进行逻辑上的修改。
球一个最佳答案谢谢啦!这对我非常重要!   |
|