Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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 I';I’’我正在尝试建立一个登录系统,一切正常,但文本文件中没有显示任何内容_Python - Fatal编程技术网

Python I';I’’我正在尝试建立一个登录系统,一切正常,但文本文件中没有显示任何内容

Python I';I’’我正在尝试建立一个登录系统,一切正常,但文本文件中没有显示任何内容,python,Python,我对python非常陌生,但我想测试我能走多远。我只是想做一个简单的登录系统,我几乎完成了,唯一的事情是,在用户创建帐户后,文本文件中没有显示任何内容。没有错误,但此代码将接受任何内容,并且不会检查文本文件中是否有特定的用户名/密码。我只是需要一些帮助,我知道这是非常草率的,但任何事情都会被感激的。这是迄今为止的代码: correct_username = False correct_password = False def check_file(file_name,username,pass

我对python非常陌生,但我想测试我能走多远。我只是想做一个简单的登录系统,我几乎完成了,唯一的事情是,在用户创建帐户后,文本文件中没有显示任何内容。没有错误,但此代码将接受任何内容,并且不会检查文本文件中是否有特定的用户名/密码。我只是需要一些帮助,我知道这是非常草率的,但任何事情都会被感激的。这是迄今为止的代码:

correct_username = False
correct_password = False

def check_file(file_name,username,password):
    with open(file_name, 'r') as read_obj:
        for line in read_obj:
            if username and password in line:
                return True
    return False

def login():
    loginInfo = check_file('Data_Storage.txt', username=input('Username: '), 
    password=input('Password: '))
    if loginInfo:
        print("You have successfully logged in!")

def write():
    enter_data = open('Data_Storage.txt', 'a')
    enter_data.write('Username: ' + username)
    enter_data.write('Password: ' + password)
    enter_data.write('')
    enter_data.close()


have_account = input("Do you have an account (Y/N): ")

if have_account == 'N' or have_account == 'n':
    curate_account = input("Would you like to make one (Y/N): ")
    if curate_account == 'Y' or curate_account == 'y':
        username = input('Username: ')
        password = input('Password: ')
        write()
        loginuwu = input("You're all set, would you like to log in (Y/N): ")
        if loginuwu == 'Y' or loginuwu == 'y':
            login()
elif have_account == 'Y' or have_account == 'y':
    login()

else:
    pass

写入文本文件实际上应该可以工作,但是
write
不会自动添加换行符,因此所有凭据最终都在同一行中。但还有一些问题:

  • 如前所述,您将所有用户名和密码写入文件的同一行,而不使用任何换行符;调用
    write
  • 如果第行中的用户名和密码不是“用户名和密码在同一行”,而是“用户名不是空的,密码在同一行”
  • 但是,即使您解决了这个问题,在这里检查中的也不合适:如果您只检查第行的用户名和第行的密码,用户只需输入这两项的”,就可以登录;相反,您应该与文件1中的完整用户名和密码进行比较
  • 由于您不知道用户名或密码(尤其是后者)中的字符,因此很难定义一个特定的分隔符来将它们存储在同一行中,因此我建议将它们存储在交替行中(换行符是用户在
    输入中不能输入的一件事
    )并在迭代文件的行时使用
    next
    获取与用户名对应的密码(在这里,您必须使用
    strip
    删除换行符)
此外,还有一些可能的改进:

  • 您可以
    lower
    用户输入,这样您就不必检查它是否匹配
    Y
    Y
  • 您可以使用另一个函数获取凭据,并将文件名存储在变量中
请尝试以下版本:

filename = 'Data_Storage.txt'

def ask_credentials():
    return input('Username: '), input('Password: ')

def login():
    username, password = ask_credentials()
    if check_file(username, password):
        print("You have successfully logged in!")
    else:
        print("Login failed")

def check_file(username,password):
    with open(filename, 'r') as f:
        for usr in map(str.strip, f):
            pwd = next(f).strip()
            if usr == username and pwd == password:
                return True
    return False

def create_account():
    username, password = ask_credentials()
    with open(filename, 'a') as f:
        f.write(username + "\n")
        f.write(password + "\n")

have_account = input("Do you have an account (Y/N): ").lower()
if have_account == 'n':
    if input("Would you like to make one (Y/N): ").lower() == 'y':
        create_account()
        if input("You're all set, would you like to log in (Y/N): ").lower() == 'y':
            login()
elif have_account == 'y':
    login()


1) 当然,你也不应该在实践中这样做。这仍然是一种非常糟糕且不安全的存储和检查用户名和密码的方法,但可能比以前要好一些。

您正在将所有登录信息写入文件中的一行。这可能是问题所在吗?另外,
如果第行中的用户名和密码:
与您认为的不一样。基本上,您要检查用户名是否为空,密码是否在单行文件中的任何位置。除此之外,它似乎可以工作,并且创建了文件(使用一行,请参见上文)。