Ist das ein guter Code?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
MaximalMax
User
Beiträge: 18
Registriert: Sonntag 3. Mai 2020, 00:51

Ich denke der Sinn des Codes ist selbsterklärend. Ich wollte mal fragen, ob das ein guter Code ist?

Code: Alles auswählen

import random
import string

characters = string.ascii_letters + string.digits
pw_characters = []

for _ in range(15):
  character = random.choice(characters)
  pw_characters.append(character)

password = ''.join(pw_characters)
print(password)
Danke im Vorraus für alle Antworten die ich bekommen werde :D
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Benutze keine Abkürzungen. random.choices hat einen Parameter k so dass die for-Schleife hinfällig wird.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@MaximalMax: Es ist nicht mit vier Leerzeichen pro Ebene eingerückt. Und man sollte keine kryptischen Abkürzungen verwenden. `password_characters` anstelle von `pw_characters`

Lässt sich auf jeden Fall vereinfachen.

Code: Alles auswählen

password_characters = []
for _ in range(15):
    character = random.choice(characters)
    password_characters.append(character)
Man muss `character` nicht an einen Namen binden:

Code: Alles auswählen

password_characters = []
for _ in range(15):
    password_characters.append(random.choice(characters))
Jetzt lässt sich das einfach als „list comprehension“ schreiben:

Code: Alles auswählen

password_characters = [random.choice(characters) for _ in range(15)]
Und das kann man dann auch direkt beim `join()`-Aufruf einsetzen:

Code: Alles auswählen

password = "".join([random.choice(characters) for _ in range(15)])
Und die eckigen Klammern kann man auch weg lassen, weil ein Generatorausdruck statt einer Liste auch ausreicht:

Code: Alles auswählen

password = "".join(random.choice(characters) for _ in range(15))
Und vielleicht auch no `password` weglassen, bleibt insgesamt:

Code: Alles auswählen

#!/usr/bin/env python3
import random
import string

characters = string.ascii_letters + string.digits
print("".join(random.choice(characters) for _ in range(15)))
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Ohne for:

Code: Alles auswählen

#!/usr/bin/env python3
import random
import string

characters = string.ascii_letters + string.digits
password = "".join(random.choices(characters, k=15))
print(password)
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wenn es sich wirklich auf die Bildschirmausgabe beschränkt, dann könnte man sogar join() weglassen:

Code: Alles auswählen

print(*random.choices(characters, k=15), sep="")
Antworten