Seite 1 von 1

Ist das ein guter Code?

Verfasst: Dienstag 20. Oktober 2020, 14:43
von MaximalMax
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

Re: Ist das ein guter Code?

Verfasst: Dienstag 20. Oktober 2020, 14:53
von Sirius3
Benutze keine Abkürzungen. random.choices hat einen Parameter k so dass die for-Schleife hinfällig wird.

Re: Ist das ein guter Code?

Verfasst: Dienstag 20. Oktober 2020, 14:54
von __blackjack__
@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)))

Re: Ist das ein guter Code?

Verfasst: Dienstag 20. Oktober 2020, 15:25
von Sirius3
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)

Re: Ist das ein guter Code?

Verfasst: Dienstag 20. Oktober 2020, 19:45
von snafu
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="")