Seite 1 von 1
Wie programmiere ich sowas?
Verfasst: Donnerstag 11. September 2008, 20:25
von __marcus__
Code: Alles auswählen
for result in cursor:
if result[1] == 0:
print >>handle_2, '<span class="no">' + result[0] + '</span>' + ' ',
elif result[1] <= 3:
print >>handle_2, '<span class="low">' + result[0] + '</span>' + ' ',
elif result[1] <= 6:
print >>handle_2, '<span class="medium">' + result[0] + '</span>' + ' ',
elif result[1] <= 9:
print >>handle_2, '<span class="high">' + result[0] + '</span>' + ' ',
else:
print >>handle_2, '<span class="top">' + result[0] + '</span>' + ' ',
Ich hab heute das hier geschrieben. Kann man sowas in Python auch in 2-3 Zeilen schreiben??
Re: Wie programmiere ich sowas?
Verfasst: Donnerstag 11. September 2008, 20:43
von Hyperion
ok, hab die classes übersehen.
Verfasst: Donnerstag 11. September 2008, 20:48
von BlackVivi
http://paste.pocoo.org/show/85040/
^___^
Naja, ob das wirklich was bringt... Find deins eigentlich schon schön so

Verfasst: Donnerstag 11. September 2008, 21:21
von BlackJack
Keine 2-3 Zeilen, aber nicht so viele Wiederholungen (ungetestet):
Code: Alles auswählen
classes = ['no', 'low', 'medium', 'high', 'top']
for row in cursor:
for limit, cls in ((i * 3, cls) for i, cls in enumerate(classes[:-1])):
if row[1] <= limit:
break
else:
cls = classes[-1]
print >>handle_2, '<span class="%s">%s</span> ' % (cls, row[0])
Allerdings solltest Du sicher sein, dass ``row[0]`` nichts enthalten kann, was das HTML kaputt macht. Ausserdem würde ich über ein Templating-System nachdenken.
Verfasst: Freitag 12. September 2008, 07:50
von __marcus__
Danke, für die Tipps, aber ich schätze, es bleibt dann erstmal so "schön"
Verfasst: Freitag 12. September 2008, 13:09
von snafu
Mein Vorschlag:
Code: Alles auswählen
def make_class(res):
if res == 0:
return 'no'
results = [3, 6, 9]
classes = {3 : 'low', 6 : 'medium', 9 : 'high'}
for result in results:
if res <= result:
return classes[result]
return 'top'
>>> result = ('bla', 4)
>>> print '<span class="%s">%s</span> ' % (make_class(result[1]), result[0])
<span class="medium">bla</span>
Verfasst: Freitag 12. September 2008, 14:29
von Y0Gi
Mit dem
bisect-Modul sollte ich das wirklich auf 3-6 Zeilen runterbrechen lassen. Wer ist mal eben so frei?
Verfasst: Freitag 12. September 2008, 14:52
von Y0Gi
OK, hier mal eine etwas ausführlichere Version:
Code: Alles auswählen
from bisect import bisect_left
classes = (
('no', 0),
('low', 3),
('medium', 6),
('high', 9),
('top', 100),
)
# alternativ via `operator.itemgetter`
thresholds = [value for name, value in classes]
for row in cursor:
index = bisect_left(thresholds, row[1])
class_name = classes[index][0]
print >>handle_2, '<span class="%s">%s</span> ' % (class_name, row[0]),
Mit Gewalt bekommt man das aber in drei Zeilen ohne Verwendung eines Semikolons
Code: Alles auswählen
from bisect import bisect_left
classes = (('no', 0), ('low', 3), ('medium', 6), ('high', 9), ('top', 100))
for row in cursor: print >>handle_2, '<span class="%s">%s</span> ' % (classes[bisect_left((value for name, value in classes), row[1])][0], row[0]),