python中的LRU模拟逻辑用法

python中的LRU模拟逻辑用法,python,algorithm,python-2.7,simulation,lru,Python,Algorithm,Python 2.7,Simulation,Lru,我试图用python模拟分页算法的使用情况。作为bash的参数,我们采用了两个参数:帧数和页面数。我相信实现是可以的,程序也在运行,但写出来的结果也有问题。我的python不是很流利,所以可能我做错了什么,或者我遗漏了什么? 没有语法错误,这是合乎逻辑的,所以如果有人能帮我,这对我来说将是巨大的。 请帮忙 但代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- # # os5_lru.py # import sys import str

我试图用python模拟分页算法的使用情况。作为bash的参数,我们采用了两个参数:帧数和页面数。我相信实现是可以的,程序也在运行,但写出来的结果也有问题。我的python不是很流利,所以可能我做错了什么,或者我遗漏了什么? 没有语法错误,这是合乎逻辑的,所以如果有人能帮我,这对我来说将是巨大的。 请帮忙

但代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  os5_lru.py
#  


import sys
import string
import random
import numpy as np
from time import sleep

class p_okvira_zastavica:
    def __init__(self):
        O = 0
        Z = 0
#HEADER
def header():
    print '#N\t',
    for i in range (0,okviri):
        print i+1,
        print '\t',
    print 
    print '----------' * okviri
    return 0

#ISPIS
def ispisi(polje_okvira_zastavica,zahtjev,pogodak):
    print "  ", #prints #N
    print zahtjev, 
    print "  ",

    for k in range (0,okviri+1):
        if(polje_okvira_zastavica[k].O == zahtjev):
            if(pogodak):
                if 0 :
                    print "[", #current inserting element
                    print polje_okvira_zastavica[k].O,
                    print "]",
                    break
                if 1:
                    print "(", #if hits
                    print polje_okvira_zastavica[k].O,
                    print ")",
                    break
        else :
            print "  ",
            if polje_okvira_zastavica[k].O!=0 : print polje_okvira_zastavica[k].O ,
            else: print "-",
            print "  ",
    if pogodak == 1:
        print "#Pogodak ",
    print 



#popunjavamo i sve  
def add_vrijednosti(polje_okvira_zastavica,zahtjevi,pokazivac):
    for k in range (0,okviri+1):
        if( zahtjevi == polje_okvira_zastavica[k].O ):
            polje_okvira_zastavica[k].Z = 1
            ispisi(polje_okvira_zastavica,zahtjevi,1)
            return

    while(True):
        if polje_okvira_zastavica[pokazivac].Z == 1:
            polje_okvira_zastavica[pokazivac].Z=0
            pokazivac = (pokazivac+1)%okviri

        else : 
            polje_okvira_zastavica[pokazivac].O = zahtjevi
            polje_okvira_zastavica[pokazivac].Z = 1
            ispisi(polje_okvira_zastavica,zahtjevi,0)
            break
#MAIN   
def main():
    global pokazivac
    pokazivac = 0

    global ulaz,okviri,stranice

    ulaz = list(sys.argv)
    okviri = int(ulaz[1])
    stranice = int(ulaz[2])

    if (okviri < 4 or okviri > 10 ) : print "Error ! Neodgovarajuci broj okvira  "; exit(1)
    if (stranice < 10 or stranice > 100 ) : print "Error ! Neodgovarajuci broj stranica"; exit(1)

    global zahtjevi
    zahtjevi = []


    for i in range (0,stranice):
        zahtjevi.append(random.randint(1,8))
    random.shuffle(zahtjevi)

    print
    print "Zahtjevi :",
    for i in range (0,stranice):
        print zahtjevi[i],
        if (i==stranice-1): break
        print ",",

    print   
    global vrijednosti  
    vrijednosti= [[0 for x in range(okviri+1)] for x in range(stranice)] 
    print       
    polje_okvira_zastavica = [p_okvira_zastavica() for k in range (0,okviri+1)] #array of structures

    for k in range (0,okviri+1):
        polje_okvira_zastavica[k].O = 0
        polje_okvira_zastavica[k].Z = 0

    print "\n\n  #N",
    for k in range (0,okviri):
        print "\t  ",
        print k+1 ,
    print
    print "----------" * okviri 


    pom = stranice
    k = 0
    while(pom!=0):  

        add_vrijednosti(polje_okvira_zastavica,zahtjevi[k],pokazivac)
        k+=1
        pom-=1  

    return 0

