Python I';I’’我正在尝试建立一个登录系统,一切正常,但文本文件中没有显示任何内容
我对python非常陌生,但我想测试我能走多远。我只是想做一个简单的登录系统,我几乎完成了,唯一的事情是,在用户创建帐户后,文本文件中没有显示任何内容。没有错误,但此代码将接受任何内容,并且不会检查文本文件中是否有特定的用户名/密码。我只是需要一些帮助,我知道这是非常草率的,但任何事情都会被感激的。这是迄今为止的代码:Python I';I’’我正在尝试建立一个登录系统,一切正常,但文本文件中没有显示任何内容,python,Python,我对python非常陌生,但我想测试我能走多远。我只是想做一个简单的登录系统,我几乎完成了,唯一的事情是,在用户创建帐户后,文本文件中没有显示任何内容。没有错误,但此代码将接受任何内容,并且不会检查文本文件中是否有特定的用户名/密码。我只是需要一些帮助,我知道这是非常草率的,但任何事情都会被感激的。这是迄今为止的代码: correct_username = False correct_password = False def check_file(file_name,username,pass
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) 当然,你也不应该在实践中这样做。这仍然是一种非常糟糕且不安全的存储和检查用户名和密码的方法,但可能比以前要好一些。您正在将所有登录信息写入文件中的一行。这可能是问题所在吗?另外,
如果第行中的用户名和密码:
与您认为的不一样。基本上,您要检查用户名是否为空,密码是否在单行文件中的任何位置。除此之外,它似乎可以工作,并且创建了文件(使用一行,请参见上文)。