通过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中ConfigParse模块的用法
Sep 29 Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 Python
python实现下载文件的三种方法
Feb 09 Python
python读取csv文件并把文件放入一个list中的实例讲解
Apr 27 Python
django 控制页面跳转的例子
Aug 06 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
pytorch 求网络模型参数实例
Dec 30 Python
Pytorch 实现focal_loss 多类别和二分类示例
Jan 14 Python
Python直接赋值及深浅拷贝原理详解
Sep 05 Python
Jupyter Notebook内使用argparse报错的解决方案
Jun 03 Python
Python 匹配文本并在其上一行追加文本
May 11 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中利用XML技术构造远程服务(上)
2006/10/09 PHP
PHP 存取 MySQL 数据库的一个例子
2006/10/09 PHP
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
VUE实现日历组件功能
2017/03/13 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
Python实现图像几何变换
2015/07/06 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
2019/05/23 Python
Python中的asyncio代码详解
2019/06/10 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
外贸采购员岗位职责
2014/03/08 职场文书
出纳会计岗位职责
2014/03/12 职场文书
小区文明倡议书
2014/05/16 职场文书
火锅店的活动方案
2014/08/15 职场文书
课外科技活动总结
2014/08/27 职场文书
2015年公司新年寄语
2014/12/08 职场文书
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL