Seite 1 von 1
eleganterer Vergleich zweier integer-Zahlen mit cmp ?
Verfasst: Freitag 9. Oktober 2009, 19:45
von HorstJENS
liebe Python-Gurus,
habe eine etwas behäbige Lösung für folgendes Problem und suche eine elegantere Lösung (Einzeiler?).
Problem: 2 integerzahlen a und b sind gegeben, ich möchte dazwischen
ein "<", ">" oder ein "=" Zeichen setzten, je nachdem ob a kleiner, größer oder gleich b ist.
meine Lösung:
Code: Alles auswählen
def pfeil(a,b):
if a == b:
return "="
elif a > b:
return ">"
else:
return "<"
a = 80
b = 70
z = pfeil(a,b)
print("%i %s %i" % (a, z, b))
Frage: geht das auch eleganter, z.B. direkt in der Print Zeile ?
vielen Dank im Voraus !
Re: eleganterer Vergleich zweier integer-Zahlen mit cmp ?
Verfasst: Freitag 9. Oktober 2009, 19:51
von bords0
HorstJENS hat geschrieben:liebe Python-Gurus,
habe eine etwas behäbige Lösung für folgendes Problem und suche eine elegantere Lösung (Einzeiler?).
Problem: 2 integerzahlen a und b sind gegeben, ich möchte dazwischen
ein "<", ">" oder ein "=" Zeichen setzten, je nachdem ob a kleiner, größer oder gleich b ist.
meine Lösung:
Code: Alles auswählen
def pfeil(a,b):
if a == b:
return "="
elif a > b:
return ">"
else:
return "<"
a = 80
b = 70
z = pfeil(a,b)
print("%i %s %i" % (a, z, b))
Frage: geht das auch eleganter, z.B. direkt in der Print Zeile ?
vielen Dank im Voraus !
ungetestet:
Verfasst: Freitag 9. Oktober 2009, 19:58
von EyDu
Ich finde die erste Lösung aber gar nicht so verkehrt, da sieht man wenigstens sofort was gemeint ist.
Verfasst: Freitag 9. Oktober 2009, 20:23
von snafu
Code: Alles auswählen
def compare(a, b):
operators = {-1: '<', 0: '=', 1: '>'}
return operators[cmp(a, b)]
elegant != das Kürzeste

(imho)
Verfasst: Freitag 9. Oktober 2009, 20:24
von bords0
Weil der OP print() als Funktion benutzt, gehe ich davon aus, dass er Python 3.x benutzt. Da gibt es cmp() nicht mehr.
Verfasst: Samstag 10. Oktober 2009, 10:05
von HorstJENS
bords0 hat geschrieben:Weil der OP print() als Funktion benutzt, gehe ich davon aus, dass er Python 3.x benutzt. Da gibt es cmp() nicht mehr.
Ich habe das Beispiel mit Python2.6 gemacht, die Klammern bei print da ich demnächst umstellen will auf Python3.x
Danke für die tollen Lösungen !
Verfasst: Samstag 10. Oktober 2009, 14:06
von BlackJack
@HorstJENS: Deswegen sollte man IMHO aber keine unnötigen Klammern setzen, die a) verwirren, und b) nur funktionieren, wenn man keine "Ausgabeliste" mit Kommas hinter dem Schlüsselwort ``print`` hat. ``print`` sollte problemlos von 2to3.py in die neue Syntax umgesetzt werden können.
Verfasst: Samstag 10. Oktober 2009, 14:48
von Defnull
Das geht noch noch kürzer
Verfasst: Samstag 10. Oktober 2009, 15:43
von HorstJENS
Das geht noch noch kürzer
genial
Verfasst: Samstag 10. Oktober 2009, 19:31
von bords0
HorstJENS hat geschrieben:Das geht noch noch kürzer
genial
Das ist das die gleiche Lösung wie in der allerersten Antwort, bis auf den Einsatz von cmp - wenn du aber sogar print umstellst (und die unterschiedliche Semantik in 2.6/3.x in Kauf nimmst!), willst du doch auch kein cmp mehr...