简单的登录脚本文件中的多个用户

问题描述:

我的Python 3.5.2中的登录脚本有问题。简单的登录脚本文件中的多个用户

与我的代码的问题是,只有文件users.txt第一个用户可以通过登录。第二和第三个用户收到“错误的用户名/密码”消息。我在这里错过了什么?

数据在users.txt被格式化这样的:

名称|姓|角色| ID |用户名|密码

约翰|约翰逊|导演| 1个|联系我们|后台管理

Mike | Madson |首席财务官| 2 |迈克|迈克

问题只有约翰通行证登录,我也需要迈克。

def check(): 

    username = str(input("Username: ")) 
    password = str(input("Password: ")) 

    f = open("users.txt", "r") 
    file_content = f.read() 
    users = file_content.split("\n") 
    for user in users: 
     user_array = user.split("|") 
     uname = user_array[4] 
     pword = user_array[5] 
     if uname == username and pword == password: 
      print("Hello " + user_array[1] + ".") 
      print("You are logged in as: " + user_array[2] + ".") 
      main_menu() 
     else: 
      print("Wrong username/password.") 
      print("Try again!\n\n") 
      check() 
check() 

感谢您的帮助!

逻辑错了。你需要类似的东西:

def check(): 
    # You need to read it only once, not every loop 
    users = open("users.txt").read().split("\n") 
    for i in range(len(users)): users[i] = users[i].split("|") 

    # Now what you want is to loop infinitely 
    # until you get correct username/password 
    # instead of recursive calling this 
    # function over and over again 
    while True: 
     username = str(input("Username: ")) 
     password = str(input("Password: ")) 

     for user in users: 
      uname = user[4] 
      pword = user[5] 

      if uname == username and pword == password: 
       print("Hello " + user[1] + ".") 
       print("You are logged in as: " + user[2] + ".") 
       main_menu() 

     # If none of the records matched the input 
     print("Wrong username/password.") 
     print("Try again!\n\n") 

check() 
+0

我试过了,但是我得到了NameError :name'xrange'未定义 – FrankieD

+0

xrange在python 3中被重命名为范围,并且它们消除了xrange函数。它只是返回一个发电机,而不是Python中的列表3 – wpercy

+0

@wpercy耶现在它的工作,谢谢你们:) – FrankieD

这是因为该行

if uname == username and pword == password: 

的因为你要求他们在函数的开头的用户名和密码的用户,我认为他们请输入“admin”和“admin”,这个检查是唯一要通过这个组合。您应该在for循环中包含input请求,或者将其重构为更好。

+0

嗯,是的,我的逻辑很糟糕... – FrankieD

当你阅读的文本文件,约翰将是第一个,所以你的使用,如果statment进行比较,如果用户名和密码匹配,你仅与第一comapring时文本文件的一行。所以当你进入麦克风时,它会与文本文件上的约翰相符合,从我所了解的情况来看,这就是你出错的地方