Как мне справиться с проблемами неограниченного цикла?

#python

#питон

Вопрос:

итак, у меня есть этот код

 pa="" newpa="" use='' use=input('enter username:') pa=input('enter password') while True:  if len(pa)==12:  newpa=input('re-enter password:')   else:  print('the password used did not meet our system requirements, please enter a 12 digit password')  if newpa==pa:  print('you have successfully created a new account!')  

всякий раз, когда я вставляю неверный pa, печать else продолжает зацикливаться. Как мне сделать так, чтобы всякий раз, когда я вхожу в pa, который не соответствует if, чтобы вернуться к newpa, если это поможет, это мой алгоритм, алгоритм того, к чему я пытаюсь стремиться

Комментарии:

1. Пожалуйста, исправьте отступ в вашем примере кода. Но, похоже, вам придется снова запросить ввод pa в цикл, если pa он не соответствует требованиям. И, конечно, вам нужно break из цикла, если все проверки прошли успешно.

2. Поскольку никто еще не упоминал об этом: вам не нужно определять pa , newpa и use как пустые строки в начале вашей программы. input все равно перепишет эти записи. И, пожалуйста, подумайте об использовании более удобочитаемых имен. Вы ничего не выиграете, если сократите переменную для имени пользователя use и пароля pa . Программа не будет работать быстрее, если вы сократите имена. Вы просто путаете себя и других читателей кода.

Ответ №1:

Первое, что нужно сделать, это поместить оператор ввода в цикл while. В данный момент ваш код возвращается в начало цикла while, не давая пользователю возможности повторно ввести свой пароль.

Вы также захотите переместить проверку для части повторного входа, чтобы она выполнялась только в том случае, если первый пароль был действительным. И сообщите пользователю, если их пароли не совпадают.

Наконец, вы захотите прервать цикл, когда будет введен и подтвержден действительный пароль. Используйте для этого перерыв.

Окончательный код будет выглядеть следующим образом:

 pa="" newpa="" use='' use=input('enter username:') while True:   pa=input('enter password')   if len(pa)==12:  newpa=input('re-enter password:')  if newpa==pa:  print('you have successfully created a new account!')  break  else:  print('the passwords did not match!')  else:  print('the password used did not meet our system requirements, please enter a 12 digit password')  

Надеюсь, это поможет и будет иметь смысл!

Комментарии:

1. Это очень полезно, однако я хочу дать пользователю бесконечное количество шансов повторно ввести пароль, если он не соответствует значению if

Ответ №2:

Ваш цикл будет выполняться непрерывно, пока вы не добавите break инструкцию.

Вы можете попробовать что-то вроде приведенного ниже,

 pa="" newpa="" use='' use=input('enter username:')  while True:   pa=input('enter password')   if len(pa)==12:  newpa=input('re-enter password:')  if newpa==pa:  print('you have successfully created a new account!')  break   else:  print('the password used did not meet our system requirements, please enter a 12 digit password')     

Ответ №3:

Когда вы входите в последний if , вы хотите выйти из цикла. Итак, добавьте break после печати.

 if newpa==pa:   print('you have successfully created a new account!')  break  

Ответ №4:

Используйте while True цикл и выйдите из этого цикла, если пароль соответствует требованиям. Затем вы можете ввести пароль во второй раз и сравнить, совпадают ли оба ввода.

 username = input('enter username:') while True:  password = input('enter password')  if len(password) == 12 and password.isdigit():  break  print('the password used did not meet our system requirements, please enter a 12 digit password')  password_check = input('re-enter password:') if password == password_check:  print('you have successfully created a new account!')  

Возможно, вам захочется включить это в дополнительный цикл, если пароли не совпадают.


Если вы используете функции, вы можете уменьшить сложность основной части.

 def enter_password(message):  while True:  password = input(message)  if len(password) == 12 and password.isdigit():  break  print('the password used did not meet our system requirements, please enter a 12 digit password')  return password   def main():  username = input('enter username:')  while True:  password = enter_password('enter password')  password_match = enter_password('re-enter password')  if password == password_match:  break  print("The passwords don't match.")   print('you have successfully created a new account!')   if __name__ == '__main__':  main()  

Ответ №5:

Пожалуйста, используйте break, чтобы прервать оператор и продолжить выполнение оператора цикла в соответствии с вашими требованиями. Я надеюсь, что следующий код соответствует вашим требованиям. Спасибо и дайте мне знать, если я могу чем-нибудь помочь.

 user=input('enter username:')  while True:  pa=input('enter password:')  if len(pa)==12:  newpa=input('re-enter password:')  while newpa!=pa:  newpa=input('re-enter password:')  else:  print('the password used did not meet our system requirements, please enter a 12 digit password')  continue;    if (newpa==pa):  print('you have successfully created a new account!')  break;