To answer the problem 1 of why "Columbus" prints first?
I really don't know how you did it, my attempt shows that it prints in the order that the list is initialized, see printing list in python properly for how you can manipulate prints in python:

The answer to the second question of empty variable, I got a normal syntax error, see how variables work in python here: Python variable declaration:

To replicate the OP's error, Adam = "Columbus"
will only be True if the OP reinitialized the
names` list after the for loop: see http://labs.codecademy.com/BvOl/1#:workspace

Surely using a local Adam
in looping a for-loop is not unlike using i
. After the for-loop, the i
will take the value of the last item in the list.
>>> alist = [1,2,3,4]
>>> for i in alist:
... print i
...
1
2
3
4
>>> i
4
But when the next for-loop, the i
will automatically be set to the first item in the list when the loop starts. But if you reinitialize the list after the first time you ran the for-loop, now the first item in the list would take the value of the last item:
>>> i = None
>>> alist = [i,2,3,4]
>>> for i in alist:
... print i
...
None
2
3
4
>>> i
4
>>> alist = [i,2,3,4]
>>> alist
[4, 2, 3, 4]