• 转 python trace walk DEMO


    https://blog.csdn.net/steadfast123/article/details/46965125

    #quote from 'introduction to computation and programming 
    #using Python, revised, MIT press'
    import random
    import pylab
     
    def stdDev(X):
        mean = sum(X)/len(X)
        tot = 0.0
        for x in X:
            tot += (x-mean)**2
        return (tot/len(X))**0.5
        
        
    def CV(X):
        mean = sum(X)/len(X)
        return stdDev(X)/mean
        
    class Location(object):
        
        def __init__(self, x, y):
            """x and y are floats"""
            self.x = x
            self.y = y
        
        def move(self, deltaX, deltaY):
            """deltaX and deltaY are floats"""
            return Location(self.x + deltaX, self.y + deltaY)
            
        def getX(self):
            return self.x
            
        def getY(self):
            return self.y
            
        def distFrom(self, other):
            ox = other.x
            oy = other.y
            xDist = self.x - ox
            yDist = self.y - oy
            return (xDist**2 + yDist**2)**0.5
        
        def __str__(self):
            return '<' + str(self.x) + ', ' + str(self.y) + '>'
            
    class Field(object):
        
        def __init__(self):
            self.drunks = {}
            
        def addDrunk(self, drunk, loc):
            if drunk in self.drunks:
                raise ValueError('Duplicate drunk')
            else:
                self.drunks[drunk] = loc
                
        def moveDrunk(self, drunk):
            if drunk not in self.drunks:
                raise ValueError('Drunk not in field')
            xDist, yDist = drunk.takeStep()
            currentLocation = self.drunks[drunk]
            #use move method of Location to get new location
            self.drunks[drunk] = currentLocation.move(xDist, yDist)
            
        def getLoc(self, drunk):
            if drunk not in self.drunks:
                raise ValueError('Drunk not in field')
            return self.drunks[drunk]
            
    class Drunk(object):
        
        def __init__(self, name = None):
            """Assumes name is a str"""
            self.name = name
            
        def __str__(self):
            if self != None:
                return self.name
            return 'Anonymous'
            
    class UsualDrunk(Drunk):
        def takeStep(self):
            stepChoices = [(0.0, 1.0), (0.0, -1.0), (1.0, 0.0), (-1.0, 0.0)]
            return random.choice(stepChoices)
     
    class ColdDrunk(Drunk):
        def takeStep(self):
            stepChoices = [(0.0, 1.0), (0.0, -2.0), (1.0, 0.0), (-1.0, 0.0)]
            return random.choice(stepChoices)
            
    class EWDrunk(Drunk):
        def takeStep(self):
            stepChoices = [(1.0, 0.0), (-1.0, 0.0)]
            return random.choice(stepChoices)
            
    class styleIterator(object):
        def __init__(self, styles):
            self.index = 0
            self.styles = styles
            
        def nextStyle(self):
            result = self.styles[self.index]
            if self.index == len(self.styles) - 1:
                self.index = 0
            else:
                self.index += 1
            return result
     
    def traceWalk(drunkKinds, numSteps):
        styleChoices = styleIterator(('b+', 'r^', 'mo'))
        f = Field()
        for dClass in drunkKinds:
            d = dClass()
            f.addDrunk(d, Location(0, 0))
            locs = []
            for s in range(numSteps):
                f.moveDrunk(d)
                locs.append(f.getLoc(d))
            xVals = []
            yVals = []
            for l in locs:
                xVals.append(l.getX())
                yVals.append(l.getY())
            curStyle = styleChoices.nextStyle()
            pylab.plot(xVals, yVals, curStyle,
                       label = dClass.__name__)
        pylab.title('Spots Visited on Walk ('
                     + str(numSteps) + ' steps)')
        pylab.xlabel('Steps East/West of Origin')
        pylab.ylabel('Steps North/South of Origin')
        pylab.legend(loc = 'best')
     
    traceWalk((UsualDrunk, ColdDrunk, EWDrunk), 200)
    pylab.show()
    

      

  • 相关阅读:
    《编写高质量代码Web前端开发修炼之道》(读书笔记) windrainpy
    jQuery琐碎笔记 windrainpy
    【记录】事件冒泡和事件捕获 windrainpy
    JS比较容易迷惑的几个地方 windrainpy
    【转】成为顶级程序员的唯一途径! windrainpy
    jquery键盘事件 windrainpy
    【转】IE绝对定位元素神秘消失或被遮挡的解决 windrainpy
    简单算法
    HTTP的状态
    css的兼容问题
  • 原文地址:https://www.cnblogs.com/feiyun8616/p/9463210.html
Copyright © 2020-2023  润新知