通过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中输出带颜色的文字的方法
Jun 19 Python
Python内置函数的用法实例教程
Sep 08 Python
Python中getpass模块无回显输入源码解析
Jan 11 Python
详解Tensorflow数据读取有三种方式(next_batch)
Feb 01 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
使用Python对微信好友进行数据分析
Jun 27 Python
在双python下设置python3为默认的方法
Oct 31 Python
python采集百度搜索结果带有特定URL的链接代码实例
Aug 30 Python
Python计算公交发车时间的完整代码
Feb 12 Python
Python调用shell命令常用方法(4种)
May 11 Python
详解numpy1.19.4与python3.9版本冲突解决
Dec 15 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快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
PHP Global变量定义当前页面的全局变量实现探讨
2013/06/05 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
js prototype截取字符串函数
2010/04/01 Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
2013/07/01 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
2018/12/09 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
详细探究Python中的字典容器
2015/04/14 Python
Python实现单词拼写检查
2015/04/25 Python
python检测是文件还是目录的方法
2015/07/03 Python
python字符串对其居中显示的方法
2015/07/11 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
技术人员面试提纲
2013/11/28 职场文书
人力资源总监工作说明
2014/03/03 职场文书
幼儿园大班评语大全
2014/04/17 职场文书
开学典礼策划方案
2014/05/28 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
大学生赌博检讨书
2014/09/22 职场文书
政风行风评议个人心得体会
2014/10/29 职场文书
运动会加油稿50字
2015/07/21 职场文书
篮球拉拉队口号
2015/12/25 职场文书
Win10系统下配置Java环境变量
2021/06/13 Java/Android
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android