看到了一个面试题,想了两种解法,不知道符不符合要求,记录如下:
有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) #输出礼物分配情况
~
结束
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。