Mehr Happy Cyber-Chris noises

Dies ist eine Fortsetzung der Aufgabe “Happy Cyber-Chris noises”.

Story

Sie arbeiten seit einer ganzen Weile für eine Sicherheitsfirma an einer Codebase, für Python-code haben Sie nie Typehints verwendet. Eines Tages stirbt ihr lockerer Chef bei einem Unterwasserabenteuer. Und ausgerechnet Cyber-Chris nimmt seinen Platz ein! Ihnen ist sofort bewusst: Bearbeiten Sie Ihren Python-code nicht sofort, werden sie gefeuert!

Aufgabe

Nun geht es ans eingemachte! Ein Fehler könnten Ihnen ihren Job kosten!

Bearbeiten Sie den Code so, dass via Typehinting jeder Variablen- und Rückgabetyp sofort ersichtlich wird!

# Fehlermeldungen für den Nutzer
message_1 = "Das Passwort ist zu kurz!"
message_2 = "Das Passwort muss min. 3 Buchstaben enthalten!"
message_3 = "Das Passwort muss min. 2 Zahlen enthalten!"
message_4 = "Das Passwort benötigt min. 1 Sonderzeichen!"

# Alle Zahlen, Buchstaben und Sonderzeichen auf der Welt hust hust
numbers = (3, 9, 4, 2)
characters = {"letters": ('W', 'h', 'e', 'a', 't', 'l', 'e', 'y'), "special": ('!', '?', '-', '@')}

# Diese Funktion nimmt ein Passwort, bestehend aus einem String und prüft, ob dieses Passwort sicher ist.
def bad_password_checker(password):
    password_length = len(password)
    if(password_length < 8):
        print(message_1)
        return False

    if(character_counter(password, characters["letters"]) < 3):
        print(message_2)
        return False

    if(number_counter(password) < 2):
        print(message_3)
        return False

    if(character_counter(password, characters["special"]) < 1):
        print(message_4)
        return False

    return True


# Helferfunktionen
def character_counter(password, characters):
    i = 0
    for char in password:
        if char in characters:
            i = i + 1
    return i

def number_counter(password):
    i = 0
    for char in password:
        try:
            if int(char) in numbers:
                i = i + 1
        except:
            continue
    return i

def main():
    if(bad_password_checker("Wheatley!42")):
        print("Stein starkes Passwort!")
    return 0

if __name__ == "__main__":
    main()

Bonus

Damit die Länge der Bonusaufgabe euch nicht erschreckt :P

Tipp

Achtung Spoiler!