这个问题要求一群人互相送礼还不能漏。
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是个计数单位,为了留出最后俩空
再让送礼和收礼的两个位置上的人互相交换
结束