Вот мой код:
import pickle
current_user = None
class User:
def __init__(self, username, password):
self.username = username
self.password = password
def set_password(self):
self.password = input("Enter NEW password > ")
def __get_password(self):
return self.password
def __get_username(self):
return self.username
def change_password(self):
my_password = input("Enter your CURRENT password > ")
if my_password == self.__get_password():
self.set_password()
else:
print("Please try again")
def display_details(self):
print()
print("Username and password")
print("---------------------")
print("username is: ", User.__get_username(self))
print("password is: ", User.__get_password(self))
print()
def __repr__(self):
return f'username: {self.username}'
try:
users = pickle.load(open("users.pickle", "rb"))
except (OSError, IOError) as f:
users = [User("MichaelPalin", "P4rr0t"), User("EricIdle", "M0nty"), User("TerryJones", "Pyth0n")]
pickle.dump(foo, open("users.pickle", "wb"))
def find_user(name):
for user in users:
if user.username == name:
return user
def add_user():
user = input("Enter NEW user > ")
password = input(f"Enter password for {user} > ")
users.append(User(user, password))
def delete_user():
delete_user = input("Enter the user you wish to remove > ")
user = find_user(delete_user)
if user:
users.remove(user)
print('done')
else:
print(f'user {delete_user} not found')
def display_users():
for user in users:
print(user)
def invalid_entry(): # Response for invalid entries to menu.
print("Invalid entry, please try again")
print()
def menu(): # Display menu, prompt for and accept keyboard choice
print("Please select one of the following:")
print()
print("Enter a if you want to add a new user")
print("Enter d if you want to delete a user")
print("Enter f if you want to find a user")
print("Enter c if you want to change your password")
print("Enter u if you want to display a list of users")
print("Enter q if you want to Quit")
choice = input("")
return choice
while True:
menu_choice = menu()
if menu_choice.lower() == "a":
add_user()
elif menu_choice.lower() == "d":
delete_user()
elif menu_choice.lower() == "f":
current_user = find_user()
elif menu_choice.lower() == "c":
if current_user is None:
print("No user selected!")
continue
else:
current_user.change_password()
elif menu_choice.lower() == 'u':
display_users()
elif menu_choice.lower() == "q":
print("Goodbye")
with open('users.pickle', 'wb') as f:
pickle.dump(users, f)
quit()
else:
invalid_entry()
Там явно что-то не так, поскольку он застревает во всех oop:
Введите ваш ТЕКУЩИЙ пароль> пароль
Введите ваш ТЕКУЩИЙ пароль> пароль
Введите ваш ТЕКУЩИЙ пароль>
Я вижу, что PyCharm подходит 'локальная переменная my_password тоже не используется'.
Я пытался удалить my_password = input("Enter your CURRENT password > ")
из блока def change_password()
, но это приводит к фатальной ошибке.
Я также попытался переименовать первую функцию change_password
в update_password
и соответствующим образом обновить вторую, чтобы она вышла .. .
def change_password():
update_password()
... но это тоже не сработало.
Это логика c, которую я хочу использовать:
- IF пользователь выбирает 'c' в меню, ТО затем делает следующее ...
- Предлагает пользователю ввести свой текущий пароль
- ЕСЛИ введенный ввод совпадает с его текущим паролем, ТО предлагает им введите новый пароль и обновите его соответственно
- ЕСЛИ введенный ввод не совпадает с их текущим паролем, ТО побудит их повторить попытку
Любая помощь, пожалуйста? TIA
Кстати, я озадачен тем, что PyCharm подходит к «неразрешенной ссылке« foo »». Этот раздел, кажется, работает нормально, но любая идея о том, почему это так, и если это проблема или нет, приветствуется.
Редактировать: я обновил код в соответствии с предложениями, насколько я могу в любом случае.
Редактировать 2: PyCharm сказал, что self
в if my_password == self.__get_password(self)
- неожиданный аргумент, поэтому я удалил его, и это, похоже, не принесло никакого вреда.