Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从文本文件检查用户名和密码是否正确_Python - Fatal编程技术网

Python 从文本文件检查用户名和密码是否正确

Python 从文本文件检查用户名和密码是否正确,python,Python,我需要检查用户名和密码是否与文本文件中的详细信息匹配。我不知道该怎么做。以下是我到目前为止所做的(将用户名保存到文件中) 另一种方法是使用和open在循环内完成过程后关闭文件,这样您就可以创建读取循环和附加循环。为此,我喜欢将名称和密码存储在同一行上的想法,这样我们可以检查以确保名称和相应的密码相互链接,而不是对任何名称使用任何密码。另外,在使用append时,我们必须添加一个'\n',否则我们写的所有内容都将写入同一行 为了验证用户,我们将文件作为r打开,然后我们可以使用for line in

我需要检查用户名和密码是否与文本文件中的详细信息匹配。我不知道该怎么做。以下是我到目前为止所做的(将用户名保存到文件中)


另一种方法是使用
和open
在循环内完成过程后关闭文件,这样您就可以创建读取循环和附加循环。为此,我喜欢将名称和密码存储在同一行上的想法,这样我们可以检查以确保名称和相应的密码相互链接,而不是对任何名称使用任何密码。另外,在使用append时,我们必须添加一个
'\n'
,否则我们写的所有内容都将写入同一行

为了验证用户,我们将文件作为
r
打开,然后我们可以使用
for line in f
获取
.txt
中的所有行,从那里我们可以循环遍历每一行,如果用户名和密码都存在于同一行中,我们可以欢迎用户,如果不将它们发送回开头

希望这有帮助

while True:
    user = input('\nAre you a returning player: ')
    if user.lower() == 'no':
        with open('accounts.txt', 'a') as f:
            username = input('\nEnter username: ')
            password = input('Enter password: ')
            combo = username + ' ' + password
            f.write(combo + '\n')

    else:
        with open('accounts.txt', 'r') as f:
            username = input('\nEnter username: ')
            password = input('Enter password: ')
            for line in f:
                if username + ' ' + password + '\n' == line:
                    print('Welcome')
                    break
            else:
                print('Username and/or Password Incorrect')

你已经解决了对文件的写入问题。现在你应该在谷歌上搜索“如何用python读取文件”。欢迎!看起来你想让我们为你写些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是包括您迄今为止编写的代码、示例输入(如果有)、预期输出和实际获得的输出(控制台输出、回溯等)。你提供的细节越多,你可能得到的答案就越多。检查和。主要是您在读取创建的文件方面没有表现出努力。我还建议您在决定使用文本文件之前,查看OWASP存储密码的指南。学习如何从文件中读取变量是件好事,但这绝对不是一种安全的方法@本杰明,你没有错,但我认为这有点超出了OP的范围。早期用更高水平的东西打新手并不鼓励学习,而只是困惑和挫折。@Aaron fair point!只是一些吹毛求疵。。“accounts.txt”文件没有任何换行符(在追加模式下打开不会插入
”\n“
),上一个密码将与下一个用户名一起运行。由于所有这些都是一行,所以您也不会检查密码是否与给定用户实际关联,因为每个用户名和密码都在同一行。我可能会将我的密码与其他任何人的用户名一起使用:/最后,如果您打算逐行迭代,那么只使用
来执行f:
中的行比调用
f.readlines()更简单
并对结果进行迭代。另外,如果i:中的用户名和密码与您的想法不符,则您的行
。。。这相当于
如果bool(用户名)和(行中的密码):
*注意括号中的操作顺序。如果只需要将
密码
作为
的子字符串,很多都可以作为密码传递。@Aaron现在我正在修复一个用户/密码演示,错过了所有这些字典检索,@Aaron编辑得很好,但是如果在比赛之前出现else,我们将得到错误的语句,即write需要是write
combo+'\n'
yah,您可以进行更改。您还应该在开始时更新文本以匹配代码。
while True:
    user = input('\nAre you a returning player: ')
    if user.lower() == 'no':
        with open('accounts.txt', 'a') as f:
            username = input('\nEnter username: ')
            password = input('Enter password: ')
            combo = username + ' ' + password
            f.write(combo + '\n')

    else:
        with open('accounts.txt', 'r') as f:
            username = input('\nEnter username: ')
            password = input('Enter password: ')
            for line in f:
                if username + ' ' + password + '\n' == line:
                    print('Welcome')
                    break
            else:
                print('Username and/or Password Incorrect')
Are you a returning player: no

Enter username: vash
Enter password: stampede

Are you a returning player: yes

Enter username: vash
Enter password: stacko
Username and/or Password Incorrect

Are you a returning player: yes

Enter username: vash
Enter password: stampede
Welcome