蒙特卡洛可能會讓人困惑 - 至少對我而言。我的第一步是嘗試可以生成三張樣本的代碼。我設置N
至10
for n in range(N):
sample = [random.choice(cards) for _ in range(3)]
print (sample)
輸出是這樣的。顯然,這並不能保證我成功,但看起來代碼有可能產生所有可能性。如果我有任何擔憂,我可以嘗試增加N
。
['Jack', 'Jack', 'King']
['Jack', 'Ace', 'Ace']
['Ace', 'Ace', 'Jack']
['Ace', 'Queen', 'Ace']
['Ace', 'King', 'King']
['King', 'Jack', 'King']
['Queen', 'King', 'Ace']
['Queen', 'Queen', 'Queen']
['King', 'Jack', 'Ace']
['Jack', 'Jack', 'King']
你想統計唯一。這可以通過將samples
轉換爲set
並取其len
來完成。計算平均值很容易。
unique_count = 0
for n in range(N):
sample = [random.choice(cards) for _ in range(3)]
unique_count += 1 if len(set(sample))==1 else 0
print(unique_count)
字典是不是一個壞的地方保持計數。在循環外初始化它,然後增加條目。
import random
cards=["King", "Queen", "Jack", "Ace"]
N = 100000
unique_count = 0
card_counts = {_: 0 for _ in cards}
for n in range(N):
sample = [random.choice(cards) for _ in range(3)]
unique_count += 1 if len(set(sample))==1 else 0
for s in sample:
card_counts[s]+=1
print(unique_count)
total = 0
for s in cards:
total += card_counts[s]
print (s, card_counts[s])
print (total)
當我在試驗時,我經常嘗試越來越大的N值,希望看到收斂。
在循環中,您將希望獲得樣本的[unique count](https://stackoverflow.com/search?q=python+list+unique+count),檢查它是否等於3,並添加到計數變量。 –
'random.sample'選擇*無替換*。如果你有Python 3.6(或更新),請參閱'random.choice'。 [Documentation](https://docs.python.org/3/library/random.html#functions-for-sequences) – rici
@rici:如果你沒有3.6,只實現統一版本的random.choice '是微不足道的。 –