Python编程题14--随机分配礼物

2020-10-18  本文已影响0人  wintests

题目

已知有5个人,每人手上都有一个不同的礼物,现在需要对5个人的礼物重新进行分配(也可以理解为5个人互换礼物),要求重新分配后,每个人不能再拿到自己原来的礼物。

实现思路1

代码实现

import random

def distribute_gift(data):
    result = {}
    user_list = list(data.keys())
    gift_list = list(data.values())
    while True:
        if len(user_list) != 2:
            random_gift = random.choice(gift_list)
            if data[user_list[0]] != random_gift:
                result[user_list[0]] = random_gift
                user_list.remove(user_list[0])
            else:
                result[user_list[1]] = random_gift
                user_list.remove(user_list[1])
            gift_list.remove(random_gift)
        else:
            if (data[user_list[0]] == gift_list[0]) or (data[user_list[1]] == gift_list[1]):
                result[user_list[0]] = gift_list[1]
                result[user_list[1]] = gift_list[0]
            else:
                result[user_list[0]] = gift_list[0]
                result[user_list[1]] = gift_list[1]
            break
    return result

data = {"A": "礼物A", "B": "礼物B", "C": "礼物C", "D": "礼物D", "E": "礼物E"}
print("随机分配后:{}".format(distribute_gift(data)))

实现思路2

代码实现

import random

def distribute_gift(data):
    result = {}
    list1 = list(data.values())
    for user in data:
        list2 = list(result.values())
        new_list = [i for i in list1 if i not in list2]
        if (len(new_list)) == 1 and (data[user] == new_list[0]):
            last_gift = new_list[0]
            random_user = random.choice(list(result.keys()))
            result[user] = result[random_user]
            result[random_user] = last_gift
            break
        while not result.get(user): # 如果result中没有这个人员,则可分配礼物
            random_gift = random.choice(new_list)
            if data[user] != random_gift:
                result[user] = random_gift
    return result

data = {"A": "礼物A", "B": "礼物B", "C": "礼物C", "D": "礼物D", "E": "礼物E"}
print("随机分配后:{}".format(distribute_gift(data)))

更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)

上一篇下一篇

猜你喜欢

热点阅读