#python #python-3.x
#python #python-3.x
Вопрос:
Я пытаюсь создать эту программу на python, которая предложит пользователю ввести пароль. Однако пароль должен содержать от 6 до 12 символов. Также в нем должен быть символ «#», но не в первом или последнем символе. Это то, что у меня есть до сих пор, я не уверен, что я делаю неправильно, я просто продолжаю получать ответ «Неверный пароль». Буду признателен за любую помощь. Спасибо
# This program will determine whether a password meets all security requirements
import re
print ("Hello, please enter a password between 6 and 12 characters.")
print ("The password may consist of a combination of numbers and letters, but the one of characters (after the first and before the last) must be a # sign.")
password = input("Please enter your password: ")
x = True
while x:
if (len(password)<6 or len(password)>12):
break
elif not re.search("[a-z]", password):
break
elif not re.search("[0-9]", password):
break
elif not re.search("[A-Z]", password):
break
elif not re.search("[#]", password):
break
else:
print("Valid Password")
x = false
break
if x:
print("Not a valid password")
Комментарии:
1. Вы выходите из цикла в каждом отдельном случае. Вам вообще не нужно
break
, поскольку вы используете флагx
для управления циклом. Вы можете использоватьcontinue
orpass
для первых 5.2. Вы также можете рассмотреть возможность использования
getpass
пакета Python для запроса ввода пароля, скрывая сами символы: docs.python.org/3/library/getpass.html3. Я думаю, вы просто не указали действительные пароли, достаточно забавно. Когда я ввожу пароль,
toMe#rk1
он работает, но скрипт выдает ошибку из-заx = false
. Это должно бытьFalse
. После исправления это работает нормально
Ответ №1:
# This program will determine whether a password meets all security requirements
import re
print ("Hello, please enter a password between 6 and 12 characters.")
print ("The password may consist of a combination of numbers and letters, but the one of characters (after the first and before the last) must be a # sign.")
is_valid = False
while not is_valid:
password = input("Please enter your password: ")
if (len(password)<6 or len(password)>12):
print('Password is the wrong length')
continue
if not re.search("[a-z]", password):
print('Password missing lowercase letter.')
continue
if not re.search("[0-9]", password):
print('Password missing a number.')
continue
if not re.search("[A-Z]", password):
print('Password missing uppercase letter.')
continue
if re.search("^#", password) or re.search("#$", password):
print('Password cannot begin or end with #.')
continue
print("Valid Password")
is_valid = True
Я думаю, это примерно то, что вы пытаетесь сделать, вы можете улучшить его в соответствии с вашим вариантом использования. В том виде, в каком у вас есть цикл в настоящее время, он будет выполняться только один раз, оператор break завершает цикл, если он соответствует одному из ваших условий. while
Оператор никогда не получает возможности проверить x
переменную, для которой вы установили значение false.
Я изменил цикл, чтобы он неоднократно запрашивал, пока пароль не будет соответствовать указанному вами формату. Вы также можете добавить приглашение выйти или попробовать другой пароль для улучшения пользовательского интерфейса. Я изменил вашу #
проверку, чтобы регулярное выражение проверяло, находится ли оно в начале или в конце пароля.
Также я изменил все ваши условия на if
заявления. Порядок проверки условий важен и потенциально может скрывать ложное условие. Как классическая FizzBuzz
проблема.