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
kleine if -Abfrage mit drei Optionen elegant gestalten?!
Code: Alles auswählen
if wert in [2007, 2008, 2009]:
pass
if 2007 <= wert <= 2009:
pass
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:
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.
Ich sehe einen Widerspruch zwischen deiner Problembeschreibung und dem Code. Meinst du so etwas?
Code: Alles auswählen
if jahr in [2007, 2008, 2009]:
print "jahr ist drin"
Code: Alles auswählen
if 2006 < jahr < 2010:
print "jahr ist drin"
Code: Alles auswählen
if jahr == 2007:
print "2007"
elif jahr == 2008:
print "2008"
elif jahr == 2009:
print "2009"
else:
print "nix"
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 :)
Stefan
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")
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")()
Das Leben ist wie ein Tennisball.
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Noch ein paar mehr Features, und du kannst es als Teil von PEAK veröffentlichen...
Hallo christine
Hier noch zwei abstrakte Varianten:
Gruss wuf
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)
Take it easy Mates!