通过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获取Linux系统下的本机IP地址代码分享
Nov 07 Python
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 Python
python读取excel表格生成erlang数据
Aug 26 Python
Python建立Map写Excel表实例解析
Jan 17 Python
有关Python的22个编程技巧
Aug 29 Python
使用selenium模拟登录解决滑块验证问题的实现
May 10 Python
python中web框架的自定义创建
Sep 08 Python
python二进制读写及特殊码同步实现详解
Oct 11 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
Oct 14 Python
Python3创建Django项目的几种方法(3种)
Jun 03 Python
Python3.9.1中使用split()的处理方法(推荐)
Feb 07 Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 12 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二维/三维数组转字符串
2013/09/13 PHP
PHP5多态性与动态绑定介绍
2015/04/03 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
jquery控制左右箭头滚动图片列表的实例
2013/05/20 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
根据配置文件加载js依赖模块
2014/12/29 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
jQuery实现图片下载代码
2019/07/18 jQuery
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
详细介绍Python的鸭子类型
2016/09/12 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
python字符串的index和find的区别详解
2020/06/20 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
知识竞赛主持词
2014/03/26 职场文书
白血病捐款倡议书
2014/05/14 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
MySQL系列之十 MySQL事务隔离实现并发控制
2021/07/02 MySQL
详解Vue的列表渲染
2021/11/20 Vue.js
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python