⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 randmi.py

📁 python改写的<<C语言百例>>! 很经典的程序开发例子!
💻 PY
字号:
# -*- coding: cp936 -*-
class Rand:
    
    def __init__(self, x=None):
        self.SS=256
        self.seed(x)
    def seed(self,x=None):
        if x==None:x=[112345678,234315173,413123456]
        self.x,self.y,self.z=x

        import zlib
        self.first= zlib.crc32(str(x[0])+str(x[1])+str(x[2]))%self.SS
    def rand(self):
        t=int('100000000',16)
        self.x,self.y=self.y,((self.x+self.y)^self.z)%t
        return self.y
    def ranseq(self):
        t=[]
        while len(t)!=self.SS:
            k=0
            while len(t)!=self.SS:
                k+=1
                if k>self.SS*3:break
                m=self.rand()
                if m not in t:
                    t+=[m]
            self.x+=3
        return t
    def ranseqs(self):
        t=range(self.SS)
        k=[]
        m=[]
        for i in t:
            z=self.ranseq()
            bb=sorted(zip(t,z),cmp=lambda x,y: cmp(x[1], y[1]))
            tn=[i[0] for i in bb]
            k+=[tn]
            mm=[1]*self.SS
            for j in t:
                mm[tn[j]]=j
            m+=[mm]
        self.arry=k[:]
        self.arry1=m[:]
        self.test()
    def test(self):
        import random
        tt=range(self.SS)
        t=tt[:]
        random.shuffle(t)
        dt=t[:]
        dd=[1]*self.SS
        dg=dd[:]
        m=123
        for i in tt:
            dd[i]=self.arry[m][dt[i]]
            m=dd[i]
        m=123
        for i in tt:
            dg[i]=self.arry1[m][dd[i]]
            m=dd[i]
        assert dg==dt,"数组无效"
    def encode(self,s1,s2):
        t=self.first
        f1=open(s1,"rb")
        f2=open(s2,"wb")
        a1=f1.read()
        m=''
        for i in list(a1):
            t=s.arry[t][ord(i)]
            m+=chr(t)
        f2.write(m)
        f1.close()
        f2.close()
    def decode(self,s1,s2):
        t=self.first
        f1=open(s1,"rb")
        f2=open(s2,"wb")
        a1=f1.read()
        m=''
        for i in list(a1):
            n=ord(i)
            t=s.arry1[t][n]
            m+=chr(t)
            t=n
        f2.write(m)
        f1.close()
        f2.close()
if __name__ == '__main__':
    s=Rand()
    s.ranseqs()
    s.encode(r'/home/stsee/1','123')
    s.decode('123','21')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -