```python
import random
参与者的名字和所带礼物
dictGiftIn = {
"杰克": "苹果",
"彼得": "啤酒",
"汤姆": "卡",
"公爵": "娃娃",
"玛丽": "菠萝",
"詹姆斯": "笛",
"蒂娜": "咖啡"
}
构造一个列表存储参与者的名字
people = list(dictGiftIn.keys())
标记自己带来的礼物是否还未分配出去
giftIn = dict(dictGiftIn)
def exchange_gifts(people, giftIn):
while len(giftIn) > 1: 只要还有礼物未分配,就继续交换
p = random.choice(people) 随机选择一个参与者
flag = 0 标记该参与者是否已经拿到自己的礼物
myGift = giftIn.pop(p) 如果该参与者带来的礼物还未分配,则去掉该礼物
if myGift in giftIn: 如果该参与者的礼物还在礼物列表中
flag = 1 标记为已拿到自己的礼物
giftIn[p] = myGift 将自己的礼物放到未分配礼物中
if flag: 如果该参与者已经拿到自己的礼物
giftIn[p] = myGift 将自己的礼物放到未分配礼物中
else:
getGift = giftIn.popitem() 随机返回并移除一对键值
giftIn[p] = getGift 得到的礼物
return dict(giftIn) 返回最终的礼物分配情况
运行交换礼物的程序
final_gift_distribution = exchange_gifts(people, giftIn)
print(final_gift_distribution)
```
这个程序首先定义了一个包含参与者名字和礼物的字典`dictGiftIn`,然后通过一个循环实现礼物的随机交换,直到所有礼物都被分配完毕。在每次循环中,程序会随机选择一个参与者,并检查他是否已经拿到了自己的礼物。如果没有,则从剩余的礼物中随机选择一件给他,并将自己的礼物放到未分配的礼物列表中。如果已经拿到了自己的礼物,则将自己的礼物重新放回未分配的礼物列表中。最后,程序返回最终的礼物分配情况。