通过python实现随机交换礼物程序详解

  

看到了一个面试题,想了两种解法,不知道符不符合要求,记录如下:

  

有N个人,每人备一个圣诞礼物,现需要写一个程序,随机交互礼物,要求:自己不能换到自己的礼物,用python实现。

  

  

构造二维列表存储参与者的名字和所带礼物,使用random.choice()随机选择礼物。

        进口随机      lsGiftIn=[[‘杰克’,‘苹果’],“6月”,“球”,“玛丽”,“卡”,“公爵”,“娃娃”,“詹姆斯”,“蛋”,“蒂娜”,“笛”,[‘汤姆’,‘咖啡’]]#存储参与者的姓名和自己带来的礼物   lsGiftOut=[] #存储交换后的结果   n=len (lsGiftIn) #参与人数   礼物=[我为我在lsGiftIn[1]] #未分配出去的礼物   x的范围(n):   国旗=0   人=lsGiftIn [x] [0]   myGift=lsGiftIn [x] [1]   如果myGift礼物:   标志=1   gifts.remove (myGift)   getGift=random.choice(礼物)#随机分配礼物   lsGiftOut.append([人,getGift])   gifts.remove (getGift)   如果国旗:   gifts.append (myGift)      打印(lsGiftOut)      

  

构造字典存储参与者的姓名和礼物,其中姓名为关键,礼物为价值,使用字典的popitem()方法随机返回礼物。

        dictGiftIn={“杰克”:“苹果”,“彼得”:“啤酒”,“汤姆”:“卡”,“公爵”:“娃娃”,“玛丽”:“菠萝”,“詹姆斯”:“笛”,“蒂娜”:“咖啡”}   dictGiftOut={}   人=列表(dictGiftIn.keys ())   p的人:   国旗=0 #标记自己带来的礼物是否还未分配出去   如果p dictGiftIn:   标志=1   myGift=dictGiftIn.pop (p) #如果自己带来的礼物还未分配,则去掉该礼物   getGift=dictGiftIn.popitem() #随机返回并移除一对键值   dictGiftOut [p]=getGift[1] #得到的礼物   如果国旗:   dictGiftIn [p]=myGift #将自己的礼物添到未分配礼物中      打印(dictGiftOut) #输出礼物分配情况      

~
结束   

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

通过python实现随机交换礼物程序详解