2014-06-16 41 views
11

Enum üzerinde random.choice kullanmak istiyorum.python 3.4: random.choice üzerindeki Enum

Denedim:

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

Ama bu kod çalışmıyor, bunu nasıl yapabilirim? Eğer 0 ile len(Foo) arasında bir dizin almaya çalışır random.choice(), onu geçemez böylece

+1

bu kod yapmak bekliyorsunuz ne olacak? –

+0

Bunu okudunuz mu: https://mail.python.org/pipermail/python-ideas/2013-October/023673.html – jonrsharpe

+2

@jonrsharpe: bu gönderi, "random.choice()" ifadesinin alınması için belgeleniyor. sıra *, yinelenen değil. “Enum” yinelenebilir, ancak bir sıra değil. Tamsayılarla * indekslemeyi desteklemez *. Ayrıca, [Nick'in yanıtı] bölümüne bakın (https://mail.python.org/pipermail/python-ideas/2013-October/023675.html). –

cevap

22

Bir Enum, bir dizisi değildir. Bir sözlük gibi, bir Enum dizin erişimi, numaralarının numaralarına geçirilmesini bekler, böylece Foo[<integer>]KeyError ile burada başarısız olur.

Önce bir listeye yayınlayabilmek için:

bar = random.choice(list(Foo)) 

Bunun nedeni Enumdoes support iteration çalışır.

Demo:

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

Aynı hataya bir çözüm aramaya geldim. Yaklaşmak istedim. Gerçekleştirmiştim zaten çoktan oymuştum. Daha sonra aynı pythonda aynı pythonda aynı ihtiyacı için aynı oyuncuya uygulamış olduğumu farkettim ... Sadece bir kez daha yapabilirim. –