ursprünglich ging es um eine Hausaufgabe der 5. Klasse, für die folgendes gilt:
Code: Alles auswählen
x % 2 = 1
x % 3 = 2
x % 4 = 3
x % 5 = 4
x % 6 = 6
x % 7 = 0
mit 1 <= x < 1000
Nun war mein Ansatz folgender:
Code: Alles auswählen
funcs = [lambda x: x % n == n-1 for n in range(2, 7)]
funcs.append(lambda x: x % 7 == 0)
for i in range(1, 1001):
if all(f(i) for f in funcs):
print(i)
> 35 77 119 161 203 245 287 329 371 413 455 497 539 581 623 665 707 749 791 833 875 917 959
Wenn ich die Lambdas "zu Fuß" generiere, funktioniert die Berechnung.
Offenbar ist das innere ``n`` bei den in der List-Comprehension generierten Lambda-Funktionen bei allen gleich der ``6``. Dies kann man mittels Ausgabe aller Lambda-Ergebnisse ohne das manuelle letzte leicht herausfinden.
Jetzt meine Frage: Wieso?
Ein kurzes googlen ergab, dass ich nicht der erste bin, der das sonderbar findet. Leider ist mir aktuell vollkommen unklar, wieso das nicht funktioniert!
Edit: Ich habe dafür ein Python 3.3.3 benutzt - falls das eine Rolle spiele sollte.