圣诞节快到啦,为了打造良好的工作环境,同事之间的关系和谐,现在玩一个交换礼物的小游戏。
每个同事准备一个礼物,到时候互相交换,自己手里的礼物必须交换出去,并且得到一个其它人的礼物。
我们假设有同事A,B,C,D,E,每个人都准备了一个小礼物,给礼物对应的编号1,2,3,4,5。
每个同事可以随机得到一个礼物,但是不能拿到自己的。
import random ''' 交互礼物,员工ABCDE分别有礼物12345编号,每个员工不能抽到自己的 # 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ ''' people = { "A": 1, "B": 2, "C": 3, "D": 4, "E": 5, } # 所有的礼物编号 gifts = [i for i in people.values()] def get_gift(): '''随机抽取礼物''' # 设置一个随机值,范围是0-礼物数量减1 n = random.randint(0, len(gifts)-1) if people.get(x) == gifts[n]: # 判断等于自己的礼物 get_gift() # 重新抽取 else: print("%s 取到了礼物编号 %s" % (x, gifts[n])) # 取到了礼物后,把礼物从礼品盒里面移除掉 del gifts[n] if __name__ == '__main__': while 1: if len(gifts) == 0: print("换礼物结束!") exit() x = input("输入一个员工:") if x not in people.keys(): print("输入员工名称ABCDE") else: get_gift()自由分配
不输入员工名称,让员工自由取值。
import random ''' 交互礼物,员工ABCDE分别有礼物12345编号,每个员工不能抽到自己的 # 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ ''' people = { "A": 1, "B": 2, "C": 3, "D": 4, "E": 5, } # 所有的礼物编号 gifts = [i for i in people.values()] def get_gift(): '''随机抽取礼物''' # 设置一个随机值,范围是0-礼物数量减1 n = random.randint(0, len(gifts)-1) if people.get(x) == gifts[n]: # 判断等于自己的礼物 get_gift() # 重新抽取 else: print("%s 取到了礼物编号 %s" % (x, gifts[n])) # 取到了礼物后,把礼物从礼品盒里面移除掉 del gifts[n] if __name__ == '__main__': for x in people.keys(): if x not in people.keys(): print("输入员工名称ABCDE") else: get_gift()
运行结果
A 取到了礼物编号 5 B 取到了礼物编号 4 C 取到了礼物编号 2 D 取到了礼物编号 1 E 取到了礼物编号 3
这样写会有个小BUG,当ABCD先取到了1234,那最后一个就没得拿了
判断最后2个礼物的情况为了避免前面的4个小伙伴刚好取到1234,把5留个最后一个小伙伴的尴尬情况,在还剩最后2个的时候,就做个判断会有3种情况
import random ''' 交互礼物,员工ABCDE分别有礼物12345编号,每个员工不能抽到自己的 ''' # 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ people = { "A": 1, "B": 2, "C": 3, "D": 4, "E": 5, } # 所有的礼物编号 gifts = [i for i in people.values()] employees = [j for j in people.keys()] def get_gift(): '''随机抽取礼物''' # 判断最后2个礼物是不是有可能拿到自己的 if len(gifts) == 2: # 情况1:最后2个礼物,刚好是最后2个人的 if people[employees[0]] in gifts and people[employees[1]] in gifts: if people[employees[0]] == gifts[0]: print("%s 取到了礼物编号 %s" % (employees[0], gifts[1])) print("%s 取到了礼物编号 %s" % (employees[1], gifts[0])) else: print("%s 取到了礼物编号 %s" % (employees[0], gifts[0])) print("%s 取到了礼物编号 %s" % (employees[1], gifts[1])) exit() # 情况2:最后2个礼物,都不是最后2个人的 elif people[employees[0]] not in gifts and people[employees[1]] not in gifts: print("%s 取到了礼物编号 %s" % (employees[0], gifts[0])) print("%s 取到了礼物编号 %s" % (employees[1], gifts[1])) exit() # 情况3:最后2个礼物有其中一个是最后2个的 else: if people[employees[0]] == gifts[0]: print("%s 取到了礼物编号 %s" % (employees[0], gifts[1])) print("%s 取到了礼物编号 %s" % (employees[1], gifts[0])) elif people[employees[1]] == gifts[1]: print("%s 取到了礼物编号 %s" % (employees[0], gifts[1])) print("%s 取到了礼物编号 %s" % (employees[1], gifts[0])) else: print("%s 取到了礼物编号 %s" % (employees[0], gifts[0])) print("%s 取到了礼物编号 %s" % (employees[1], gifts[1])) exit() # 设置一个随机值,范围是0-礼物数量减1 n = random.randint(0, len(gifts)-1) if people.get(x) == gifts[n]: # 判断等于自己的礼物 get_gift() # 重新抽取 else: print("%s 取到了礼物编号 %s" % (x, gifts[n])) # 取到了礼物后,把礼物从礼品盒里面移除掉 gifts.pop(n) employees.remove(x) if __name__ == '__main__': for x in people.keys(): if x not in people.keys(): print("输入员工名称ABCDE") else: get_gift()
这样多运行几次都不会有问题了
A 取到了礼物编号 4
B 取到了礼物编号 5
C 取到了礼物编号 2
D 取到了礼物编号 1
E 取到了礼物编号 3