TypeError:类型为'function'的对象没有len()

3 投票
3 回答
28410 浏览
提问于 2025-04-18 06:28

我正在用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:")

这是我遇到的错误信息:

enter image description here

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:")
    ...

撰写回答