Python система входа и регистрации с использованием текстовых файлов, нужна помощь с фиксом бага
Я нашел баг в программе и не знаю как его фиксить, его суть в том что при регистрации аккаунта с одним и тем же ником должно писать что такой аккаунт существует, но вся проблема в том что если есть аккаунт с именем "qwerty" то у меня при регистрации аккаунта допустим с именем "qwe" пишет что такой аккаунт уже есть, при том что его нету, но есть "qwerty". Помогите пожалуйста с фиксом этого бага, я уже в замешательстве
def choices():
print("Пожалуйста, выберите, чем бы вы хотели заняться.")
choice = int(input("Для регистрации выберите - 1 Для входа в систему выбирете - 2 "))
if choice == 1:
return getdetails()
elif choice == 2:
return checkdetails()
else:
raise TypeError
def getdetails():
print("Напишите")
name = str(input("Логин: "))
password = str(input("Пароль: "))
f = open("User_Data.txt",'r')
info = f.read()
if name in info:
return "Такой аккаунт уже существет. Пожалуйста, попробуйте еще раз"
f.close()
f = open("User_Data.txt",'w')
info = info + " " +name + " " + password
f.write(info)
print('Вы успешно зарегистрировались (не обращайте внимание на "None") ')
def checkdetails():
print("Напишите")
name = str(input("Логин: "))
password = str(input("Пароль: "))
f = open("User_Data.txt",'r')
info = f.read()
info = info.split()
if name in info:
index = info.index(name) + 1
usr_password = info[index]
if usr_password == password:
return "Вы успешно залогинились, " + name
else:
return "Данные введены неверно"
else:
return "Данные не найдены. Пожалуйста, зарегистрируйтесь."
print(choices())
Ответы (1 шт):
Поскольку, из f.read() мы получаем тип str(ing), то и получается, что при выражении if name in info мы получаем что-то типа:
'kek' in 'keklol rofl' # True
Выходит так, что вы ищите подстроку в строке.
Либо храните логины и пароли через более стойкие сепараторы по типу ;
(По одной паре на одной строке)
То-есть:
f = open('User_Data.txt','a', encoding='UTF-8').write(f'{login}:{password}\n')
f.close()
И потом при чтении файла делайте каст в коллекцию:
info = open('User_Data.txt','r', encoding='UTF-8').read().split('\n')
Либо гуглите как все засунуть в JSON, а лучше в базу данных.
Для первого раза идеально подойдет SQLite3 к слову.