随机试验有确定的样本空间,样本空间是试验的所有样本点的集合,随机事件是样本空间的子集合。所以,要在计算机上表示随机试验和随机事件,应能表示集合。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
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好。
返回《导引》