#! /usr/local/bin/python3.6"""Test for uniformity of random number with Chi-square algorithm"""importmathimportsysimporttracebackclassChi2Rndnum:A=1103515245# MultiplierC=12345# IncrementM=2**31# ModulusN=1000# Number to generateM_MAX=10# Range of integer random numberF=N/M_MAX# ExpectationS=40.0/F# Scale for histgramdef__init__(self):self.r=12345self.hist=[0for_inrange(self.M_MAX+1)]self.e=0.0defgenerate_rndnum(self):""" Generation of random numbers """try:for_inrange(self.N):self.hist[self.__rnd()]+=1exceptExceptionase:raisedefdisplay(self):""" Calculation and display """try:foriinrange(1,self.M_MAX+1):print("{:>3}:{:>3} ".format(i,self.hist[i]),end="")for_inrange(int(self.hist[i]*self.S)):print("*",end="")print()self.e=self.e \
+(self.hist[i]-self.F) \
*(self.hist[i]-self.F)/self.Fprint("Chi-square =",self.e)exceptExceptionase:raisedef__rnd(self):""" Generation of integer between 1 and 10 """try:self.r=(self.A*self.r+self.C)%self.Mreturnmath.floor(self.M_MAX*(self.r/(self.M-0.9)))+1exceptExceptionase:raiseif__name__=='__main__':try:obj=Chi2Rndnum()obj.generate_rndnum()obj.display()exceptExceptionase:traceback.print_exc()sys.exit(1)