私はあなたとの意志の詳細は後で
from random import random
from math import floor
class FairDice():
def __init__(self, sides = 6):
self.sides = sides
self.history = []
self.last = None
def roll(self):
number = random()
roll = int(floor(number * self.sides)) + 1
return roll
def statefull_roll(self, remember = None):
while True:
roll = self.roll()
remember = self.sides if remember is None else remember
if len(self.history) >= remember:
return None
if roll not in self.history:
self.history.append(roll)
return roll
def forget_history(self):
self.history = []
def forget_one(self):
self.history = self.history[1:]
私はこのFairDice
クラスを作成しました使い方をかなり単純なクラスを書いたrandom.randrange
を選択している必要があります。 .roll()
関数を呼び出すことによって、定期的なロールを行うことができます。または、statefull_roll()
メソッドを呼び出すことで、ロールされたものを覚えているロールを実行できます。数字がない場合、Noneが返されます。履歴を忘れるようにforget_history()
関数を呼び出すこともできます。
dice = FiarDice(25) #creates a 25 sided dice
for x in range(10):
print("Regular Roll gives you: ", dice.roll())
for x in range(25):
print("Your sort of Roll gives you: ", dice.statefull_roll())
print (dice.statefull_roll()) # Should return none after exhausting all possible characters.
dice.forget_history() # forgets that any value have been recorded at all
それは5つのロールの後に文字を繰り返すように大丈夫だと言うことができます:ここで
は使い方の一例です。私は
none
を追加しました。
roll = dice.statefull_roll(remember = 5)
これは、あなたがしなければならないすべては...
if roll is None:
dice.forget_one()
roll = dice.statefull_roll(remember = 5)
forget_one
はあなたの最も古いロールを忘れされた後、5つのロールの後にNoneを返します。
私が書いたことはそれほどではありませんが、動作し、ゲームでの使用に十分柔軟です。
[shuffling-a-list-of-object-in-python](http://stackoverflow.com/questions/976882/shuffling-a-list-of-objects-in-python)助けてもらえるかもしれない –
http: //stackoverflow.com/questions/306400/how-do-i-randomly-select-an-item-from-a-list-using-python –
[N個のアイテムを不特定の長さのシーケンスからランダムに選択]の可能な複製http://stackoverflow.com/questions/9690009/pick-n-items-at-random-from-sequence-of-unknown-length) – frlan