礼物匹配程序可以通过以下步骤实现:
构造数据结构
使用二维列表或字典来存储参与者的名字和所带礼物。
随机选择礼物
使用`random.choice()`方法从未分配的礼物中随机选择一份礼物。
分配礼物
将选中的礼物分配给当前参与者,并将该礼物从未分配的礼物列表中移除。
如果当前参与者带来的礼物还未分配,则将其重新放回未分配的礼物列表中。
输出结果
打印出礼物分配的最终结果。
```python
import random
构造字典存储参与者的姓名和礼物
dictGiftIn = {
"杰克": "苹果",
"彼得": "啤酒",
"汤姆": "卡",
"公爵": "娃娃",
"玛丽": "菠萝",
"詹姆斯": "笛",
"蒂娜": "咖啡"
}
dictGiftOut = {}
persons = list(dictGiftIn.keys())
for p in persons:
flag = 0 标记自己带来的礼物是否还未分配出去
if p in dictGiftIn:
flag = 1
myGift = dictGiftIn.pop(p) 如果自己带来的礼物还未分配,则去掉该礼物
getGift = dictGiftIn.popitem() 随机返回并移除一对键值
dictGiftOut[p] = getGift 得到的礼物
if flag:
dictGiftIn[p] = myGift 将自己的礼物添到未分配礼物中
print(dictGiftOut) 输出礼物分配情况
```
代码解释:
构造数据结构
`dictGiftIn`:存储参与者的名字和所带礼物。
`dictGiftOut`:存储交换后的结果。
`persons`:参与者的名字列表。
随机选择礼物
`getGift = dictGiftIn.popitem()`:从`dictGiftIn`中随机移除并返回一对键值。
分配礼物
如果当前参与者带来的礼物还未分配(`flag == 1`),则将其重新放回`dictGiftIn`。
将选中的礼物分配给当前参与者,并记录在`dictGiftOut`中。
输出结果
打印`dictGiftOut`,显示礼物分配的最终结果。
这个程序可以确保每个参与者都能获得一个礼物,并且不会拿到自己的礼物。