有没有更好的方法用相同的值表示枚举?

2024-10-02 04:28:52 发布

您现在位置:Python中文网/ 问答频道 /正文

class FuzzyTime(Enum):
    morning = 1
    dawn = 2
    noon = 3
    midday = 4
    afternoon = 5
    evening = 6
    sunset = 7
    dusk = 8
    night = 9

在这些情况下,我想代表晨曦;黎明,中午及下午;中午、傍晚、日落、黄昏和;夜是同义词。因此,理想情况下,我想要的是:

class FuzzyTime(Enum):
        morning, dawn = 1
        noon, midday = 2
        afternoon = 3
        evening, sunset, dusk, night  = 6
        

当我使用它时,我想做如下事情:

if MORNING == FuzzyTime.morning:
       pause

这可以匹配“上午”和“下午”黎明。可能吗

编辑: 当我使用它时,我想比较一个字符串是否与其中一个值匹配。假设我的字符串是:

 s = 'morning'
 if s == FuzzyTime.morning or s == FuzzyTime.dawn:
     return get_morning_time(reference_time)

我只是想知道是否有一种方法可以避免编写'if s==或s=='语句。如果可能的话,我想去掉if语句中的'or',但达到同样的效果


Tags: 字符串if情况enumclassmorningnightnoon
3条回答

你的要求有点奇怪,但是,字典怎么样

obj = {
    'morning': 1,
    'dawn': 1,
    'noon': 2,
    'midday': 2,
    'afternoon': 3,
    'evening': 6,
    'sunset': 6,
    'dusk': 6,
    'night': 6
}

然后,您可以使用输入字符串“morning”,例如

str = 'dawn'
is_morning = obj[str] == obj['morning']

我不明白你为什么要使用枚举值。您在字符串和枚举标签之间进行转换时已经遇到了问题。只需定义术语集:

class FuzzyTime():
    MORNING = {"morning", "dawn"}
    MIDDAY = {"noon", "midday"}
    AFTERNOON = {"afternoon"}
    NIGHT ={"evening", "sunset", "dusk", "night"}

从这里开始,只需使用“自然”Python操作符in

for s in ["dawn", "noon", "dusk"]:
    if s in FuzzyTime.MORNING:
        print("I need caffeine.")
    elif s in FuzzyTime.MIDDAY:
        print("I'm ready to solve the world's problems!")

。。。等等

输出:

I need caffeine.
I'm ready to solve the world's problems!

这是否让你使用起来足够简单

你是说像这样的

class FuzzyTime(Enum):
    morning = dawn = 1
    noon = midday = 2
    afternoon = 3
    evening = sunset = dusk = night  = 6

更新:

使用in运算符:

class FuzzyTime:
    morning = 'morning'
    dawn = 'dawn'
    noon = 'noon'
    midday = 'midday'
    afternoon = 'afternoon'
    evening = 'evening'
    sunset = 'sunset'
    dusk = 'dusk'
    night = 'night'

    m_d = [morning, dawn]
    n_m = [noon, midday]
    e_s_d_n = [evening, sunset, dusk, night]
s = 'morning'
if s in FuzzyTime.m_d:
    return get_morning_time(reference_time)

相关问题 更多 >

    热门问题