(模拟:优惠券收集问题)优惠券收集是一个经典的统计问题,它有很多实际的应用。这个问题
是从一个对象集合里重复取出对象,然后找出要取出所有对象至少一次,需要取多少次。这个
问题的变体是从一副打乱的52张牌中重复取牌,然后找出在看到每种花色一个之前需要取多
少次。假设在选下一个之前取出的牌是要放回去的。编写程序模拟获取四张牌,每张都是不同
花色需要取的次数,然后显示这四张取出的牌(可能牌被取出两次)。下面是程序的示例运行。
Queen of Spades
5 of Clubs
Queen of Hearts
4 of Diamonds
Number of picks:12
import random
SUITS = {0:'Spades', 1:'Hearts', 2:'Clubs', 3:'Diamonds'}
FACES = {1:'Ace', 11:'Jack', 12:'Queen', 13:'King'}
cards = []
draw = 0
while cards == [] or len(suit)!=len(set(suit)):
cards = random.sample(range(52),4)
suit = [i//13 for i in cards]
draw += 1
for i in cards:
num = i%13 + 1
if num == 1 or num > 10: num = FACES[num]
print (f'{num} of {SUITS[i//13]}')
print(f'Number of picks:{draw}')