通过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的Twisted框架实现一个简单的服务器
Apr 16 Python
将Python代码嵌入C++程序进行编写的实例
Jul 31 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
Python科学计算之NumPy入门教程
Jan 15 Python
python批量复制图片到另一个文件夹
Sep 17 Python
情人节快乐! python绘制漂亮玫瑰
Aug 18 Python
Python中使用遍历在列表中添加字典遇到的坑
Feb 27 Python
python如何制作缩略图
Apr 30 Python
python如何解析配置文件并应用到项目中
Jun 27 Python
Django使用中间件解决前后端同源策略问题
Sep 02 Python
Python shutil模块用法实例分析
Oct 02 Python
Python天气语音播报小助手
Sep 25 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
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
ZendFramework2连接数据库操作实例
2017/04/18 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
QUnit jQuery的TDD框架
2010/11/04 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
jquery获取链接地址和跳转详解(推荐)
2017/08/15 jQuery
浅谈React之状态(State)
2018/09/19 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
Python中unittest用法实例
2014/09/25 Python
python fabric使用笔记
2015/05/09 Python
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
Python中字典(dict)合并的四种方法总结
2017/08/10 Python
python实现维吉尼亚算法
2019/03/20 Python
Python3中函数参数传递方式实例详解
2019/05/05 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
Python Tkinter实例——模拟掷骰子
2020/10/24 Python
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
阿巴庭院:Abba Patio
2019/06/18 全球购物
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
旅游管理专业大学生职业规划书
2014/02/27 职场文书
知识竞赛主持词
2014/03/26 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
信用卡催款律师函
2015/05/27 职场文书
工作年限证明范本
2015/06/15 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server