通过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实现目录树生成示例
Mar 28 Python
跟老齐学Python之模块的加载
Oct 24 Python
详解Python中映射类型的内建函数和工厂函数
Aug 19 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
Jul 02 Python
Python 编码处理-str与Unicode的区别
Sep 06 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 Python
用python 实现在不确定行数情况下多行输入方法
Jan 28 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
tensorflow对图像进行拼接的例子
Feb 05 Python
如何用python反转图片,视频
Apr 24 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
Apr 29 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 字符串操作入门教程
2006/12/06 PHP
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
用Simple Excel导出xls实现方法
2012/12/06 PHP
PHP编程函数安全篇
2013/01/08 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
PHP编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
番茄的表单验证类代码修改版
2008/07/18 Javascript
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
canvas学习之API整理笔记(一)
2016/12/29 Javascript
详解nodejs模板引擎制作
2017/06/14 NodeJs
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
python解析xml文件实例分享
2013/12/04 Python
浅析Python 中整型对象存储的位置
2016/05/16 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
2018/03/23 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
基于Python实现用户管理系统
2019/02/26 Python
python实现弹跳小球
2019/05/13 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
物理教育专业毕业生推荐信
2013/11/03 职场文书
项目工作说明书
2014/07/29 职场文书
SSM VUE Axios详解
2021/10/05 Vue.js
利用Java连接Hadoop进行编程
2022/06/28 Java/Android