私はデコレータを使用することをお勧めします。それはあなたが英雄を通して無限にループすることを可能にします。たとえば:あなたは@except_last_one
コメント場合は、機能を
import random
# In this version heroes are global
HEROES = {'a':10, 'b':20, 'c':30, 'd':40}
def except_last_one(hero_func):
# storage for the last hero
last_hero = [None]
def new_hero():
# define a new hero (but not the last hero)
last_hero[0] = hero_func([k for k in HEROES.keys() if k != last_hero[0]])[0]
return (last_hero[0], HEROES[last_hero[0]])
return new_hero
@except_last_one
def hero(heroes=HEROES.keys()):
hero = random.choice(heroes)
return (hero, HEROES[hero])
得るあなたの機能heroes()
に等しいです。そして、私はたぶんあなたがただ一つのヒーローを持っている場合に例外を追加するでしょう:
try:
last_hero[0] = hero_func([k for k in HEROES.keys() if k != last_hero[0]])[0]
except IndexError:
print 'Sorry, no heroes for you.'
return (None, None)
もしそれがランダムであれば、現在のものが前のものと等しくないという保証はありません。しかし、あなたが戻ってきたアイテムを削除することができます。 – e4c5
値が異なる可能性がある場合は、関数によって返されたすべての値を追跡し、新しく作成されたセットがすでに生成されているかどうかをチェックする必要があります。 – ForceBru