这是我的python函数:
def fifo(pageframes, pagereferencestring):
pages = len(pagereferencestring)
queue = []
pagefaults = 0
for each in pagereferencestring:
if each not in queue:
pagefaults += 1
print len(queue)
print pageframes
if len(queue) < pageframes:
print "hello"
queue.append(each)
else:
queue = queue[1:]
queue.append[each]
print queue
print "FIFO mode : " + str(pagefaults)
我正在输入pageframes = 3,而pagereferencestring = [1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4]等页面= 16
以下是我得到的输出:
0
3
hello
[1]
1
3
hello
[1, 2]
2
3
hello
[1, 2, 3]
3
3
hello
[1, 2, 3, 4]
FIFO mode : 4
这是我的问题:从输出中可以清楚地看到,即使len(队列)== pageframes(= 3),控件也会进入if条件(只有在len(队列)&lt; pageframes时才会发生) 。为什么会这样?
答案 0 :(得分:0)
我相信它可能是由queue.append[each]
造成的。正确地说它应该是queue.append(each)
。
编辑:
使用python 2.7测试它运行正常。以下是我用于调用复制粘贴的代码,如果它适用于您,则进行测试。
def fifo(pageframes, pagereferencestring):
pages = len(pagereferencestring)
queue = []
pagefaults = 0
for each in pagereferencestring:
if each not in queue:
pagefaults += 1
print len(queue)
print pageframes
if len(queue) < pageframes:
print "hello"
queue.append(each)
else:
queue = queue[1:]
queue.append(each)
print queue
print "FIFO mode : " + str(pagefaults)
pageframes = 3
pagereferencestring = [1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4]
fifo(pageframes, pagereferencestring)
答案 1 :(得分:0)
除了更改print语句,因为我使用python 3.5我必须调整你的第二个append语句使用()。它对我来说很好。
答案 2 :(得分:0)
想出来。 我将pageframes作为主体中的字符串传递,而不是整数。因此,比较并不是有效的,因为它不是比较两个整数,而是一个int和一个字符串。