Seite 1 von 1
kleine if -Abfrage mit drei Optionen elegant gestalten?!
Verfasst: Dienstag 24. Februar 2009, 10:10
von christine
Hallo,
ich möchte eine Abfrage gestalten die etwas tut, wenn die Eingabe entweder 2007, 2008 oder 2009 entspricht.
Alles was mir einfällt ist sehr umständlich (elif, elif...?!)
datumsabfrage = ['2007', '2008', '2009']
if abfrageErgebnis == datumsabfrage[0]:
print "OK"
-> kann man das schöner machen?!
Danke, Grüße,
Christine
Verfasst: Dienstag 24. Februar 2009, 10:14
von Panke
Code: Alles auswählen
if wert in [2007, 2008, 2009]:
pass
if 2007 <= wert <= 2009:
pass
[/code]
Verfasst: Dienstag 24. Februar 2009, 10:19
von numerix
Hallo christine, willkommen im Forum!
Ich sehe einen Widerspruch zwischen deiner Problembeschreibung und dem Code. Meinst du so etwas?
Falls sicher ist, dass jahr ganzzahlig ist, ginge auch:
Oder ist es das:
Code: Alles auswählen
if jahr == 2007:
print "2007"
elif jahr == 2008:
print "2008"
elif jahr == 2009:
print "2009"
else:
print "nix"
Dann hängt es davon ab, was du im Anweisungsblock vorhast. Auf jeden Fall ließe sich das durch ein dictionary ersetzen. Ob sich das bei drei zu unterscheidenden Möglichkeiten schon lohnt, ist Geschmackssache.
Verfasst: Dienstag 24. Februar 2009, 10:32
von christine
Hey,
vielen Dank für die schnellen Antworten.
Ich währe z.B.: nicht darauf gekommen die Liste direkt in die Abfrage zu
setzen.
Hab auch schon mit Regulären Ausdrücken usw rumprobiert...
mercy
Verfasst: Mittwoch 25. Februar 2009, 16:36
von sma
Manchmal ist es aus sinnvoll, direkt oder indirekt über Directory-Objekte zu dispatchen. Dieses Beispiel passt nicht direkt auf die Aufgabe mit den drei Daten, aber mir war gerade danach :)
Code: Alles auswählen
class Foo:
def a(self): print "A"
def b(self): print "B"
def c(self): print "C"
def dispatch(self, code): getattr(self, code)()
Foo().dispatch("a")
Stefan
Verfasst: Donnerstag 26. Februar 2009, 14:37
von EyDu
Ach, da geht noch einiges ... ^^
Code: Alles auswählen
import functools
def dispatchable(name):
def marker(func):
func.dispatch_name = name
return func
return marker
class NotDispatchable(Exception):
pass
class DispatchableMeta(type):
def __init__(cls, name, bases, dct):
type.__init__(cls, name, bases, dct)
def disp(self, name):
try:
return functools.partial(self.dispatchables[name], self)
except KeyError:
raise NotDispatchable()
dispatchables = {}
for value in dct.itervalues():
try:
dispatchables[value.dispatch_name] = value
except AttributeError:
pass
try:
old = cls.dispatchables
except AttributeError:
old = {}
cls.dispatchables = dispatchables
for key, value in old.iteritems():
if key not in cls.dispatchables:
dispatchables[key] = value
cls.dispatch = disp
class Spam:
__metaclass__ = DispatchableMeta
@dispatchable("eggs")
def la_function(self):
print "eggs"
test = Spam()
test.dispatch("eggs")()
Verfasst: Freitag 27. Februar 2009, 18:46
von birkenfeld
Noch ein paar mehr Features, und du kannst es als Teil von PEAK veröffentlichen...
Verfasst: Freitag 27. Februar 2009, 20:33
von wuf
Hallo christine
Hier noch zwei abstrakte Varianten:
Code: Alles auswählen
year = '2007'
year_check = {
'2007': True,
'2008': True,
'2009': True
}.get(year, False)
print "Jahr-Check", year_check
Code: Alles auswählen
def year_checker(year):
return {
'2007': True,
'2008': True,
'2009': True
}.get(year, False)
year = '2007'
print "Jahr-Check", year_checker(year)
Gruss wuf