通过python实现随机交换礼物程序详解


Posted in Python onJuly 10, 2019

看到了一个面试题,想了两种解法,不知道符不符合要求,记录如下:

题目:有N个人,每人备一个圣诞礼物,现需要写一个程序,随机交互礼物,要求:自己不能换到自己的礼物,用python实现。

方法一:

构造二维列表存储参与者的名字和所带礼物,使用random.choice()随机选择礼物。

import random
 
lsGiftIn = [['Jack','apple'],['June','ball'],['Mary','card'],['Duke','doll'],['James','egg'],['Tina','flute'],['Tom','coffee']]#存储参与者的姓名和自己带来的礼物
lsGiftOut = []#存储交换后的结果
n = len(lsGiftIn)#参与人数
gifts = [i[1] for i in lsGiftIn]#未分配出去的礼物
for x in range(n):
  flag = 0
  person = lsGiftIn[x][0]
  myGift = lsGiftIn[x][1]
  if myGift in gifts:
    flag = 1
    gifts.remove(myGift)
  getGift = random.choice(gifts)#随机分配礼物
  lsGiftOut.append([person,getGift])
  gifts.remove(getGift)
  if flag:
    gifts.append(myGift)
 
print(lsGiftOut)

方法二:

构造字典存储参与者的姓名和礼物,其中姓名为key,礼物为value,使用字典的popitem()方法随机返回礼物。

dictGiftIn = {'Jack':'apple','Peter':'beer','Tom':'card','Duke':'doll','Mary':'pineapple','James':'flute','Tina':'coffee'}
dictGiftOut = {}
persons = list(dictGiftIn.keys())
for p in persons:
  flag = 0#标记自己带来的礼物是否还未分配出去
  if p in dictGiftIn:
    flag = 1
    myGift = dictGiftIn.pop(p)#如果自己带来的礼物还未分配,则去掉该礼物
  getGift = dictGiftIn.popitem()#随机返回并移除一对key-value值
  dictGiftOut[p] = getGift[1]#得到的礼物
  if flag:
    dictGiftIn[p] = myGift#将自己的礼物添到未分配礼物中
 
print(dictGiftOut)#输出礼物分配情况

The End ~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
编写自定义的Django模板加载器的简单示例
Jul 21 Python
TensorFlow神经网络优化策略学习
Mar 09 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
Python3删除排序数组中重复项的方法分析
Jan 31 Python
python实现爬山算法的思路详解
Apr 09 Python
PYTHON EVAL的用法及注意事项解析
Sep 06 Python
安装完Python包然后找不到模块的解决步骤
Feb 13 Python
TensorFLow 数学运算的示例代码
Apr 21 Python
PyTorch在Windows环境搭建的方法步骤
May 12 Python
keras 指定程序在某块卡上训练实例
Jun 22 Python
Python 绘制可视化折线图
Jul 22 Python
FP-growth算法发现频繁项集——构建FP树
Jun 24 Python
Python实现简单的列表冒泡排序和反转列表操作示例
Jul 10 #Python
Python获取好友地区分布及好友性别分布情况代码详解
Jul 10 #Python
Python中的类与类型示例详解
Jul 10 #Python
使用python打印十行杨辉三角过程详解
Jul 10 #Python
python简单实现矩阵的乘,加,转置和逆运算示例
Jul 10 #Python
Python中新式类与经典类的区别详析
Jul 10 #Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 #Python
You might like
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
function foo的原型与prototype属性解惑
2010/11/19 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
浅谈Node.js之异步流控制
2017/10/25 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
js实现简单选项卡功能
2020/03/23 Javascript
vue中axios实现数据交互与跨域问题
2019/05/12 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
Nodejs实现WebSocket代码实例
2020/05/19 NodeJs
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
python 正则式使用心得
2009/05/07 Python
python实现每次处理一个字符的三种方法
2014/10/09 Python
python根据出生日期返回年龄的方法
2015/03/26 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
Pandas分组与排序的实现
2019/07/23 Python
Python如何实现线程间通信
2020/07/30 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
使用Html5中的cavas画一面国旗
2019/09/25 HTML / CSS
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
给物业的表扬信
2014/01/21 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
个人收入证明模板
2014/09/18 职场文书
社区灵活就业证明
2014/11/03 职场文书
工人先进事迹材料
2014/12/26 职场文书
幸福来敲门观后感
2015/06/04 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书