ich setze mich wieder nach längerer Zeit an Python ran, und mir fiel gleich auf, dass ich die Listen-Abstraktion (List Comprehension) nicht richtig verstehe. Dazu habe ich mir mal ein Beispiel mitgebracht. Beim Anblick dieses Quelltextes habe ich versucht diesen Quelltext gedanklich zu verstehen. Mein Erklärungsversuch seht ihr unten.
Code: Alles auswählen
import re
def password_check(password_prompt):
password_scores = {0:'Horrible', 1:'Weak', 2:'Medium', 3:'Strong', 4:'More Strong', 5:'Very Strong'}
print "password_scores", password_scores
password_strength = dict.fromkeys(['has_upper', 'has_lower', 'has_num', 'has_digit', 'has_symbolic'], False)
print "password_strength",password_strength
if re.search(r'[A-Z]', password_prompt):
has_upper = password_strength['has_upper ='] = True
print "has_upper =", has_upper
if re.search(r'[a-z]', password_prompt):
has_lower = password_strength['has_lower'] = True
print "has_lower =", has_lower
if re.search(r'[0-9]', password_prompt):
has_num = password_strength['has_num'] = True
print "has_num =", has_num
if re.search(r"\d", password_prompt):
has_digit = password_strength['has_digit'] = True
print "has_digit =", has_digit
if re.search(r"[ !#$%&'()*+,-./[\\\]^_`{|}~"+r'"]', password_prompt):
has_symbolic = password_strength['has_symbolic'] = True
print "has_symbolic =", has_symbolic
score = len([b for b in password_strength.values() if b])
print "Score", score
print ('Password is %s' % password_scores[score])
return (password_scores[score])
password = raw_input('Password: ... ')
pwd_chk = password_check(password)
print pwd_chk
Soweit ich weiß, besteht eine List Comprehension grundlegend aus einem Ausdruck, gefolgt von beliebig vielen for/in-Bereichen und von eventuellen Bedingungen. Die Bedingungen sind aber optional. Allgemein weiß ich, dass sich der for/in-Bereich einer List Comprehension der for-Schleife syntaktisch ähnelt. Soweit die Theorie.
Nun versuche ich folgenden Ausdruck in Worten zu fassen:
Code: Alles auswählen
score = len([b for b in password_strength.values() if b])
Habe ich das richtig formuliert oder etwas übersehen oder gar falsch formuliert?