随机试验有确定的样本空间,样本空间是试验的所有样本点的集合,随机事件是样本空间的子集合。所以,要在计算机上表示随机试验和随机事件,应能表示集合。Python 为我们提供了一个表示集合的数据结构set。这个set 类的对象和数学中的集合一样,所包含的数据元素不重复。
函数名或运算符 | 功能 | 参数意义 | 例 |
---|---|---|---|
set(x) | 创建集合 | x表示初始化数据,可以是set对象也可以是list对象。缺省为空集。 | A=set({2,3}),B=set([2,3,4,5]) |
add(x) | 向集合添加元素 | x表示欲添加的元素 | A.add(4) |
| | 集合的并运算∪ | A|B 为{2,3,4,5} | |
& | 集合的交运算∩ | A&B 为{2,3,4} | |
- | 集合的差运算- | B-A 为{5} | |
<= | 子集关系⊆ | A<=B为True | |
== | 集合的相等关系 | A==B为False |
例1 考虑抛掷一枚6面体骰子,观察出现的点数的随机试验。设 A 1 A_1 A1表示事件“出现偶数点”,即 A 1 = { 2 , 4 , 6 } A_1=\{2, 4, 6\} A1={ 2,4,6}。 A 2 A_2 A2表示事件“出现的点数不超过3”,即 A 2 = { 1 , 2 , 3 } A_2=\{1, 2, 3\} A2={ 1,2,3}。用Python中set的对象来表示相关的随机事件及其运算 A 1 ∪ A 2 A_1\cup A_2 A1∪A2, A 1 ∩ A 2 A_1\cap A2 A1∩A2, A 1 − A 2 A_1-A_2 A1−A2和 A ‾ 1 \overline{A}_1 A1,并验证 A 1 ∪ A 2 ‾ = A ‾ 1 ∩ A ‾ 2 \overline{A_1\cup A_2}=\overline{A}_1\cap\overline{A}_2 A1∪A2=A1∩A2和 A 1 ∩ A 2 ‾ = A ‾ 1 ∪ A ‾ 2 \overline{A_1\cap A_2}=\overline{A}_1\cup\overline{A}_2 A1∩A2=A1∪A2。
解:下列程序完成本题所有要求。
S=set({
1, 2, 3, 4, 5, 6}) #全集S(样本空间)
A1=set([2, 4, 6]) #S的子集A1(随机事件:偶数点)
A2=set([1, 2, 3]) #A2:点数不超过3
print('S=%s:抛掷骰子的样本空间.'%S)
print('A1=%s:偶数点.'%A1)
print('A2=%s:点数不超过3.'%A2)
print('A1+A2=%s:偶数点或点数不超过3.'%(A1|A2)) #A1∪A2:偶数点或点数不超过3
print('A1*A2=%s:不超过3的偶数点.'%(A1&A2)) #A1∩A2:不超过3的偶数点
print('A1-A2=%s:超过3的偶数点.'%(A1-A2)) #超过3的偶数点
print('Ā1=%s:奇数点.'%(S-A1)) #A1的补集(A1的对立事件)
print('(A1+A2)_=Ā1*Ā2 is %s.'%(S-(A1|A2)==(S-A1)&(S-A2)))
print('(A1*A2)_=Ā1+Ā2 is %s.'%(S-(A1&A2)==(S-A1)|(S-A2)))
程序的第1~3行调用函数set创建set类对象S、A1和A2。注意,传递给set函数的只有一个参数:或是set类对象,如第1行(set类对象的常量用一对花括弧,囊括各个元素)。或是list类对象,如第2、3行(list类对象的常量用一对方括弧,囊括各个元素)。第4~12行调用函数print输出各事件及各种运算结果。注意,print函数只接受了1个参数,但需要在输出计算结果的同时还需输出一些注释性信息。为此,要用到格式输出串:以第4行输出作为样本空间的集合S为例,传递给print的参数是
’S=%s:抛掷骰子的样本空间’%S \text{'S=\%s:抛掷骰子的样本空间'\%S} ’S=%s:抛掷骰子的样本空间’%S
这就是一个格式串,单引号内的%s称为格式占位符,它表明以字符串格式(百分号后面的s指定)在此位置输出单引号外面的紧随着的以百分号开头的表达式,此例中就是%S,即按字符串格式输出集合S。
Python用#作为行内注释的标志,读者可根据程序中的注释信息了解该程序的代码意义。
需要说明的是由于程序代码中不能直接输入、输出 ∪ \cup ∪和 ∩ \cap ∩,我们约定用“+”和“*”分别替代。第11、12行是在验证德.摩根律:
( A 1 ∪ A 2 ) ‾ = A ˉ 1 ∩ A ˉ 2 \overline{(A_1\cup A_2 )}=\bar{A}_1\cap\bar{A}_2 (A1∪A2)=Aˉ1∩Aˉ2和 ( A 1 ∩ A 2 ) ‾ = A ˉ 1 ∪ A ˉ 2 \overline{(A_1\cap A_2 )}=\bar{A}_1\cup\bar{A}_2 (A1∩A2)=Aˉ1∪Aˉ2。由于在程序中字符串无法表示表达式 ( A 1 ∪ A 2 ) ‾ \overline{(A_1\cup A_2 )} (A1∪A2)用(A1+A2)_代之。相仿地,用(A1*A2)_来代表表达式 ( A 1 ∩ A 2 ) ‾ \overline{(A_1\cap A_2 )} (A1∩A2)。
运行程序,输出:
S={
1, 2, 3, 4, 5, 6}:抛掷骰子的样本空间
A1={
2, 4, 6}:偶数点
A2={
1, 2, 3}:点数不超过3
A1+A2={
1, 2, 3, 4, 6}:偶数点或点数不超过3
A1*A2={
2}:不超过3的偶数点
A1-A2={
4, 6}:超过3的偶数点
Ā1={
1, 3, 5}:奇数点
(A1+A2)_=Ā1*Ā2 is True
(A1*A2)_=Ā1+Ā2 is True
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!