title: Python: Indentation Error
body: <p>My younger cousin somehow got hold of a python book and has been trying to learn Python. He's asked me for help. But I'm having trouble doing that.</p>
  
  <p>He is using IDLE and he reports that he gets this error:</p>
  
  <pre><code>               Error: Inconsistent indentation detected!
  
      1)      Your indentation is outright incorrect (easy to fix), OR
      2)      Your indentation mixes tabs and spaces.
  
                     To fix case 2, change all tabs to spaces by using Edit-&gt;Select All
                     Followed by Format-&gt;Untabify Region and specify the number of
                     Columns used by each tab.
  </code></pre>
  
  <p>He sent me a copy of his code, and the indentation is correct in it. It fails to run because of a number of syntax errors, but that's not important. He reports that he used the Format->Untabify Region but the problem was not fixed. </p>
  
  <p>I can't for the life of me figure out why I can run his python file, but he can't. Does anybody have any idea what is going on with that? I'm sadly currently located a five hour plane flight away else I'd physically see what was going on.</p>
  
  <p>His code is here, it doesn't have any indentation errors when I try to run it, so I doubt it tell you anything helpful. If there is a problem its been somehow removed by the time I got it.</p>
  
  <pre><code>import pygame, sys, random
  
  skier_images = ["skier_down.png", "skier_right1.png",
                  "skier_right2.png", "skier_left2.png",
                  "skier_left1.png"]
  
  class SkierClass(pygame.sprite.Sprite):
      def __init__(self)
          pygame.sprite.Sprite.__init__(self)
          self.image = pygame.image.load("skier_down.png")
          self.rect = self.image.get_rect()
          self.rect.center = [320, 100]
          self.angle = 0
      def turn(self, direction):
          self.angle = self.angle + direction
          if self.angle &lt; -2: self.angle = -2
          if self.angle &gt;  2: self.angle =  2
          center = self.rect.center
          self.image = pygame.image.load(skier_images[self.angle])
          self.rect = self.image.get_rect()
          self.rect.center = center
          speed = [self.angle, 6 - abs(self.angle) * 2]
          return speed
      def move(self, speed):
          self.rect.centerx = self.rect.centerx + speed [0]
          if self.rect.centerx &lt; 20: self.rect.centerx =20
          if self.rect.centerx &gt; 620: self.rect.centerx = 620
  
  class ObstacleClass(pygame.sprite.Sprite):
      def __init__(self, image_file, location, type):
          pygame.sprite.Sprite.__init__(self)
          self.image_file = image_file
          self.image = pygame.image.load(image_file)
          self.location = location
          self.rect = self.image.get_rect()
          self.rect.center = location
          self.type = type
          self.passed = False
  
      def scroll(self, t_ptr):
          self.rect.centery = self.location[1] - t_ptr
  
  def create_map(start, end):
      obstacles = pygame.sprite.Group()
      gates = pygame.sprite.Group()
      locations = []
      for i in range(10):
          row = random.randint(start, end)
          col = random.randint(0, 9)
          location = [col * 64 + 20, row * 64 + 20]
          if not (location in locations):
              locations.append(location)
              type = random.choice(["tree", "flag"])
              if type == "tree": img = "skier_flag.png"
              obstacle = ObstacleClass(img, location, type)
              obstacles.add(obstacle)
      return obstacles
  def animate():
      screen.fill(255, 255, 255])
      pygame.display.update(obstacles.draw(screen))
      screen.blit(skier.image, skier.rect)
      screen.blit(score_text, [10, 10])
      pygame.display.flip()
  def updateObstaclegroup(map0, map1):
      obstacles = pygame.sprite.Group()
      for ob in map0:  obstacles.add(ob)
      for ob in map1:  obstacles.add(ob)
      return obstacles
  
  pygame.init()
  screen = pygame.display.set_mode([640,640])
  clock = pygame.time.Clock()
  skier =SkierClass()
  speed = [0, 6]
  map_position = 0
  points = 0
  map0 = create_map(20, 29)
  map1 = create_map(10, 19)
  activeMap = 0
  obstacles = updateObstacleGroup(map0, map1)
  font = pygame.font.Font(None, 50)
  
  
  while True:
      clock.tick(30)
      for event in pygame.event.get():
          if event.type == pygame.QUIT: sys.exit()
          if event.type == pygame.KEYDOWN:
              if event.key == pygame.K_LEFT:
                  speed = skier.turn(-1)
              elif efvent.key == pygame.K_RIGHT:
                  speed = skier.turn(1)
      skier.move(speed)
      map_position += speed[1]
  
      if map_position &gt;=640 and activeMap == 0:
          activeMap = 1
          map0 = create)map(20, 29)
          obstacles = updateObstacleGroup (map0, map1)
      if map_position &gt;=1280 and activeMap ==1:
          activeMap = 0
          for ob in map0:
                  ob.location[1] = ob.location[1] - 1280
          map_position = map_position - 1280
          map1 = create_map(10, 19)
          obstacles = updateObstacleGroup (map0, map1)
  
      for obstacle in obstacles:
                  obstacle.scroll(map_position)
      hit = pygame.sprite.spritecollide(skier, obstacles, False)
      if hit:
          if hit[0].type == "tree" and not hit[0].passed:
              points = points - 100
              skier.image = pygame.image.load("skier_crash.png")
              animate()
              pygame.time.delay(1000)
              skier.image = pygame.image.load("skier_down.png")
              speed = [0, 6]
              hit[0].passed = True
          elif hit[0].type == "flag" and not hit[0].passed:
              points += 10
              obstacles.remove (hit[0])
  
  
      score_text = font.render("Score: " +str(points), 1, (0, 0, 0))
      animate()
  </code></pre>