LRU模拟python中的逻辑逻辑

时间:2013-06-03 01:44:36

标签: python algorithm python-2.7 simulation lru

我试图在python中进行LRU分页算法使用模拟。作为来自bash的参数,我们采用2个参数,帧数和页数。我相信实现是正常的,程序正在运行,但是写出结果会有问题。我不是那么流利的python所以也许我做错了什么或者有什么东西我不见了? 没有语法错误,这是合乎逻辑的,所以如果有人可以帮助我,这对我来说很重要。 Help.PLS。

但是这里是代码:

#!/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()

应如何打印结果! How it should be

这是现在打印的方式: how now prints

0 个答案:

没有答案