#main program
if __name__ == '__main__':
    main()
#/usr/bin/env python
#-*-编码:utf-8-*-
#
#os5_lru.py
#  
导入系统
导入字符串
随机输入
将numpy作为np导入
从时间上导入睡眠
p_okvira_zastavica类:
定义初始化(自):
O=0
Z=0
#标题
def标头():
打印“#N\t”,
对于范围内的i(0,okviri):
打印i+1,
打印“\t”,
印刷品
打印'-------------'*okviri
返回0
#ISPIS
定义ispisi(polje_okvira_zastavica、zahtjev、pogodak):
打印“”。\N
打印zahtjev,
打印“”,
对于范围(0,okviri+1)内的k:
如果(polje_okvira_zastavica[k].O==zahtjev):
如果(pogodak):
如果0:
打印“[”,#当前插入元素
打印polje_okvira_zastavica[k].O,
打印“]”,
打破
如果1:
打印“(”,#如果命中
打印polje_okvira_zastavica[k].O,
",,
打破
其他:
打印“”,
如果polje_okvira_zastavica[k].O=0:print polje_okvira_zastavica[k].O,
其他:打印“-”,
打印“”,
如果pogodak==1:
打印“#Pogodak”,
印刷品
#波本加瓦莫一世
def add_vrijednosti(polje_okvira_zastavica、zahtjevi、pokazivac):
对于范围(0,okviri+1)内的k:
如果(zahtjevi==polje_okvira_zastavica[k].O):
polje_okvira_zastavica[k].Z=1
ispisi(polje_okvira_zastavica,zahtjevi,1)
返回
虽然(正确):
如果polje_okvira_zastavica[pokazivac].Z==1:
polje_okvira_zastavica[pokazivac].Z=0
pokazivac=(pokazivac+1)%okviri
其他:
polje_okvira_zastavica[pokazivac].O=zahtjevi
polje_okvira_zastavica[pokazivac].Z=1
ispisi(polje_okvira_zastavica,zahtjevi,0)
打破
#主要
def main():
全球博卡齐瓦茨酒店
pokazivac=0
全球乌拉兹、奥克维里、斯特兰尼斯
ulaz=列表(sys.argv)
okviri=int(ulaz[1])
stranice=int(ulaz[2])
如果(okviri<4或okviri>10):打印“错误!Neodgovarajuci broj okvira”;出口(1)
如果(stranice<10或stranice>100):打印“错误!Neodgovarajuci broj stranica”;出口(1)
全球扎赫特耶维
zahtjevi=[]
对于范围内的i(0,stranice):
zahtjevi.append(random.randint(1,8))
随机。洗牌(扎赫特耶维)
打印
打印“Zahtjevi:”,
对于范围内的i(0,stranice):
打印zahtjevi[i],
如果(i==stranice-1):中断
打印“,”,
印刷品
全球vrijednosti
vrijednosti=[[0表示范围内的x(okviri+1)]表示范围内的x(stranice)]
印刷品
polje_okvira_zastavica=[p_okvira_zastavica()表示范围(0,okviri+1)内的k]#结构数组
对于范围(0,okviri+1)内的k:
polje_okvira_zastavica[k].O=0
polje_okvira_zastavica[k].Z=0
打印“\n\n\n”,
对于范围内的k(0,okviri):
打印“\t”,
打印k+1,
打印
打印“------------”*okviri
pom=绞线
k=0
而(pom!=0):
添加vrijednosti(polje_okvira_zastavica,zahtjevi[k],pokazivac)
k+=1
pom-=1
返回0
#主程序
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
它应该如何打印结果!

这就是现在打印的方式: