n个人随机交换礼物,自己不能跟自己交换
使用随机函数来完成随机交换,且保证自己不跟自己交换
import random
#定义一个字典,0~6代表不同编号的人,A~G代表编号人员对用的礼物
#定义gift_init是方便核查自己有没有跟自己交换礼物
gift_init={'0':'A','1':'B','2':'C','3':'D','4':'E','5':'F','6':'G'}
gift={'0':'A','1':'B','2':'C','3':'D','4':'E','5':'F','6':'G'}
ls=list(gift.keys()) #获取字典键集合,转为列表,方便使用pop()方法
for g in gift.keys():
cur_gift=gift.get(g) #获取第一个编号对应的礼物
ls.pop(0) #将当前编号从键列表中删除
if ls!=[]: #遍历到最后一个编号时,该编号不用交换礼物了
random_gift_index=random.randint(0,len(ls)-1) #在剩余键列表中随机选取一个编号和当前编号交换礼物
exchange_gift_key=ls[random_gift_index]
gift[g]=gift[exchange_gift_key]
gift[exchange_gift_key]=cur_gift
for g in gift.keys():
print(g,gift_init.get(g),gift.get(g))
是用集合的pop()方法来完成随机交换,且保证自己不跟自己交换
#定义一个字典,0~6代表不同编号的人,A~G代表编号人员对用的礼物
#定义gift_init是方便核查自己有没有跟自己交换礼物
people_gift_0={'1':'a','2':'b','3':'c','4':'d'}
people_gift={'1':'a','2':'b','3':'c','4':'d'}
gift={'a','b','c','d'}
for p in people_gift.keys():
cur_gift=people_gift.get(p)
gift.discard(cur_gift) #这里使用discard方法删除已经交换过的礼物不会报错,使用remove方法会报错
people_gift[p]=gift.pop() #随机删除集合中的一个元素,并返回该值
gift.add(cur_gift)
for p in people_gift.keys():
print(p,people_gift_0.get(p),people_gift.get(p))