通过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使用append合并两个数组的方法
Apr 28 Python
在Python中使用sort()方法进行排序的简单教程
May 21 Python
请不要重复犯我在学习Python和Linux系统上的错误
Dec 12 Python
深入理解Django的自定义过滤器
Oct 17 Python
python针对excel的操作技巧
Mar 13 Python
Python学习小技巧总结
Jun 10 Python
对python cv2批量灰度图片并保存的实例讲解
Nov 09 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
Oct 24 Python
pycharm设置当前工作目录的操作(working directory)
Feb 14 Python
python 元组的使用方法
Jun 09 Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 Python
opencv检测动态物体的实现
Jul 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
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
JS获取select-option-text_value的方法
2013/12/26 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
JavaScript中ES6 Babel正确安装过程
2016/07/18 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
Vue自定义指令详解
2017/07/28 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
JS引用传递与值传递的区别与用法分析
2018/06/01 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
JS实现数据动态渲染的竖向步骤条
2020/06/24 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
Python中最大递归深度值的探讨
2019/03/05 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
python中68个内置函数的总结与介绍
2020/02/24 Python
Python3爬虫里关于代理的设置总结
2020/07/30 Python
电子技术专业中专生的自我评价
2013/12/17 职场文书
酒店拾金不昧表扬信
2014/01/18 职场文书
陈胜吴广起义口号
2014/06/20 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
会计专业自荐书
2014/07/08 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
上课讲话检讨书范文
2015/05/07 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android