有5封信投入4个信箱,求下列事件的概率
1)第一,二号邮箱各投入一封信
2)有一个信箱有三封信
3)仅有一个信箱没有信
4)第二个信箱没有信
#注:每个信封(a,b,c,d,e)和信箱(A,B,C,D)都是不同的个体.
#如果可能的话,最好代码能够实现打印全部可能性以及每个问题的可能性
#注:每个信封(a,b,c,d,e)和信箱(A,B,C,D)都是不同的个体.
#如果可能的话,最好代码能够实现打印全部可能性以及每个问题的可能性
```python
import random
def mail_problem_handler(mail_num, mail_box, count):
"""
:param mail_num:
:param mail_box:
:return:
"""
all_set = []
with open(r"C:\Users\ZhanJens\Desktop\fot_test01.txt", "w") as f:
while len(all_set) < count:
print(len(all_set))
mail_box_dict = {}
for b in range(0, mail_box):
mail_box_dict[b] = 0
key_list = []
for i in range(0, mail_box):
key_list.append(i)
for m in range(0, mail_num):
choice_box = random.choice(key_list)
mail_box_dict[choice_box] += 1
str1 = ""
for x in mail_box_dict:
str1 = str1 + str(mail_box_dict[x]) + '#'
if str1 not in all_set:
all_set.append(str1)
f.write(str1 + "\n")
return all_set
def Find_index(list, x):
"""
找到list中x元素的下标
:param list:
:param x:
:return:
"""
for i, item in enumerate(list):
if x in item:
return i
else:
return None
if __name__ == '__main__':
results = mail_problem_handler(5, 4, 56) # 将5封信随机放入4个邮箱,会出现多少种可能性
with open(r"C:\Users\ZhanJens\Desktop\fot_test01.txt", "r") as f:
data = f.readlines()
Q1 = 0
Q1_list = []
Q2 = 0
Q2_list = []
Q3 = 0
Q3_list = []
Q4 = 0
Q4_list = []
for i in data:
one = i.split("#")
if one[0] == '1' and one[1] == '1':
Q1 += 1
Q1_list.append(one)
if "3" in one:
Q2 += 1
Q2_list.append(one)
if "0" in one:
one_copy = one.copy()
zero_index = Find_index(one, "0")
one_copy.pop(zero_index)
if "0" not in one_copy:
Q3 += 1
Q3_list.append(one)
if one[1] == "0":
Q4 += 1
Q4_list.append(one)
print(Q1_list)
print(Q1)
print(Q2_list)
print(Q2)
print(Q3_list)
print(Q3)
print(Q4_list)
print(Q4)
```
全集之所以为56 根据下图所得:
最终答案:
有5封信投入4个信箱,求下列事件的概率
1)第一,二号邮箱各投入一封信 4/56
2)有一个信箱有三封信 24/56
3)仅有一个信箱没有信 24/56
4)第二个信箱没有信 21/56