很基础的大学生python复习题,我是真的不会,提前谢谢各位,阿里嘎多
双斜杠表示 地板除 只取整数
16进制数 0x452 为 1106 除以2 = 553
这是个 while 循环,只有相等时才会退出循环,才能打印,直到输入的 guess 为553 才打印,所以打印553
上述代码仍存在的一个缺陷是,最终底层列表的长度和队列中保存过的最多元素数目成正比,而非和当前队列中的元素个数成正比,这可能会造成一定程度的内存浪费。
为了解决上述问题,可以在队列中元素个数小于底层列表长度的1/4{\left. 1\middle/ 4\right.}1/4时将底层列表长度减半。
为实现上述算法,我们只需要在dequeue()
的代码中加入下列两行代码即可:
if 0 < self._size < len(self._data) // 4:
self._resize(len(self._data) // 2)
即此时dequeue()的完整代码为:
def dequeue(self):
"""
按照FIFO(先进先出)的原则删除并返回队头元素,当队列为空时抛出Empty异常
:return: 队头元素
"""
if self.is_empty():
raise Empty('队列当前为空!')
ans = self._data[self._front]
self._data[self._front] = None # 协助解释器进行GC(Garbage Collection)
self._front = (self._front + 1) % len(self._data) # 将队头所对应列表索引值加1或归零
self._size -= 1
if 0 < self._size < len(self._data) // 4:
self._resize(len(self._data) // 2)
return ans
无论输入什么,直到输入0x452//2(十六进制)对应的十进制,循环结束,输出这个值(的十进制)。
0x452=1106,整除2=553