这是我的代码:
import pickle
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 == User.__get_password(self):
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 change_password():
my_password = input("Enter your CURRENT password > ")
change_password()
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":
find_user()
elif menu_choice.lower() == "c":
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()
显然存在错误,因为它陷入了循环:
输入您的当前密码>密码输入您当前的密码>密码输入您的当前密码>
我可以看到PyCharm即将出现'也未使用局部变量my_password'。
我尝试从my_password = input("Enter your CURRENT password > ")
块中删除def change_password()
,但这只会导致致命错误。
我还尝试将第一个change_password
函数重命名为update_password
并相应地更新第二个函数,以使它成功...
def change_password():
update_password()
...但是那也不起作用。
这是我要使用的逻辑:
有帮助吗? TIA
[顺便说一下,我很困惑PyCharm正在出现'未解决的引用'foo'。该部分似乎可以正常运行,但是如果您对这是为什么以及是否存在问题有任何见解,将不胜感激。
也许做这样的事情:
def set_password(self, pw):
self.password = pw
def change_password(self):
my_password = input("Enter your CURRENT password > ")
if my_password == User.__get_password(self):
self.set_password()
else:
print("Please try again")
以及外部作用域中的另一个change_password函数也请求命令行输入。尝试消除所有input("Enter your CURRENT password > ")
除外,而是在函数调用中使用参数。最重要的是,外部作用域change_password()函数不断地调用自身,因为它覆盖了内部作用域。尝试重命名两者之一。
def change_password():
my_password = input("Enter your CURRENT password > ")
change_password()
注意,您只是不断不断地调用更改密码...由于某种原因,您也有双重方法,请使用User
类中的方法。
选择'c'
时,您没有上下文,您不知道WHO试图更改其密码,因此首先必须询问用户是谁,然后尝试以下更改:在while true
循环之前放current_user = None
将'f'
的条目更改为current_user = find_user()
并且'c'
的条目为
if current_user is None: print("No user selected!") continue else: current_user.change_password()