圣诞送礼问题

 这个问题要求一群人互相送礼还不能漏。

import random
sc = "ABCDEF"
result = {}
song = list(sc)
shou = list(sc)
count = 0
while song:
    i = random.randint(1, len(sc) - 1)
    j = random.randint(1, len(sc) - 1)
    if sc[i] in song and sc[j] in shou and i != j:
        a = sc[i]
        b = sc[j]
        result.update({a:b})
        print(f"同学{sc[i]}送了同学{sc[j]}一份礼物")
        song.remove(sc[i])
        shou.remove(sc[j])
        count = count + 1
        if count == len(sc)-2 :
            print(f"同学{song[0]}送了同学{shou[1]}一份礼物")
            print(f"同学{song[1]}送了同学{shou[0]}一份礼物")
            result.update({song[0]: shou[1]})
            result.update({song[1]: shou[0]})
            break
print(result)

我的思路是前面的一群人互相随机送,最后两位空置位互相送,不然会出现自己送自己的情况。

送礼为一个列表song = list(sc)
收礼也是一个列表shou = list(sc)

然后循环

while song:
    i = random.randint(1, len(sc) - 1)
    j = random.randint(1, len(sc) - 1)
    if sc[i] in song and sc[j] in shou and i != j:
        a = sc[i]
        b = sc[j]
        result.update({a:b})
        print(f"同学{sc[i]}送了同学{sc[j]}一份礼物")
        song.remove(sc[i])
        shou.remove(sc[j])

从送和收分别随机抽一个人,只要他们不是同一个人,就抽出来,分别赋给a,b,加进result字典一 一 对 应

再从送礼和收礼的两个列表把人删除

 count = count + 1
        if count == len(sc)-2 :
            print(f"同学{song[0]}送了同学{shou[1]}一份礼物")
            print(f"同学{song[1]}送了同学{shou[0]}一份礼物")
            result.update({song[0]: shou[1]})
            result.update({song[1]: shou[0]})
            break
print(result)

count是个计数单位,为了留出最后俩空

再让送礼和收礼的两个位置上的人互相交换

结束

你可能感兴趣的:(python)