圣诞节快到啦,为了打造良好的工作环境,同事之间的关系和谐,现在玩一个交换礼物的小游戏。
每个同事准备一个礼物,到时候互相交换,自己手里的礼物必须交换出去,并且得到一个其它人的礼物。
我们假设有同事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种情况
- 最后2个礼物 刚好是最后2个小伙伴的,换着拿
- 最后2个礼物 都不是最后2个小伙伴的,随便拿
- 最后2个礼物 其中有1个是属于最后2个小伙伴的,换着拿
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