problembär hat geschrieben:Aus euren Beiträgen habe ich nunmehr gelernt, daß man eure eingebildete Code-Ideologie zugunsten der Freiheit der Gedanken (Art. 5 GG) aktiv bekämpfen muß.
Sehr schwach. Hättest du nicht wenigstens einen
Nazi-Vergleich anstellen können?
problembär hat geschrieben:Deshalb werde ich hier noch weiter auf Anfänger in dieser Weise Einfluß nehmen und dabei noch weniger Zugeständnisse an angebliche Code-Konventionen machen, siehe dazu meine neue Signatur.
Auch schwach. PEP8 hat mit der Diskussion hier überhaupt nichts zu tun. Dort geht es um Formatierungsfragen und Besonderheiten, wie dass man Singleton-Vergleiche mittels "is" statt "==" durchführen sollte, hier aber darum, dass man - wenn man nicht total belämmert ist - die deklarativen Elemente von Python den prozeduralen vorziehen sollte.
problembär hat geschrieben:Code: Alles auswählen
#!/usr/bin/python
# coding: iso-8859-1
l = []
llen = 0
n = 2
while llen < 15:
x = 0
for i in l:
if n % i == 0:
x = 1
break
if x == 0:
l.append(n)
llen += 1
n += 1
for i in range(llen):
print str(i + 1) + ". " + str(l[i])
Ich gebe gerne zu, dass das wie sehr übersichtliches BASIC aus dem Jahr 1986 aussieht. Hier meine Version in Python 3 aus dem Jahr 2011 (die vermutlich schon jemand anders ziemlich genau so gepostet hat - ich hab den Thread nur überflogen):
Code: Alles auswählen
from itertools import count
def primes():
""" eine Generator-Funktion, die die Folge der Primzahlen erzeugt """
ps = [] # gefundene Primzahlen
for n in count(2): # gehe durch alle ganzen Zahlen, beginnend mit der kleinsten Primzahl
if all(n % p for p in ps): # Primzahlen sind ganze Zahlen, die durch keine kleinere Primzahl ohne Rest teilbar sind
ps.append(n) # n ist eine solche Zahl. Wir merken sie uns.
yield n # wir geben sie aus
for i, p in zip(range(1, 16), primes()):
print(i, ':', p)
Das sind 9 Zeilen ausführbarer Code im Vergleich zu deinen 15, mithin nur 60% XLOC.
Succinctness Is Power. Und XLOC korrespondiert statistisch mit der Anzahl der Fehler, wie Les Hatton in
diesem PDF darlegt. Wie übrigens auch die
zyklomatische Komplexität statistisch mit XLOC und Fehler-Anzahl korreliert ist. Die ist bei dir ebenfalls höher, als bei mir.
Die funktionale Zerlegung meines Codes ist auch besser. Das kann man daran sehen, dass eine Analyse des Problems in Pseudo-Code ungefähr sowas ergibt:
Code: Alles auswählen
gib die ersten 15 Primzahlen aus:
erzeuge die Folge der Primzahlen
gib die ersten 15 davon aus
erzeuge Primzahlen:
für jede ganze Zahl n >= 2:
wenn n eine Primzahl ist:
gib n aus
Primzahl-Test:
jede ganze Zahl >= 2, die durch keine kleinere Primzahl ohne Rest teilbar ist, ist prim
Das ist schon sehr nah an meinem Code, aber nicht an deinem.
In specifications, Murphy's Law supersedes Ohm's.