python sprites random movement keeps clustering in top left corner

The problem i'm having seems to be in the random_movement function. it keeps spitting out the same numbers around 170 which is making the sprites cluster in the top left corner of the screen. any ideas why and what I might do differently?

what I want the sprites to do is move a short distance then change direction and move a little more.

def avoid_mobs(self):
    for mob in self.game.mobs:
        if mob != self:
            dist = self.pos - mob.pos
            if 0 < dist.length() < AVOID_RADIUS:
                self.acc += dist.normalize()



def random_movement(self):
    new_angle = uniform(-1, 1)
    new_x = math.sin(new_angle * math.pi/2)
    new_y = math.cos(new_angle * math.pi/2)
    new_vector = pg.math.Vector2(new_x,new_y)
    new_vector.normalize()
    new_vector *= randrange(360)            
    print ('new_vec: ' + str(new_vector))
    return new_vector

def chase(self, target_dist):
    self.rot = target_dist.angle_to(vec(1, 0))                
    print ('rot: ' + str(self.rot))
    print ('vel: ' + str(self.vel))
    self.image = pg.transform.rotate(self.game.mob_img, self.rot)
    self.rect = self.image.get_rect()
    self.rect.center = self.pos
    self.acc = vec(1, 0).rotate(-self.rot)
    self.avoid_mobs()
    self.acc.scale_to_length(self.speed)
    self.acc += self.vel * -1
    self.vel += self.acc * self.game.dt
    self.pos += self.vel * self.game.dt + 0.5 * self.acc * self.game.dt ** 2
    self.hit_rect.centerx = self.pos.x
    collide_with_walls(self, self.game.walls, 'x')
    self.hit_rect.centery = self.pos.y
    collide_with_walls(self, self.game.walls, 'y')
    self.rect.center = self.hit_rect.center


def update(self):
    #target_dist = self.target.pos - self.pos
    #if target_dist.length_squared() < DETECT_RADIUS ** 2:
    #    # Play zombie moans once in a while
    #    if random() < 0.002:    
    #        choice(self.game.zombie_moan_sounds).play()
    #    self.wander = target_dist
    ##    self.chase(target_dist)
    #else:
    if random() < 0.05:
        self.wander = self.random_movement() - self.pos
        print ('target' + str(self.wander))
    self.chase(self.wander)
    if self.health <= 0:
        snd = self.game.zombie_death_sound[0]
        if snd.get_num_channels() > 2:
            snd.stop()
        snd.play()
        self.kill()
        self.game.map_img.blit(self.game.splat, self.pos - vec(32, 32))

def draw_health(self):
    if self.health > 60:
        col = GREEN
    elif self.health > 30:
        col = YELLOW
    else:
        col = RED
    width = int(self.rect.width * self.health / 100)
    self.health_bar = pg.Rect(0, 0, width, 7)
    if self.health < 100:
        pg.draw.rect(self.image, col, self.health_bar)