#python #python-3.x
#python #python-3.x
Вопрос:
Я уже спрашивал людей вокруг меня и пытался бесчисленное количество раз получить эту программу исправления. Программа должна иметь возможность добавлять веб-сайты и пароли пользователей столько раз, сколько они захотят, и показывать выбранные ими веб-сайты и пароль.
На данный момент, когда вы отвечаете would you like to add another website?
да, он не запрашивает повторно новое имя веб-сайта и пароль, а просто повторяет вопрос would you like to add another website?
, также, когда вы ввели имя веб-сайта и пароль и ответили would you like to add another website?
нет, затем выбрали вариант 1, чтобы просмотреть существующие учетные записи, он повторяется would you like to add another website?
, когда это должно даже появиться в первом варианте
Входные данные и как они должны выводиться:
1) найдите свои существующие пароли
2) сохраните новый пароль для своих приложений
3) просмотрите сводку вашего хранилища паролей
4) успешно выйдите из хранилища паролей 1
У вас нет сохраненных веб-сайтов и паролей
1) найдите свои существующие пароли
2) сохраните новый пароль для своих приложений
3) просмотрите сводку вашего хранилища паролей
4) успешно выйдите из хранилища паролей 2
Как называется веб-сайт / приложение, которое вы добавляете? Instagram
Какой пароль у вашей учетной записи Instagram? bob91
Вы хотели бы добавить еще один веб-сайт? ДА
Как называется веб-сайт / приложение, которое вы добавляете? Facebook
Какой пароль у вашей учетной записи Facebook? bob92
Вы хотели бы добавить еще один веб-сайт? НЕТ
1) Найдите свои существующие пароли
2) Сохраните новый пароль для своих приложений
3) Просмотрите сводку вашего хранилища паролей
4) Успешно выйдите из хранилища паролей 1
введите приложение, которое вы хотите найти пароль для Instagram
имя веб-сайта = instagram
пароль = bob91
Полный код:
vault_apps = []
app_name = ""
def locker_menu_func():
print('''You have opened the locker,
Please select what you would like to do,''')
locker_menu_var = input('''Press: n1) find your existing passwords n2) save a new password for your appsn3) see a summary of your password locke n4) exit password locker successfullyn---------------------------------------------------------------------------------
''')
print('''----------------------------------------------------------------''')
while True:
if locker_menu_var == "1":
while len(vault_apps) < 1:
print('''you have nothing stored''')
if len(vault_apps) > 1:
print(vault_apps)
break
break
if locker_menu_var == "2":
app_name = input('''
What is the name of the website/app your are adding?
''')
app_password = input('''What is the password of your {} account?
'''.format(app_name))
vault_apps.append([app_name, app_password])
while True:
ask_again = input('''Would you like to add another app and password?
''')
if ask_again.lower() == "yes":
locker_menu_var = "2"
elif ask_again.lower() == "no":
locker_menu_func()
else:
print("please enter a valid response") #should repeat if user want to add another website
Комментарии:
1. Рекомендую использовать другой подход, при котором вы разделяете проблему на разные задачи. Напишите функцию для обработки запроса у пользователя ввода и просмотра того, что они вам дали. Напишите другие функции по одной для каждой задачи (функции обратного вызова). Затем напишите другую функцию с циклом, который вызывает вашу функцию пользовательского ввода, а затем функцию обратного вызова в соответствии с тем, что выбрал пользователь.
Ответ №1:
Ваш код не работает, потому что вы не break
из while True:
цикла:
while True:
ask_again = input('''Would you like to add another app and password?''')
if ask_again.lower() == "yes":
locker_menu_var = "2" <--- does not leave while loop
elif ask_again.lower() == "no":
locker_menu_func()
else:
# etc.
Держите свои методы небольшими и обрабатывайте одну проблему, чтобы упростить ваш поток управления, например:
vault_apps = {}
# ,2,Hallo,Yuhu,y,Hallo2,Yuh,n,3,4
def menu():
print('n' '-'*40)
print('1) find your existing passwords')
print('2) save a new password for your apps')
print('3) see a summary of your password locker')
print('4) exit password locker successfully')
print('-'*40)
k = None
while k not in {"1","2","3","4"}:
k = input("Choose: ")
return int(k) # return the number chosen
def input_new_app():
global vault_apps
app = None
while not app:
app = input("What is your apps name? ")
pw = None
while not pw:
pw = input("What is your apps passphrase? ")
vault_apps[app]=pw
def print_vault():
print("Vault content:")
for key,value in vault_apps.items():
print(f" {key:<10}t==>t{value}")
def find_password():
if vault_apps:
pass
else:
print("nothing in your password store")
def main():
k = None
print('You have opened the locker,nPlease select what you would like to do.')
while True:
choice = menu()
if choice == 1:
find_password()
elif choice == 2:
input_new_app()
k = input("Would you like to add another app and password?").lower()
while k in {"yes","y"}:
input_new_app()
elif choice == 3:
print_vault()
elif choice == 4:
print("Good bye")
break
main()
Вывод:
You have opened the locker,
Please select what you would like to do.
----------------------------------------
1) find your existing passwords
2) save a new password for your apps
3) see a summary of your password locker
4) exit password locker successfully
----------------------------------------
Choose: 1
nothing in your password store
----------------------------------------
1) find your existing passwords
2) save a new password for your apps
3) see a summary of your password locker
4) exit password locker successfully
----------------------------------------
Choose: 2
What is your apps name? A
What is your apps passphrase? 66
Would you like to add another app and password? n
----------------------------------------
1) find your existing passwords
2) save a new password for your apps
3) see a summary of your password locker
4) exit password locker successfully
----------------------------------------
Choose: 3
Vault content:
A ==> 66
----------------------------------------
1) find your existing passwords
2) save a new password for your apps
3) see a summary of your password locker
4) exit password locker successfully
----------------------------------------
Choose: 4
Good bye
Ответ №2:
Эта логика ошибочна. Как только вы входите в бесконечный цикл while, у вас нет другого способа выйти из него, кроме как ввести «нет». Когда вы вводите «yes», значение locker_menu_var изменяется, но вы не выходите из цикла, поэтому он продолжает повторять одно и то же меню.
while True:
ask_again = input('''Would you like to add another app and password?
''')
if ask_again.lower() == "yes":
locker_menu_var = "2"
elif ask_again.lower() == "no":
locker_menu_func()
Вы смешиваете циклирование и рекурсию, что приводит к путанице. Один из простых способов сделать это:
vault_apps = []
def locker_menu():
# the entry message
msg = '''You have opened the locker, Please select what you would like to do,'''
print(msg, end="nn")
# nume options
menu = ["1) find your existing passwords",
"2) save a new password for your apps",
"3) see a summary of your password locker",
"4) exit password locker successfully"]
menu_string = f"Press:n{menu[0]}n{menu[1]}n{menu[2]}n{menu[3]}n"
# now enter the loop
while True:
# input variable
# NOTE: This variable is inside the loop,
# so that the user can enter the value everytime
# the loop repeates.
locker_menu_var = input(menu_string)
if locker_menu_var == "1":
# retrieve password for an existing record.
# although it's not a good idea to just print
# all the records, I am not changing your application logic
# because I don't see any use in it.
# you missed one case in your logic,
# which I have fixed here.
if len(vault_apps) == 0:
print("you have nothing stored")
else:
print(vault_apps)
elif locker_menu_var == "2":
# for a new entry
# enter your logic here
an = input("app name: ")
passw = input("password: ")
vault_apps.append([an, passw])
done = False # flag for exiting
while not done:
inp = input("enter another?")
if inp == "yes":
# enter logic here
an = input("app name: ")
passw = input("password: ")
vault_apps.append([an, passw])
else:
done = True
elif locker_menu_var == "3":
# do something
pass
elif locker_menu_var == "4":
return
if __name__ == "__main__":
locker_menu()