为什么我的if语句不能正确执行?

时间:2019-08-18 02:42:44

标签: python file readlines

我正在尝试练习python技能,我知道我对如何处理文件有点陌生,所以我决定自学。该代码基本上是建立一个帐户,登录并检查用户并通过存储在文件中的密码。我知道我的用户和通行证正在追加并读取文件。我遇到的问题是在我的if语句中。我正在使用if i == user,但==表示文字。因此,我尝试仅使用一个=检查是否有一个变量=用户输入的变量,当我这样做时,出现语法错误。我的最后一个问题是我在运行代码时,在其他语句中说用户名不正确,在控制台中说了2到3次。这使我感到困惑,因为else语句之外的任何地方都不是它们的while或for循环。如果有人可以解释在用户名和密码字符串正确时如何使我的if语句被执行。那太好了。另外,如果您知道我的控制台为什么要执行else:无故打印3次(用户名不正确)。我很好奇知道

我尝试在for循环中打印出变量,并且确实在文件中打印出了字符串。

u = open('users.txt', 'a+')
p = open('pass.txt', 'a+')

does_acc = input('Do you have a account? ')

if does_acc == 'no' or does_acc == 'No':
    new_user = input('Username: ')
    u.write(new_user + '\n')
    new_pass = input('Password: ')
    p.write(new_pass + '\n')

sign_in = input('Would you like to sign in? ')

if sign_in == 'yes' or sign_in == 'Yes':
    n = open('users.txt', 'r')
    m = open('pass.txt', 'r')
    lines = n.readlines()
    line = m.readlines()
    user = input('Username: ')
    for i in lines:
        print(i)
        if i = user:
            password = input('Password: ')
            for x in lines:
                if password == x:
                    print('secret file opened')
                else:
                    print("{} is not a valid password.").format(password)
        else:
            print('Username incorrect.')
else:
    print('Have a nice day.')

u.close()
p.close()


Do you have a account? yes
Would you like to sign in? yes
Bob
Username: Bob
Username incorrect.
Username incorrect.

2 个答案:

答案 0 :(得分:2)

  1. if i = user:应替换为:if i == user:(双等号)
  2. 创建新帐户后,应关闭文件,因为您将在文件打开后再次打开它们。这可能会或可能不会导致错误地读取/写入数据。
  3. 一种想法是,一旦用户输入了他们的名字,整个密码文件就会与输入的密码相匹配-您只需要为每个用户检查一个密码即可。
  4. li>
  5. for x in lines:尝试将密码与用户名进行匹配。看起来很奇怪。
  6. print("{} is not a valid password.").format(password)的括号顺序错误,应将"string".format(parm)括在print( .... )中,反之亦然。

总而言之,我希望这样重写您的密码匹配部分:

with open( 'passwords.txt' ) as fin :
    passwords = [p.strip() for p in fin.readlines()]

with open( 'users.txt' ) as fin :
    users = [u.strip() for u in fin.readlines()]

user = input( 'User: ' )
password = input( 'Password: ' )

if [user, password] in zip( users, passwords ) :
    print( "You're welcome!" )
else :
    print( "Go away!" )

或者类似的东西。

答案 1 :(得分:0)

if i = user应该是if i == user,并且您要打开同一文件两次,一次是在文件开头,另一次是在if sign_in == 'yes' or sign_in == 'Yes':之后