通过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实用日期时间处理方法汇总
May 09 Python
Python实现Linux中的du命令
Jun 12 Python
django使用html模板减少代码代码解析
Dec 12 Python
Python3生成手写体数字方法
Jan 30 Python
python PyTorch预训练示例
Feb 11 Python
shell命令行,一键创建 python 模板文件脚本方法
Mar 20 Python
基于python的多进程共享变量正确打开方式
Apr 28 Python
Python requests模块实例用法
Feb 11 Python
详解如何设置Python环境变量?
May 13 Python
Python文本处理简单易懂方法解析
Dec 19 Python
python中如何进行连乘计算
May 28 Python
如何设置PyCharm中的Python代码模版(推荐)
Nov 20 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后门URL的防范
2013/11/12 PHP
PHP根据两点间的经纬度计算距离
2014/10/31 PHP
php实现计数器方法小结
2015/01/05 PHP
PHP实现微信对账单处理
2018/10/01 PHP
JavaScript 事件冒泡简介及应用
2010/01/11 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
2012/02/07 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
2016/01/06 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
2016/09/05 Javascript
JavaScript ES6中const、let与var的对比详解
2017/06/18 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
python装饰器使用方法实例
2013/11/21 Python
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
2013/12/04 Python
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
windows10在visual studio2019下配置使用openCV4.3.0
2020/07/14 Python
pytorch中index_select()的用法详解
2021/01/06 Python
adidas泰国官网:adidas TH
2020/07/11 全球购物
单位承诺书格式
2014/05/21 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书
2019求职信大礼包
2019/05/15 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL
vue修饰符.capture和.self的区别
2022/04/22 Vue.js