通过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 相关文章推荐
python使用socket向客户端发送数据的方法
Apr 29 Python
python使用arcpy.mapping模块批量出图
Mar 06 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
python字典快速保存于读取的方法
Mar 23 Python
Python扩展内置类型详解
Mar 26 Python
使用Python监控文件内容变化代码实例
Jun 04 Python
python list转矩阵的实例讲解
Aug 04 Python
python实现简易动态时钟
Nov 19 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 Python
tensorflow2.0的函数签名与图结构(推荐)
Apr 28 Python
python中封包建立过程实例
Feb 18 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
我的论坛源代码(三)
2006/10/09 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
toString()一个会自动调用的方法
2010/02/08 Javascript
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
js+css3制作时钟特效
2016/10/16 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
jquery dataTable 获取某行数据
2017/05/05 jQuery
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
python判断windows隐藏文件的方法
2014/03/21 Python
python获取mp3文件信息的方法
2015/06/15 Python
常见python正则用法的简单实例
2016/06/21 Python
python模块之time模块(实例讲解)
2017/09/13 Python
如何解决安装python3.6.1失败
2020/07/01 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
三星英国官网:Samsung英国
2018/09/25 全球购物
人力资源专员自我评价怎么写
2013/09/19 职场文书
初中三好学生事迹材料
2014/01/13 职场文书
年终晚会主持词
2014/03/25 职场文书
工程材料采购方案
2014/05/18 职场文书