Risolto Programma per validare password

--- Ra ---

Utente Emerald
24 Dicembre 2021
832
21
505
371
Buongiorno ragazzi, stavo provando a scrivere un programma in Python, molto basilare, per la verifica delle password. In particolare, data una stringa, se la lunghezza di questa è almeno di 7 caratteri, ha almeno 2 caratteri speciali ('!', '#', '*', '@', '&', '%') e contiene almeno 2 numeri il programma stampa "Forte". Se queste condizioni vengono meno, il programma stampa "Debole". Ho scritto il codice e funziona. Volevo avere qualche consiglio da parte vostra per renderlo più compatto, in particolare volevo sapere se ci fosse qualche metodo alternativo per abbreviare la funzione che verifica i caratteri speciali. Avevo pensato di conteggiarli nella password, come già faccio, per aggiungerli ad una lista e poi usare la funzione sum(), al posto di fare la somma dei singoli conteggi. Cosa ne pensate? Di seguito il codice:
Python:
# PASSWORD VALIDATOR made by CrazyMonk

def verifyLength(str):
    if (len(str) < 7):
        return False
    else:
        return True

def verifySpecialChars(str):
    esclamativi = str.count('!')
    chiocciole = str.count('@')
    cancelletti = str.count('#')
    dollari = str.count('$')
    percento = str.count('%')
    eCommerciali = str.count('&')
    asterischi = str.count('*')
    sommaCaratteri = esclamativi + chiocciole + cancelletti + dollari + percento + eCommerciali + asterischi
   
    if (sommaCaratteri >= 2):
        return True
    else:
        return False
   
def verifyNumbers(str):
    sum = 0
    for i in str:
        if i.isdigit():
            sum = sum +1
    if (sum < 2):
        return False
    else:
        return True
   
   
password = input();

if (verifyLength(password) and verifySpecialChars(password) and verifyNumbers(password)):
    print("Strong")
else:
    print("Weak")
 
in particolare volevo sapere se ci fosse qualche metodo alternativo per abbreviare la funzione che verifica i caratteri speciali.
Puoi creare una funzione che restituisce True/False se un carattere è speciale e poi fare la stessa cosa che fai con isdigit. Io farei una cosa del genere:
Python:
def isspecial(c):
    return c in ['!', '#', '*', '@', '&', '%']

def isstrong(password):
    return 7 <= len(password)                       \
       and 2 <= sum(isspecial(c) for c in password) \
       and 2 <= sum(c.isdigit() for c in password)

password = input()
print("Strong" if isstrong(password) else "Weak")
 
  • Love
Reazioni: --- Ra ---
Puoi creare una funzione che restituisce True/False se un carattere è speciale e poi fare la stessa cosa che fai con isdigit. Io farei una cosa del genere:
Python:
def isspecial(c):
    return c in ['!', '#', '*', '@', '&', '%']

def isstrong(password):
    return 7 <= len(password)                       \
       and 2 <= sum(isspecial(c) for c in password) \
       and 2 <= sum(c.isdigit() for c in password)

password = input()
print("Strong" if isstrong(password) else "Weak")
Grazie tante @St3ve, mi era sfuggita questa soluzione. Ti si vuole bene. 😀