Программа для запроса пароля

#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 or pass для первых 5.

2. Вы также можете рассмотреть возможность использования getpass пакета Python для запроса ввода пароля, скрывая сами символы: docs.python.org/3/library/getpass.html

3. Я думаю, вы просто не указали действительные пароли, достаточно забавно. Когда я ввожу пароль, 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 проблема.