TypeError:类型为'function'的对象没有len()
我正在用Python写一个程序,这个程序可以做很多事情,比如以学生身份登录,或者以司机身份登录。但是当我尝试运行代码时,遇到了很多问题。我把代码写在下面了,同时也附上了错误信息的截图。如果你能帮忙的话,我会非常感激。
提前谢谢你。
print "========================================================"
print "==============Welcome to LiftServer System=============="
print "========================================================"
print "\n"
print "Type start() to View the Options"
print "\n"
DriverLogin=[("ali", "ila"), ("bla", "alb")]
PassLogin=[("ila", "ali")]
def CorrectDriverLogin(n,x):
for i in range (len(x)):
a,b = x[i]
if (a==n):
return b
def CorrectPassLogIn(c,y):
for j in range (len(y)):
d,e = y[j]
if (d==c):
return e
def start():
print "\n"
print "=====================You are in the System============="
print "\n"
print "Choose an option:"
print "======================================================="
print "1. Login for Drivers"
print "2. Login for Students"
print "3. Exit"
print "======================================================="
print "\n"
choice= raw_input("Enter the choice number:")
print "\n"
if (int(choice)==1):
print""
DriverLogin()
elif(int(choice)==2):
print ""
PassLogin()
if (int(choice)==1):
print" "
print" "
p = raw_input (" Current campus: ")
k = raw_input (" Travelling to: ")
m = raw_input (" Leaving Time: ")
x = raw_input (" Enter AM / PM: ")
a = raw_input (" Number of available seats: ")
j = raw_input (" Meeting time: ")
print" \nI am in campus " + p + " ,leaving to campus " + k + " at: " + m + x +" ,where I have only " + a + " seat(s) available."
print" "
print"I will be at the reception at: " + j + x + "."
print" "
print"===================================================="
print"\n"
print "Send message? "
print" "
sendTheMessageD()
elif (int(choice)==2):
homePage()
def sendTheMessageD():
print" "
print"1. Yes"
print"2. No"
choice = raw_input ("Confirm: ")
print" "
homePage()
def PassLogin():
userPass = raw_input("Username:")
passName = raw_input("Password:")
choice=0
if (userPass==CorrectPassLogIn(passName, PassLogin)):
print"\n"
print "=================================================================="
print "1. Send a Message"
print "2. View Messages"
print "3. Log out of the System"
print "==================================================================="
print "\n"
choice = raw_input("Enter the choice's number:")
print"\n"
else:
print"Incorrect Username or Password"
print"\n"
print"Try To Log In Again"
if (int(choice)==1):
print" "
sendMessageP()
elif(int(choice)==2):
print" "
viewMessageD()
def sendMessageP():
print "======================================================================="
print "1)Write a message"
print "2)Go Back"
print "===========++=========================================================="
print" "
choice = raw_input("Enter The choice's Number: ")
if(int(choice)==1):
print" "
y = raw_input("Destination: ")
c = raw_input("Time: ")
l = raw_input("Enter AM ? PM: ")
t = raw_input("Required seats: ")
print"\n Is there anyone going to campus " + y + " ,at: " + c + l + " ,and has " + t + " seat(s) available."
elif(int(choice)==2):
print""
def sendTheMessageP():
print" "
print"1)Yes"
print"2)No"
choice = raw_input ("confirm")
print" "
homePage()
def viewMessageD():
print "======================================================================="
print"Inbox"
print" "
print"1. Message 1"
print"2. Message 2"
print "======================================================================="
choice = raw_input ("Enter the choice's Number:")
if(int(choice)==1):
print"\n Message 1 is viewed"
if(int(choice)==2):
print"\n Message 2 is viewed"
else:
print""
def DriverLogin():
xdriver = raw_input("Username:")
xpass = raw_input("Password:")
choice =0
if (xpass==CorrectDriverLogin(xdriver, DriverLogin)):
print"\n"
print "============= You are now Logged in as a Driver ================"
print"Choose an option:-"
print "======================================================================"
print "1. Send a Message"
print "2. View Messages"
print "3. Log out of the system"
print "======================================================================"
print "\n"
choice = raw_input("Enter the choice's Number:")
else:
print"\n"
print"Incorrect Username or Password"
print"\n"
print"You are logged out of the System Try To Log In Again Please"
if(int(choice)==1):
print" "
sendMessageD()
elif(int(choice)==2):
print" "
elif(int(choice)==3):
print" "
def homePage():
print"\n"
print "======================================================================="
print "1. Send a Message"
print "2. View Messages"
print "3. Log Out of the System"
print "======================================================================="
print "\n"
choice = raw_input("Enter the Choice's Number:")
def sendMessageD():
print "======================================================================="
print"1. Write your message"
print"2. Go Back"
print "======================================================================="
print" "
choice = raw_input("Enter The Choice's Number:")
这是我遇到的错误信息:

3 个回答
2
回答:你在代码的主要部分把“DriverLogin”这个函数名传给了“CorrectDriverLogin”这个函数。
:) 这种情况我们大家都会遇到。我也还在学习,没有人比其他人更厉害(这都是表面现象)。
2
你把两个东西都叫做 DriverLogin
:
DriverLogin=[("ali", "ila"), ("bla", "alb")]
...
def DriverLogin():
当你尝试使用这个列表时,却得到了一个函数:
if (xpass==CorrectDriverLogin(xdriver, DriverLogin)):
不要在同一个命名空间里重复使用名字。给你的函数和列表起不同的名字。PassLogin
也是一样的道理。
4
在这一行:
if (xpass==CorrectDriverLogin(xdriver, DriverLogin)):
你把 DriverLogin
传给了 CorrectDriverLogin
,但是没有调用它,这意味着你传递的是一个函数,而不是这个函数返回的列表或字符串。所以当你试图对它使用 len
函数时,就会出错。
这很可能是因为你在脚本的早些地方也定义了一个叫 DriverLogin
的列表:
DriverLogin=[("ali", "ila"), ("bla", "alb")]
但是现在你把这个名字重新赋值成了一个函数:
def DriverLogin():
xdriver = raw_input("Username:")
...