You’re missing a line in menu, or else missing an input elsewhere. You’re not actually accepting a choice from your user yet. If you want to keep your current structure, menu should look like:
def menu():
print 'options...'
return int(raw_input())
Or, a little cleaner (same effect):
def menu():
return int(raw_input('options...'))
Otherwise, you can just call menu() and then separately accept the user’s selection:
while loop == 1:
menu()
choice = int(raw_input())
Note that I’ve changed your input() calls to int(raw_input()). This is a much safer way of accepting input from your user, since it prevents them from embedding arbitrary Python code in their input!
Not-quite-on-topic:
Now, just because I happened to notice it, I’m also going to mention that loop is a potentially-misleading variable name. Since you’re just using it as a boolean, you could rewrite the while loop like this:
loop = 1
while loop: # !
#do stuff
This is kind of funny, but not very intuitive to read. It’s usually better to simply loop indefinitely, and use break when your end condition is met:
while True:
# Do stuff
if choice == 5: #Or whatever end condition
break