Python: Как отобразить ошибки в "Создание действительного пароля" и указать, является ли первый символ буквой?

Я пытаюсь создать пароль с типичными требованиями, например, он должен иметь как минимум 1 верхний / нижний регистр и т. Д. Если пароль неверен в соответствии с требованиями, мы должны отобразить ошибки, чтобы пользователь попытался его получить. исправить снова.

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

В конце, если текстовый ввод пользователя будет определен как недопустимый, я должен отобразить его ошибки. Это моя главная проблема сейчас. Код лучше после предложения. Теперь мне просто нужно как-то отобразить ошибки.

Вот как прошел мой код

while True:
   pw = input('Enter password to be tested if valid or not: ')
   correct_length = False
   uc_letter = False
   lc_letter = False
   digit = False
   no_blanks = True
   first_letter = False

   if len(pw) >= 8:
   correct_length = True

   for ch in pw:
      if ch.isupper():
         uc_letter = True

      if ch.islower():
         lc_letter = True

   if pw.isalnum():
      digit = True

   if pw[:1].isalpha():
      first_letter = True

   if not pw.find(' '):
      no_blanks = True


   if correct_length and uc_letter and lc_letter and digit and first_letter and no_blanks:
      valid_pw = True
   else:
      valid_pw = False
      #This is the part where I'm suppose to display the errors if the user gets it wrong. 
      #Initially, in the test for ch. above, I put in an else: with a print statement but because of the for- statement, it prints it out for every single character.


   answer = input('Try another password input? y/n ')
   if answer == 'y'
      answer = True
   else:
      break

2 ответа

Решение

isdigit только возвращается True или же False,

if ch.isdigit():

Если вы хотите проверить, являются ли первые два символа цифрами, сделайте это вне цикла:

if pw[:2].isdigit():
    digit = True
for ch in pw:
    ...

И проверить, есть ли пробелы в строке:

if not pw.find(' '):
    no_blanks = True

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

import string
...
if not any(c in string.whitespace for c in pw):
    no_blanks = True
for ch in pw:
   ...

Для пробела я бы использовал (не забудьте импортировать строку):

import string

for ws in string.whitespace:
    if ws in pw:
        no_blanks = False
        break

Это проверяет все виды пробелов, включая, например, пробел и табуляцию

Для цифр я бы определил dig_count = 0 до вашего цикла.

Внутри цикла:

if ch.isdigit():
    dig_count += 1

После цикла:

if dig_count >= 2:
    digit = True
Другие вопросы по тегам