Проверка списка на имеющиеся данные
у меня появилась такая проблема, решил сделать небольшую регистрацию, решил сделать список, в который в одну ячейку будет записываться имя и пароль, но вот задача, я немного не продумал систему входа, я не могу сделать так, чтобы человек, когда вводит данные(имя и пароль), его данные сравниваются с данными списка и если такие данные есть, то он входит, а если таких данных нет , то ему предлагают зарегистрироваться, но я не могу это сделать, можете помочь, код прикреплю внизу
base_of_information=[]
def registration():
print("Введите ваше имя: ",end='')
name=input()
print("Введите пароль:")
password=input()
while len(password)<4:
print("Сорян, ваш пароль слишком маленький, увеличьте его на ",4-len(password))
print("Введите пароль:")
password=input()
base_of_information.append([name,password])
print("Добро пожаловать в справочник!\n ")
print("Хотите зарегистрироваться ")
answ_1=input(": ")
if answ_1=="да":
registration()
elif answ_1=="нет":
print("хотите войти?")
answ_2=input(": ")
if answ_2=="да":
name=input("Введите имя: ")
password=input("Введите пароль: ")
for x in base_of_information():
if name and password ==base_of_information(x):
print('Chirp!')
else:
print("Вас нету в базе данных! ")
Ответы (2 шт):
Попробовал реализовать код, требуемый автором вопроса. Сделаю несколько замечаний по моему коду:
- Если непонятен функционал global, то можете ознакомиться здесь
- Для простоты использовал в качестве базы данных отдельный текстовый файл.
- В коде есть комментарии.
- Если есть вопросы или пожелания, то пишите в комментариях ниже)
import os
base_of_information = {}
def enter():
global base_of_information # Обращаемся к словарю глобальной области видимости
print("Желаете войти?")
answ_2 = input(": ")
if answ_2.lower() == "да":
name = input("Введите имя: ")
password = input("Введите пароль: ")
if not os.path.isfile('base_file_for_information.txt'): # Проверяем наличие файла,
# если файла нет, то создаём.
f = open('base_file_for_information.txt', 'w')
f.write('admin, admin1_1\n')
f.close()
with open('base_file_for_information.txt', 'r') as file:
for i in file:
info = i.strip().split(', ')
base_of_information[info[0]] = info[1]
if name in base_of_information.keys():
if password == base_of_information[name]:
print('Chirp!')
else:
print('Неверный пароль! Попробуйте снова.')
enter()
else:
print("Вас нет в базе данных! Попробуйте снова.")
enter()
def registration():
global base_of_information # Обращаемся к словарю глобальной области видимости
if not os.path.isfile('base_file_for_information.txt'): # Проверяем наличие файла,
# если файла нет, то создаём.
f = open('base_file_for_information.txt', 'w')
f.write('admin, admin1_1\n') # можно убрать
f.close()
# Создаём, записываем в файл данные администратора(логин, пароль)
# если данные администратора не нужно сразу создавать, то просто уберите эту строчку:
# f.write('admin, admin1_1\n')
# и закрываем файл.
flag = True
print("Введите ваше имя: ", end='')
name = input()
print("Введите пароль:")
password = input()
while len(password) < 4:
print("Сорян, ваш пароль слишком маленький, увеличьте его на ", 4 - len(password))
print("Введите пароль:")
password = input()
with open('base_file_for_information.txt', 'r') as file: # читаем созданный файл базы данных
for i in file:
info = i.strip().split(', ') # обрабатываем строку в файле и приводим из 'admin, admin1_1' к ['admin', 'admin1_1']
base_of_information[info[0]] = info[1] # добавляем в словарь ключ и значение, где info = ['имя', 'пароль']
if name in base_of_information.keys(): # если имя есть, то задаём флагу значение False
flag = False
if flag:
base_of_information[name] = password
with open('base_file_for_information.txt', 'a') as file:
file.write(name + ', ' + password + '\n')
print('Регистрация завершена успешно!')
enter()
else:
print('Данный пользователь уже зарегистрирован! Желаете попробовать еще раз?')
res = input()
if res.lower() == 'да':
registration()
print("Добро пожаловать в справочник!\n ")
print("Желаете зарегистрироваться?")
answ_1 = input(": ")
if answ_1.lower() == "да":
registration()
elif answ_1.lower() == "нет":
enter()
если по сути вопроса, а не по коду, то проверить список на имеющиеся данные в принципе можно так:
if [name,password] in base_of_information: print('Chirp!')
else:
answ_1 = input("Вас нету в базе данных! Хотите зарегистрироваться? : ")
if answ_1 == "да": registration()
или, если вместо списка использовать словарь, то в принципе должно сработать так:
if base_of_information.get(name) == password: print('Chirp!')