Как запросить заглавную букву и число для входной строки в python? - PullRequest
0 голосов
/ 30 января 2020
password = input(str("Please enter a password with a capital letter and a number: "))
for char in password:
    if password.islower() and "1234567890" not in password:
        print("Your password will need to have at least one number and at least one capitalized letter")
        password = input("Please enter another password: ")

** Фраза ошибки будет напечатана, если пароль введен без номера или заглавной буквы, но если заглавная буква используется во вводе, строка ошибки не запускается, даже если во вводе по-прежнему отсутствует число. То же самое, если на входе есть номер, но не заглавная буква. Я хочу, чтобы и заглавная буква, и число требовались для ввода, как вы, вероятно, можете сказать. Спасибо.

редактировать: я не хочу знать, как сделать программу требования пароля. Я специально хочу знать, почему «а не» не работает. **

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Я только что случайно написал это вчера. Сезон по вкусу: -)

import re
import getpass
while True:
    pwd = getpass.getpass('please enter a password: ')
    if len(pwd) >= 8 and re.search('[0-9]', pwd) and re.search('[A-Z]', pwd):
        if pwd != getpass.getpass('please reenter password: '):
            print('passwords do not match')
        else:
            break
    else:
        print('passwords must contain 8 characters and at least one uppercase letter and one digit')

print('approved pwd:', pwd)
0 голосов
/ 30 января 2020

Я специально хочу знать, почему "а не" не работает .

"1234567890" not in password

- это отрицание "1234567890" in password, которое для password проверяется как str если "1234567890" это подстрока из password. Учтите, что:

print("123" in "123123123")  # True
print("123" in "1")  # False
print("123" in "321")  # False

Чтобы проверить, присутствует ли какой-либо символ из одного str во втором str, вы можете проверить, не является ли пересечение пустым - просто поверните второй str в set, получите пересечение с первым и использование функции bool для результата, получая, таким образом, True, если хотя бы один из символов первой строки присутствует во втором, а False в противном случае:

x = "1234567890"
y = "sometextandnumber0"
print(bool(set(y).intersection(x)))  # True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...