Analiza podanego hasła - True/False

0

Cześć.
Próbuje zrobić program w stylu "Czy hasło spełnia wymagania"
Musi posiadać dużą literę, liczbę, znak specjalny.
O ile z 2 pierwszymi sobie poradziłem, tak nie mam pomysłu na znak specjalny.
Możecie mi coś doradzić?
Mój aktualny kod:

liczba = False
upper = False
znak = False

haslo = "Babajaka!2"

for i in range(len(haslo)):
    if len(haslo) <7 or len(haslo) >30:
        print("Niepoprawna ilosc znakow")
        break
    if haslo == "password" or haslo == "PASSWORD" or haslo == "Password":
        print("Niepoprawna forma hasla")
        break
    if haslo[i].isdigit() == True:
        liczba = True
    if haslo[i].isupper() == True:
        upper = True


print(f"Czy jest liczba?: {liczba}\n"
      f"Czy jest duży znak?: {upper}\n"
      f"Czy jest znak specjalny?: {znak}")

PS. Tak, wiem, kod jest tragiczny, skupiam się na tym, żeby działał, spełniał wymagania. Nad jakością będę pracować pozniej.

2
    if len(haslo) <7 or len(haslo) >30:
        print("Niepoprawna ilosc znakow")
        break
    if haslo == "password" or haslo == "PASSWORD" or haslo == "Password":
        print("Niepoprawna forma hasla")
        break

Dlaczego to jest w pętli? Jak hasło składa się z ośmiu liter, to osiem razy sprawdzasz jego długość i czy równa się password.
Znak specjalny możesz regexem sprawdzić, a w zasadzie całą tą walidacje można zrobić regexem zamiast pętli.

0

Idąc dalej Twoim rozwiązaniem, można by skorzystać z str.isalnum(), zazwyczaj jeżeli znak nie jest alfanumeryczny i nie jest spacją to jest znakiem specjalnym.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.