通过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中urllib2模块的8个使用细节分享
Jan 01 Python
python持久性管理pickle模块详细介绍
Feb 18 Python
简单分析Python中用fork()函数生成的子进程
May 04 Python
Python基于smtplib实现异步发送邮件服务
May 28 Python
Python socket实现简单聊天室
Apr 01 Python
python 基本数据类型占用内存空间大小的实例
Jun 12 Python
对python判断是否回文数的实例详解
Feb 08 Python
Python应用实现处理excel数据过程解析
Jun 19 Python
Python中三维坐标空间绘制的实现
Sep 22 Python
python中pivot()函数基础知识点
Jan 03 Python
手把手教你怎么用Python实现zip文件密码的破解
May 27 Python
4种方法python批量修改替换列表中元素
Apr 07 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_MySQL教程-第一天
2007/03/18 PHP
PHP中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
一个PHP的QRcode类与大家分享
2011/11/13 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
PHP图片水印类的封装
2017/07/06 PHP
jquery 表单取值常用代码
2009/12/22 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
vue.js中父组件调用子组件的内部方法示例
2017/10/22 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
python实现按行切分文本文件的方法
2016/04/18 Python
python数据结构之链表的实例讲解
2017/07/25 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
python系列 文件操作的代码
2019/10/06 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
二手房购房协议书范本
2014/10/05 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android