2014-06-16 12 views
11

पर random.choice मैं Enum पर random.choice का उपयोग करना चाहता हूं।पायथन 3.4: Enum

मैंने कोशिश की:

class Foo(Enum): 
    a = 0 
    b = 1 
    c = 2 
bar = random.choice(Foo) 

लेकिन इस कोड काम नहीं कर रहा, मैं यह कैसे कर सकते हैं?

+1

क्या आप इस कोड को करने की उम्मीद करते हैं? –

+0

क्या आपने इसे पढ़ा है: https://mail.python.org/pipermail/python-ideas/2013- अक्टूबर/023673.html – jonrsharpe

+2

@jonrsharpe: उस पोस्ट को याद आती है कि 'random.choice()' को * अनुक्रम *, एक पुनरावृत्त नहीं है। 'एनम' इष्टतम है, लेकिन एक अनुक्रम नहीं है। यह * पूर्णांक * द्वारा अनुक्रमण * का समर्थन नहीं करता है। यह भी देखें [निक द्वारा प्रतिक्रिया] (https://mail.python.org/pipermail/python-ideas/2013- अक्टूबर 0227575.html)। –

उत्तर

22

एक Enum ताकि आप इसे random.choice(), जो 0 और len(Foo) के बीच एक सूचकांक लेने की कोशिश करता है के लिए पारित नहीं हो सकता, एक अनुक्रम नहीं है। एक शब्दकोश की तरह, Enum पर सूचकांक पहुंच की गणना नाम नामित होने की अपेक्षा करता है, इसलिए Foo[<integer>]KeyError के साथ यहां विफल रहता है।

आपको सबसे पहले एक सूची में डाली कर सकते हैं:

bar = random.choice(list(Foo)) 

यह काम करता है क्योंकि Enumdoes support iteration

डेमो:

>>> from enum import Enum 
>>> import random 
>>> class Foo(Enum): 
...  a = 0 
...  b = 1 
...  c = 2 
... 
>>> random.choice(list(Foo)) 
<Foo.a: 0> 
+0

यहां एक ही त्रुटि के समाधान की तलाश में आया था। ऊपर उठाना चाहता था। मुझे पता चला कि मैं पहले ही उभरा था। तब एहसास हुआ कि मैंने उसी पायथन फ़ाइल में एक ही जरूरत के लिए उसी जगह पर एक ही कलाकार लगाया था ... केवल एक बार ऊपर उठा सकता है। –

संबंधित मुद्दे