@DasIch: random.sample hat keine Wiederholungen, ist also falsch.
@mp1337: Dass man keine Abkürzungen verwenden sollte, gilt auch für Module, pgen -> password_generator.
Außer bei None und wenn man wirklich die Objektgleichheit testen will, nimmt man ›is‹, für alle anderen Fälle ist das ein Fehler und == das richtige. Nur bei True braucht man gar nichts, bei False nimmt man ›not‹.
An eine Variable sollte man immer nur einen Typ binden, nicht mal einen Wahrheitswert und dann einen String.
Code: Alles auswählen
def generate_password(password_length=10, letters=False, digits=False, special=False):
"""Generating strong random passwords using
ASCII_LETTERS, DIGITS and SPECIAL_CHAR.
int for password length. default len of
10 characters.
"""
characters = ""
if letters:
characters += ASCII_LETTERS
if digits:
characters += DIGITS
if special:
characters += SPECIAL_CHAR
if not characters:
characters = ASCII_LETTERS + DIGITS + SPECIAL_CHAR
return "".join(random.choices(characters, k=password_length))
In `main`: os.system sollte man schon lange nicht mehr verwenden, und ein clear nervt nur jeden, der ein Konsolenprogramm startet. Also einfach weglassen.
`password_len` ist eine Zahl und damit niemals ein leerer String.
Code: Alles auswählen
def main():
"""Generate Password on module start"""
try:
password_length = int(input("# Password length: "))
except ValueError:
print("Input must be INTEGER, using default Values")
password_length = 10
print(generate_password(password_length))