【n个人随机交换礼物,自己不能跟自己交换】

这段代码展示了如何使用Python的random模块实现一个n个人随机交换礼物的算法,确保每个人不会跟自己交换。通过字典和列表操作,实现了在剩余礼物中随机选取进行交换的功能。示例中分别使用了字典和集合两种数据结构进行演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值