我的输出只显示错误,即使它是正确的

时间:2018-06-10 17:28:33

标签: python-3.x passwords username

我不明白为什么它只显示错误它只显示在脚本中使用用户名和密码时它工作的最后一行?

def login():

 for username in range(3):
   username = input("Enter your username:")
   password = input("Enter your password:")


   d="dev luhar"
   k="kyle patel"
   s="shiv borhara"

   f=open("bob.txt")
   lines=f.readlines()

   if username == lines[0] and password == lines[1]:
        print("welcome to soar valley",d)
        break

   if username == lines[2] and password ==lines[3]:
        print("welcome to soar valley",s)
        break

   if username == lines[4] and password ==lines[5]:
        print("welcome to soar valley",k)
        break

   if username or password != lines[0] or lines[1] or lines[2]or lines[3]or
   lines[4] or lines[5]:
        print("wrong try again")


login()

1 个答案:

答案 0 :(得分:0)

您误用了运算符or

if username or password != lines[0] or lines[1] or lines[2]or lines[3]or lines[4] or lines[5]:

此行未按预期执行。

In the Python 3.7 documentation of or

  

以下值被解释为false:所有类型的False,None,数字零,以及空字符串和容器(包括字符串,元组,列表,字典,集合和frozensets)。所有其他值都被解释为true。

因此,非空字符串始终被解释为True,这意味着您的目标行可以在假定条件下简化(用户名和密码不为空,文件" bob.txt& #34;开头包含至少6个非空行:

if True or True != True or True or True or True or True or True:

永远都是如此。而这正是你所期望的。

根据您的具体情况,您可以尝试使用关键字not in

if username not in lines[0:5] and password not in lines[0:5]:

最好使用dict来设置用户名 - 密码对。