python笔记50-面试题:交换圣诞节礼物
2021/6/2 22:25:25
本文主要是介绍python笔记50-面试题:交换圣诞节礼物,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言圣诞节快到啦,为了打造良好的工作环境,同事之间的关系和谐,现在玩一个交换礼物的小游戏。
每个同事准备一个礼物,到时候互相交换,自己手里的礼物必须交换出去,并且得到一个其它人的礼物。
我们假设有同事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
这篇关于python笔记50-面试题:交换圣诞节礼物的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Python基础编程
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南