title: python NameError, but I think the name is defined
body: <p>Ok I going through LPTHW and writing a game. We are supposed to section the game up into different scripts to see how importing them works. I have 4 scripts: <code>ex45.py</code> executes the main code, <code>Engine45.py</code> is the engine, <code>Locations45.py</code> is the list of locations, and <code>Maps45.py</code> is what holds the map values and moves through locations.</p>
  
  <p>The error I get when running is:
  Traceback (most recent call last):
    File "ex45.py", line 2, in 
      import Maps45
    File "C:\Users\Raistlin\Python\Maps45.py", line 1, in 
      import Locations45
    File "C:\Users\Raistlin\Python\Locations45.py", line 4, in 
      class Map(object):
    File "C:\Users\Raistlin\Python\Locations45.py", line 6, in Map
      'Gold_gym' : Gold_gym(),
  NameError: name 'Gold_gym' is not defined</p>
  
  <p>I don't understand why I am getting a Gold_gym is not defined when it is defined in <code>Locations45.py</code>.</p>
  
  <p>Code blocks below:</p>
  
  <p>ex45.py</p>
  
  <pre><code>import Engine45
  import Maps45
  import Locations45
  
  
  a_map = Map('Gold_gym')
  a_game = Engine(a_map)
  a_game.run()
  </code></pre>
  
  <p>Engine45.py</p>
  
  <pre><code>class Engine(object):
  
      def __init__(self, location_map):
          print "Engine __init__ has location_map", location_map
          self.location_map = location_map
  
      def run(self):
          current_location = self.location_map.opening_location()
          print "Play's first scene", current_location
  
          while True:
              print "\n"('-' * 20)
              next_location_name = current_location.use()
              print "next location", next_location_name
              current_location = self.location_map.next_location(next_location_name)
              print "map returns new location", current_location
  </code></pre>
  
  <p>Locations45.py</p>
  
  <pre><code>from random import randint
  from sys import exit
  
  
  class Location(object):
      def use(self):
          print "This is not configured."
          exit(1)
  
  class Loser_gym(Location):
      quips = [
          'You are worthless, goodbye.'
          'Thanks for trying noob.'
          'Sex and candy, not today.'
          ]
  
      def use(self):
          print Loser_gym.quips[randint(0, len(self.quips)-1)]
          exit(1)
  
  class Gold_gym(Location):
      def use(self):
          print "Welcome to the Gold Gym. This gym will test your physical prowess."
          print "Before you there is a large pool of water with a center platform."
          print "On your person is a satchel, a whip, a hat, and a gun."
          print "Your goal is to find the way out of the gym."
          print "Acceptable inputs are satchel, whip, hat, or gun."
          print "Good Luck."
  
          action = raw_input("What do you do:&gt; ")
  
          if action == 'satchel':
              print "You throw your satchel towards the center platform."
              print "It does absolutely nothing. Try again."
              return 'Gold_gym'
  
          elif action == 'whip':
              print "You use your whip somewhat akin to Indiana Jones."
              print "You swing from a pipe and land squarely on the center platform."
              print "You have survived this turmoil."
              return 'Sapphire_gym'
  
          elif action == 'hat':
              print "You valiantly toss your hat toward the center platform."
              print "Your hat is caught by a gust of wind and blows away."
              print "You cannot survive without your hat."
              return 'Loser_gym'
  
          elif action == 'gun':
              print "You shoot your about wildly in the air."
              print "A ricochet hits you in the head and you die."
              return 'Loser_gym'
  
          else:
              print "DOES NOT COMPUTE, TRY AGAIN."
              return 'Gold_gym'
  
  class Sapphire_gym(Location):
      def use(self):
  
          print "Welcome to the Sapphire gym, here your cognitive ability will be tested."
          print "Just kidding there is no way to figure this out consistently."
          print "Before you stands a door, the door has a small keypad on it."
          print "Below the keypad is what appears to be a smart card reader."
          print "On your way to the location you picked up two smartcards off the ground."
          print "One is red and one is green."
          print "Clearly you will need to use a smartcard and guess a code(3-digits)."
  
          card = raw_input('Which card do you choose:&gt; ')
  
          if card == 'red':
              print "A laser beam comes out of the door and cauterizes your brain."
              return 'Loser_gym'
  
          elif card == 'green':
              code = '%d%d%d' % (randint(0,9), randint(0,9), randint(0,9))
              guess = raw_input('What code do you enter:&gt; ')
              guesses = 0
              while guess != code and guesses &lt; 20 and guess != '123':
                  print "INCORRECT!"
                  guesses += 1
                  guess = raw_input('What code do you enter:&gt; ')
  
              if guess == code or guess == '123':
                  print "Nice guess noob! You may press onward."
                  return 'Cerulean_gym'
  
              else:
                  print "WRONG! TOO MANY GUESSES! DIE INFERIOR BEING!"
                  return 'Loser_gym'
  
  
  class Cerulean_gym(Location):
      def use(self):
          print "Welcome to the final gym, the Cerulean Gym!"
          print "Before you is a 3x3 platform, your job is to cross the platform."
          print "Be warned that each tile can trigger a trap."
          print "Good luck!"
  
          correct_square = ['3', '1', '2']
          jump = raw_input("Square 1, 2, or 3?:&gt; ")
          jumps = 0
  
          while jumps &lt; 3:
              if jump == correct_square:
                  print "Nice job! You picked the correct square!"
                  jump += 1
                  correct_square = correct_square[0+jump]
                  jump = raw_input("Square 1, 2, or 3?:&gt; ")
                  jumps += 1
  
              else:
                  print "YOU FAIL! Goodbye you puny infidel."
                  return 'Loser_gym'
          print 'NICE JOB. YOU WIN ALL THE BASE!'
  </code></pre>
  
  <p>Maps45.py</p>
  
  <pre><code>import Locations45
  
  
  class Map(object):
      locations = {
          'Gold_gym' : Gold_gym(),
          'Sapphire_gym' : Sapphire_gym(),
          'Cerulean_gym' : Cerulean_gym(),
          'Loser_gym' : Loser_gym()
  }
  
      def __init__(self, start_location):
          self.start_location = start_location
          print "start_location in __init__", self.start_location
  
      def next_location(self, location_name):
          print "start_location in next_location"
          val = Map.locations.get(location_name)
          print "next_location returns", val
          return val
  
      def opening_location(self):
          return self.next_location(self.start_location)
  </code></pre>
  
  <p>Help please?</p>