#! /usr/local/bin/python3.6"""Random number generatrion with Box-Muller algorithm"""importmathimportrandomimportsysimporttracebackclassRndnumBoxMuller:M=10# AverageS=2.5# Standard deviationN=10000# Number to generateSCALE=N//100# Scale for histgramdef__init__(self):self.hist=[0for_inrange(self.M*5)]defgenerate_rndnum(self):""" Generation of random numbers """try:for_inrange(self.N):res=self.__rnd()self.hist[res[0]]+=1self.hist[res[1]]+=1exceptExceptionase:raisedefdisplay(self):""" Display """try:foriinrange(0,self.M*2+1):print("{:>3}:{:>4} | ".format(i,self.hist[i]),end="")forjinrange(1,self.hist[i]//self.SCALE+1):print("*",end="")print()exceptExceptionase:raisedef__rnd(self):""" Generation of random integers """try:r_1=random.random()r_2=random.random()x=self.S \
*math.sqrt(-2*math.log(r_1)) \
*math.cos(2*math.pi*r_2) \
+self.My=self.S \
*math.sqrt(-2*math.log(r_1)) \
*math.sin(2*math.pi*r_2) \
+self.Mreturn[math.floor(x),math.floor(y)]exceptExceptionase:raiseif__name__=='__main__':try:obj=RndnumBoxMuller()obj.generate_rndnum()obj.display()exceptExceptionase:traceback.print_exc()sys.exit(1)