通过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 相关文章推荐
wxPython中文教程入门实例
Jun 09 Python
盘点提高 Python 代码效率的方法
Jul 03 Python
Python实现批量下载文件
May 17 Python
详解windows python3.7安装numpy问题的解决方法
Aug 13 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
使用Python实现将list中的每一项的首字母大写
Jun 11 Python
Python中变量的输入输出实例代码详解
Jul 28 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
PyCharm导入python项目并配置虚拟环境的教程详解
Oct 13 Python
浅谈tensorflow中张量的提取值和赋值
Jan 19 Python
pandas apply多线程实现代码
Aug 17 Python
python map比for循环快在哪
Sep 21 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
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
JavaScript中Number.NEGATIVE_INFINITY值的使用详解
2015/06/05 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
Python利用ansible分发处理任务
2015/08/04 Python
深入讲解Java编程中类的生命周期
2016/02/05 Python
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
python Celery定时任务的示例
2018/03/13 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
python使用turtle库与random库绘制雪花
2018/06/22 Python
python实现指定文件夹下的指定文件移动到指定位置
2018/09/17 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
python进行参数传递的方法
2020/05/12 Python
python实现简单的tcp 文件下载
2020/09/16 Python
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
怎样声明接口
2014/09/19 面试题
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
博士生入学考试推荐信
2013/11/17 职场文书
大学生实习感言
2014/01/16 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
书香家庭事迹材料
2014/05/09 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
学生实习证明范文
2014/09/28 职场文书
尊师重教主题班会
2015/08/14 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书