精华内容
下载资源
问答
  • 基本概念 样本空间: 所有可能结果构成...事件的关系 包含: B⊂AB\subset AB⊂A 相等:A=BA=BA=B \qquad 即 A⊂BA\subset BA⊂B 且 B⊂AB\subset AB⊂A 和事件:C=⋃i=1nAiC=\bigcup_{i=1}^n A_iC=⋃i=1n​Ai​

    基本概念

    样本空间: 所有可能结果构成的集合
    随机事件: 样本空间的任意子集
    基本事件: 所有单个样本构成的集合,即单点集
    必然事件: 必然发生的事件S
    不可能事件:必然不发生的事件 ∅ \varnothing

    事件的关系

    包含: B ⊂ A B\subset A BA

    相等: A = B A=B A=B \qquad A ⊂ B A\subset B AB B ⊂ A B\subset A BA

    和事件: C = ⋃ i = 1 n A i C=\bigcup_{i=1}^n A_i C=i=1nAi

    互斥事件: A ∩ B = ∅ A\cap B=\varnothing AB=

    事件的交或积: C = A ∩ B = A B C=A\cap B=AB C=AB=AB

    事件 A A A B B B的差: C = A − B C=A- B C=AB

    对立事件或事件的补: A ˉ = S − A \bar A=S -A Aˉ=SA

    事件的运算

    交换律 :

    1、 A ∩ B = B ∩ A A\cap B= B\cap A AB=BA

    2、 A ∪ B = B ∪ A A\cup B= B\cup A AB=BA

    结合律
    1、 A ∩ ( B ∩ C ) = ( A ∩ B ) ∩ C A\cap (B\cap C)= (A\cap B)\cap C A(BC)=(AB)C

    2、 A ∪ ( B ∪ C ) = A ∪ ( B ∪ C ) A\cup( B\cup C )= A\cup( B\cup C) A(BC)=A(BC)

    分配律
    1、 A ∩ ( B ∪ C ) = ( A ∩ B ) ∪ ( A ∩ C ) A\cap (B\cup C)= (A\cap B)\cup (A\cap C) A(BC)=(AB)(AC)

    2、 A ∪ ( B ∩ C ) = ( A ∪ B ) ∩ ( B ∪ C ) A\cup( B\cap C )= (A\cup B)\cap (B\cup C) A(BC)=(AB)(BC)

    对偶律
    1、 A ∪ B ‾ = A ˉ ∩ B ˉ \overline{A\cup B}=\bar A\cap \bar B AB=AˉBˉ

    2、 A ∩ B ‾ = A ˉ ∪ B ˉ \overline{A\cap B}=\bar A\cup \bar B AB=AˉBˉ

    展开全文
  • 摘 要:给出了任意比例系数的加减法运算电路,分析... 加减法运算电路以集成运算放大器为核心元件构成,多个输入信号分别作用于运放的同相输入端和反相输入端,实现对输入信号的加、减法运算,外部电阻决定输入信号的
  • 一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读...
  • 关系数据库——关系代数

    千次阅读 2021-04-05 10:56:41
    所以说,关系数据库的核心部分是查询,故又称为查询语言,而查询的条件要使用关系运算表达式来表示 因此,关系运算是设计关系数据语言的基础 按表达查询的方式不同,关系运算可分为关系代数和关系演算两大类 关系...

    本人就职于国际知名终端厂商,负责modem芯片研发。
    在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。

    关系数据库

    关系代数

    • 关系模型与其它模型相比,最有特色的是它的数据库语言
    • 这种语言灵活方便、表达能力和功能都很强
    • 目前关系数据库所使用的语言一般都具有定义、查找、更新和控制一体化的特点,而查询是最主要的部分
    • 所以说,关系数据库的核心部分是查询,故又称为查询语言,而查询的条件要使用关系运算表达式来表示
    • 因此,关系运算是设计关系数据语言的基础
    • 按表达查询的方式不同,关系运算可分为关系代数和关系演算两大类

    关系代数的分类及其运算符

    • 关系代数式对关系进行集合代数运算,是基于关系代数的操作语言,称为关系代数语言,简称关系代数
      □ 它是由IBM在一个实验性的系统上实现的,称为ISBL(Information System Base Language)语言
      □ ISBL的每个语句都类似于一个关系代数表达式
    • 关系代数的运算对象是关系,运算结果也是关系,关系代数用到的运算符主要包括四类:
      • 集合运算符:∪(并),-(差),∩(交),X(广义笛卡尔积);
      • 专门的关系运算符:σ(选择),∏(投影),∞(连接),*(自然连接),÷(除);
      • 算术比较运算符:>(大于),≥(大于等于),<(小于),≤(小于等于),=(等于),≠(不等于);
      • 逻辑运算符:∧(与),∨(或),┒(非)

    关系代数的运算按运算符的不同主要分为两类:

    • 传统的集合运算:把关系看成元组的集合,以元组作为集合中元素来进行运算,其运算是从关系的“水平”方向即行的角度进行的。包括并、差、交和笛卡尔积等运算
    • 专门的关系运算:不仅涉及行运算,也涉及列运算。这种运算是为数据库的应用而引进的特殊运算。包括选择、投影、连接和除法等运算

    传统的集合运算

    • 传统的集合运算是二目运算,是在两个关系中进行的,但是并不是任意的两个关系都能进行这种集合运算,而是要在两个满足一定条件的关系中进行运算。那么,对关系有什么要求呢?看下面的定义👇
      • 设给定两个关系R、S,若满足:
        (1)具有相同的度n;
        (2)R中第i个属性和S中第i个属性必须来自同一个域
        则说关系R、S是相容的
      • 除笛卡尔积外,要求参加运算的关系必须满足上述的相容性定义

    🔶并(Union)

    • 关系R和关系S的并,是由属于R或属于S的元组组成,即R和S的所有元组合并,删去重复元组,组成一个新关系,其结果仍为n目关系。记作:R∪S={t|t∈R∨t∈S}
    • 对于关系数据库,记录的插入和添加可通过并运算实现
    • 一个元素在并集中只出现一次
    • R和S必须同类型(属性集相同、次序相同,但属性名可以不同)
      在这里插入图片描述

    🔶差(Difference)

    • 关系R与关系S的差由属于R而不属于S的所有元组组成,即R中删去与S中相同的元组,组成一个新关系,其结果仍为n目关系。记作:R-S={t|t∈R ∧ ┒t∈S}
    • 通过差运算,可以实现关系数据库记录的删除
      在这里插入图片描述

    🔶交(Intersection)

    • 关系R与关系S的交由既属于R又属于S的元组组成,即R与S中相同的元组,组成一个新关系,其结果仍为n目关系。记作:R∩S={t|t∈R t∈S}
    • 如果两个关系没有相同的元组,那么它们的交为空
    • 两个关系的并和差运算为基本运算(即不能用其它运算表达的运算),而交运算为非基本运算,交运算可以用差运算来表示 R∩S=R-(R-S)
      在这里插入图片描述

    🔶广义笛卡尔积(Extended Cartesian Product)

    • 两个分别为n目m目关系R和S的广义笛卡尔积是一个 (n+m)列的元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1*k2个元组。记作:R×S={tr⌒ts| tr∈R ts∈S}
    • 关系的广义笛卡尔积可用于两关系的连接操作
    • 例如,下图关系R(a)和S(b)为相容关系,©为R与S的并,(d)为R与S的交,(e)为R与S的差,(f)为R与S的广义笛卡尔积
      在这里插入图片描述
      在这里插入图片描述

    专门的关系运算

    • 由于传统的集合运算,只是从行的角度进行,而要灵活地实现关系数据库多样的查询操作,必须引入专门的关系运算

    • 为叙述上的方便先引入几个概念
      (1)设关系模式为R(A1,A2,…,An),它的一个关系为R,t∈R表示t是R的一个元组,t[Ai]则表示元组t中相应于属性Ai的一个分量👇
      在这里插入图片描述
      (2)若A={Ai1,Ai2,…,Aik},其中Ai1,Ai2,…,Aik是A1,A2,…,An中的一部分,则A称为属性列或域列,Ã则表示{A1,A2,…,An}中去掉{Ai1,Ai2,…,Aik}后剩余的属性组。t[A]=(t[Ai1],t[Ai2],…,t[Aik])表示元组t在属性列A上诸分量的集合👇
      在这里插入图片描述
      (3)元组的连接tr⌒ts:R为n目关系,S为m目关系,tr∈R,ts∈S,tr⌒ts称为元组的连接(concatenation),它是一个n+m列的元组,前n个分量为R的一个n元组,后m个分量为S中的一个m元组
      例如👇
      在这里插入图片描述
      (4)给定一个关系R(X,Z),X和Z为属性组,定义当t[X]=x时,x在R中的象集(Image Set)为Zx={t[Z] | t∈R,t[X]=x},它表示R中的属性组X上值为x的诸元组在Z上分量的集合👇
      在这里插入图片描述
      在这里插入图片描述

    • 选择(Selection)

      • 选择又称限制(Restriction)
      • 选择运算是单目运算,是根据一定的条件在给定的关系R中选取若干个元组,组成一个新关系,记作:σF(R )={t|t∈R∧F(t)为真}
        🔹 σ为选取运算符;
        🔹 F表示选取的条件,是一个由运算对象(属性名、常数、简单函数)、算术比较运算符(> ,≥,<,≤,=,≠)和逻辑运算符(∨ ,∧, ┐)连接起来的逻辑表达式,结果为逻辑值“真”或“假”;
      • 选择运算实际上是从关系R中选取使逻辑表达式为真的元组,是从行的角度进行的运算
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        以下例题均是以上图👆所示的五个关系为例进行运算
        例. 查询计算机系的全体学生
        👉σDEPT=’计算机’ (S) 或 σ5=’计算机’ (S)(其中5为DEPT的属性序号)
        查询结果如下图👇
        在这里插入图片描述
        例. 查询工资高于1000元的男教师
        👉σ(SAL>1000) ∧(SEX=’男’) (T)
        查询结果如下图👇
        在这里插入图片描述
    • 投影(Projection)

      • 投影运算也是单目运算,关系R上的投影是从R中选择出若干属性列,组成新的关系,即对关系在垂直方向进行的运算,从左到右按照指定的若干属性及顺序取出相应列,应删去重复元组。记作:ΠA(R )={t[A] | t∈R}
        🔹 A为R中的属性列,Π为投影运算符
      • 从其定义可看出,投影运算是从列的角度进行的运算,这正是选取运算与投影运算的区别所在。选取运算是从关系的水平方向上进行运算的,而投影运算则是从关系的垂直方向上进行的
      • 投影之后,新关系与原关系可能不相容

      例.查询教师的姓名,教师号及其职称。
      👉ΠTN,TNO,PROF(T) 或 Π2,1,5(T) (其中2,1,5分别为TN、TNO和PROF的属性序号)
      结果如下图👇
      在这里插入图片描述
      结果表明投影运算可以改变关系的属性次序

      例. 查询教师关系中有哪些系
      👉ΠDEPT(T)
      结果如下图👇
      在这里插入图片描述
      由上例可以看出,投影后取消了某些属性列后,就可能出现重复行,应该取消这些完全相同的行。所以投影之后,不但减少了属性,元组也可能减少,新关系与原关系不相容

      例. 查询讲授C5课程的教师号。
      👉ΠTNOCNO=’C5’(TC))
      结果如下图👇
      在这里插入图片描述

    • 连接(Join)

      • 连接运算是二目运算,是从两个关系的笛卡尔积中选取满足连接条件的元组,组成新的关系

      • 设关系R(A1,A2,…,An)及S(B1,B2,…,Bm),连接属性集X包含于{A1,A2,…,An},及Y包含于{B1,B2,…,Bm},X与Y中属性列数目相同,且相对应属性有共同的域。【若Z={A1,A2,…,An}/X(/X:去掉X之外的属性)及W={B1,B2,…,Bm}/Y,则R及S可表示为R(Z,X),S(W,Y)】关系R和S在连接属性X和Y上的连接,就是在R×S笛卡尔积中,选取X属性列上的分量与Y属性列上的分量满足给定θ比较条件的那些元组,也就是在R×S上选取在连接属性X,Y上满足θ条件的子集,组成新的关系,新关系的度为n+m。记作:(R∞S)XθY={tr⌒ts |tr∈R∧ts∈S∧tr[X] θ ts[Y]为真}
        🔹 ∞是连接运算符
        🔹 θ为算术比较运算符,也称θ连接
        🔹 XθY为连接条件
             θ为“=”时,称为等值连接;
             θ为“<”时,称为小于连接;
             θ为“>”时,称为大于连接

      • 连接运算为非基本运算,可以用选取运算和广义笛卡尔积运算来表示:R∞S=σxθy(R×S)

      • 在连接运算中,一种最常用的连接是自然连接,所谓自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在连接结果中把重复的属性列去掉。即如果R与S具有相同的属性组Y,则自然连接可记作:R∞S={tr⌒ts |tr∈R∧ts∈S∧tr[Y]=ts[Y]}

      • 自然连接是在广义笛卡尔积R×S中选出同名属性上符合相等条件的元组,再进行投影,去掉重复的同名属性,组成新的关系

      例. 如图 (a)、(b)所示的两个关系R与S,©为R和S的大于连接(C>D),(d)为R和S的等值连接(C=D),(e)为R和S的等值连接(R.B=S.B),(f)为R和S的自然连接👇
      在这里插入图片描述
      结果如下图👇
      在这里插入图片描述
      在这里插入图片描述

      • 通过上面👆的例题,我们可以看出等值连接与自然连接的区别:
        (1)等值连接中不要求连接属性的属性名相同,而自然连接要求连接属性的属性名必须相同,即两关系只有在同名属性才能进行自然连接【如上例R中的C列和S中的D列可进行等值连接,但因为属性名不同,不能进行自然连接】
        (2)等值连接不将重复属性去掉,而自然连接去掉重复属性,也可以说,自然连接是去掉重复列的等值连接【如上例R中的B列和S中的B列进行等值连接时,结果有两个重复的属性列B,而进行自然连接时,结果只有一个属性列B】

      例. 查询讲授数据库课程的教师姓名
      👉ΠTNCN=’数据库’(C ) ∞ ΠTNO,CNO(TC) ∞ΠTNO,TN(T)) 或 ΠTNTNOCN=’数据库’(C ) ∞TC) ∞ ΠTNO,TN(T))
      结果如下图👇
      在这里插入图片描述

    • 除法(Division)

      • 除法运算是二目运算
      • 前提:设有关系R(X,Y)与关系S(Y,Z),其中X,Y,Z为属性集合,R中的Y与S中的Y可以有不同的属性名,但对应属性必须出自相同的域
      • 关系R除以关系S所得的商是一个新关系P(X),P是R中满足下列条件的元组在X上的投影:元组在X上分量值x的象级Yx包含S在Y上投影的集合。记作:R÷S={tr[X]|tr∈R∧Πy(S)⊆Yx}
        🔹 Yx为x在R中的象集,x= tr[X]
      • 除法是既从列的角度又从行的角度对关系R进行运算。首先,新关系P中只保留属性列X;其次,新关系P中只保留这样的X值x:S在Y上投影的集合是x的象集Yx的子集
      • 除法运算为非基本运算,可以表示为:R÷S=Πx(R )-Πxx(R )× ΠY(S)-R)

      例. 已知关系R和S,如下图(a),(b)所示,则R÷S如图©所示👇
      在这里插入图片描述
      与除法的定义相对应,本题中X={A,B,E},Y={C,D},Z={F}。其中,在关系R中,X可以取三个值{(a1,b2,e1),(a2,b4,e3),(a3,b5,e4)},它们的象集分别为:
           ①(a1,b2,e1)的象集为{(c3,d5),(c4,d6)}
           ②(a2,b4,e3)的象集为{(c1,d3)}
           ③(a3,b5,e4)的象集为{(c2,d8)}
      S在Y上的投影为{(c3,d5),(c4,d6)}
      显然只有(a1,b2,e1)的象集包含S在Y上的投影,所以R÷S={(a1,b2,e1)}

      • 除法运算同时从行和列的角度进行运算,适合于包含“全部”之类的短语的查询

    关系数据库——关系数据结构及形式化定义
    关系数据库——关系操作&&关系模型的完整性


    在这里插入图片描述

    展开全文
  • python中逻辑运算符and,or的用法以及核心思想——“短路逻辑”升级用法 1.and和or的含义 既然我们要运用and和or,那么首先就应该知道and与or的意思是什么。你可以把它当作数学里的与运算和或运算。假设a为真命题,b...

    python中and和or的用法以及运算的核心思想——“短路逻辑”超详细讲解

    //本文几乎涵盖了and和or所有知识点,篇幅较长,一点要静下心来看,学无止境。

    1.and和or的含义

    既然我们要运用and和or,那么首先就应该知道and与or的意思是什么。你可以把它当作数学里的与运算和或运算。假设a为真命题,b为假命题,那“a与b”是假命题,“a或b”为真命题。

    在python中也是一样的意思,如下表:

    运算符含义逻辑表达式说明
    and与运算a and b当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假。
    or或运算a or b当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。

    2.and和or的用法

    python中的逻辑运算符有两种返回值,python运算符除了能操作bool类型表达式,还能操作其他所有类型的表达式。一些初学者可能没了解过运算符操作其他类型的表达式。并且返回的值也不止bool类型。下面我们就来详细了解and与or的两种用法。

    1. 运算bool类型
      操作bool类型表达式的时候就是第一点中表格的用法。
      下面我们来举几个例子就明白了:
    
    a = 1>2 and 1<2; print(a) #输出结果为:False
    
    b = 1>2 or 1<2; print(b) #输出结果为:True
    
    

    这一用法还是比较简单。当操作bool类型时返回值都是bool类型。

    1. 运算其他类型
      运算其他类型时返回的都是操作表达式的值,如表:
    运算符含义逻辑表达式说明
    and与运算a and b如果 a 为 False,a and b 返回 a 的值,否则返回 b 的计算值。
    or或运算a or b如果 a 是 True,a or b 返回 a 的值,否则它返回 b 的计算值。

    初学者一定不要死板记得套用说明中的运算方法。要知道为什么a为False就返回a的值。在学习其他知识的时候也是这样。

    👨‍🎓题外话:
    在学习中,如果你想学精:
    千万不能只知其然,不知其所以然。一定要知其然,并知其所以然。不然你只能学的好,但是学不精。
    如果你觉得有的人很厉害,而你根本没那个天赋,达不到别人的高技术,那你们唯一的区别就在于此,就那么简单,加油,你也很棒!🤞

    其本质是因为:
    在与运算中,一个为假,那整个运算肯定都为假,无论b是真还是假,都不会影响最终的结果,所以返回a的值,如果为真,那后面的b不知是真还是假,所以要继续运算,则返回b的值。
    在或运算中,只要有一个为真,那整个运算都为真,所以只要a为真,那不管b是真还是假,最终的结果都是真,所以返回a的值。反之。

    这一点是我们后面要讲到的“短路逻辑”的本质。

    举例说明:

    
    a = 1
    b = 0
    c = "Hello World"
    d = ""
    
    print(a and b) #输出结果为 0
    print(a or b)  #输出结果为 1
    print(c and d) #输出结果为 "" /(即什么都不输出)
    print(c or d)  #输出结果为 Hello World
    print(a and c) #输出结果为 Hello World
    
    

    所以从上看来,and和or不仅能操作其他类型表达式,还能混合运算,即不同类型的表达式进行运算。并且返回的值不是bool类型,而是表达式的值。

    看到这可能有的初学者就懵了,int,string类型怎么会有false和true之说。

    在python中:None、任何数值类型中的0、空字符串“”、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了  __ nonzero __ () 或 __ len __ () 方法且方法返回 0 或False,则其实例也被当作False,其他对象均为True。

    所以在逻辑运算符操作其他类型表达式的时候是先以其对象返回的bool值进行运算,然后返回表达式。

    注:其他类型也能与bool类型进行运算,且运算规则和此规则一样,将bool类型当作其他类型就行了。
    例如:

    
    a = True
    b = False;
    c = 1
    d = "Hello World"
    
    print(a and c) #输出结果为 1
    print(b and c) #输出结果为 False
    print(b or d)  #输出结果为 Hello World
    
    

    -总结:

    1. 在逻辑运算符and和or中不仅可以操作bool类型的表达式,还能操作其他类型表达式,返回值也不仅是bool类型,也可以是其他类型。
    2. 在只进行bool表达式操作时,返回值是bool类型,其运算规则是:
      and:a and b, 当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假。
      or:a or b, 当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。
    3. 在有其他类型参与运算时,返回值时其表达式类型值,其运算规则是:
      and :a and b,如果 a 为 False,a and b 返回 a 的值,否则返回 b 的计算值。
      or:a or b,如果 a 是 True,a or b 返回 a 的值,否则它返回 b 的计算值。

    3.“短路逻辑”

    在学习完and和or的含义与用法之后,我们就要来进行“短路逻辑”的用法学习了。
    在之前的讲解与例子中,我们操作的只有两个表达式,即 a and b ,a or b。那么要用运算符操作多个表达式又该怎样去算呢,这时,我们就要运用到“短路逻辑”了。

    什么是短路逻辑:
    若and左侧的表达式为false,则短路之后所有的and表达式,直到出现or,则返回and左侧表达式的值继续与or的右侧参与运算
    若or左侧的表达式为true,则短路之后所有的表达式,不管是or还是and,直接输出or左侧表达式的值
    若 or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。

    为了更好的理解“短路逻辑”,我们先用常规思想从左至右来运算一下多个表达式:

    
    result1 = 0 and 10 and 20 and 30 and 40
    print(result1) # 输出结果为 0
    #运算:
    0 and 10 = 0
    #所以result = 0 and 20 and 30 and 40
    0 and 20 = 0
    #所以result = 0 and 30 and 40
    0 and 30 = 0
    #所以result = 0 and 40
    0 and 40 = 0
    #所以最终结果 :
    result = 0
    
    
    result2 = 10 or 0 or "" or {} or ()
    print(result2) #输出结果为 10
    #运算:
    10 or 0 = 10
    #所以result = 10 or "" or {} or ()
    10 or "" = 10
    #所以result = 10 or {} or ()
    10 or {} = 10
    #所以result = 10 or ()
    10 or () = 10
    #所以最终结果 :
    result = 10
    
    

    从上述例子来看,我们从左至右运算的最终结果就是正确结果啊,但是再让我们用这种方法来看看or和and混合运算时的结果:

    
    result = 10 or 0 and 20 and 30
    print(result) #输出结果为 10
    #运算:
    10 or 0 = 10
    #所以result = 10 and 20 and 30
    10 and 20 = 20
    #所以result = 20 and 30
    20 and 30 = 30
    #所以最终结果 :
    result = 30
    
    

    哎,好奇怪啊,怎么运算的结果和输出的结果不一样啊,明明都一步一步来运算的啊,真是奇怪。莫慌莫慌,这是因为啊,在python中,and和or运算时会短路,而这样“短路”现象,必须用我们的“短路逻辑”来运算了。

    为了直观的看到在and与or运算时怎么会短路,我们使用方法来使用一下and和or。
    先来看看都是and的情况:

    
    def a():
    	print("a")
    	return 0
    	
    def b():
    	print("b")
    	return 1
    	
    def c():
    	print("c")
    	return 1
    	
    def d():
    	print("d")
    	return 1
    	
    result = a() and b() and c() and d()
    print("最终返回值:",result)
    #输出结果为:
    a
    最终返回值:0
    
    

    看见没,为什么a(),b(),c() ,d()都参与了运算,而只打印了a。那是因为在 运算中,a()的值是0,为False,而其后都是and运算符,所以全部被短路,系统根本就没有调用后面的方法参与运算了,所以只打印了a出来。这就是为什么叫“短路”现象。

    再来看看都是or的情况:

    
    def a():
    	print("a")
    	return 0
    	
    def b():
    	print("b")
    	return 1
    	
    def c():
    	print("c")
    	return 2
    	
    def d():
    	print("d")
    	return 3
    	
    result = a() or b() or c() or d()
    print("最终返回值:",result)
    #输出结果为:
    a
    b
    最终返回值:1
    
    

    a()为False,b()为True,所以 a() or b() = b(),b()为True,那么就要继续参与运算:b() or c() = b() 返回的是True,则第二个or其后所有的表达式都要被短路,注意是第二个or,因为第一个or左侧表达式a()为False,所以还要继续运算,没有短路。也就是从左至右,在哪个or运算到左侧逻辑值为True时,就短路哪个or之后所有的表达式。所以只打印了a,b,最终返回值为b()的值:1。

    接下来就要实际运算到and和or都有的情况了:

    
    def a():
    	print("a")
    	return 0
    	
    def b():
    	print("b")
    	return 1
    	
    def c():
    	print("c")
    	return 2
    	
    def d():
    	print("d")
    	return 3
    
    def e():
    	print("e")
    	return 0
    
    def f():
    	print("f")
    	return 4
    
    def g():
    	print("g")
    	return 0
    
    def h():
    	print("h")
    	return 5
    	
    result = a() and b() and c() or d() or e() and g() or h()
    print("最终返回值:",result)
    #输出结果为:
    a
    d
    最终返回值: 3
    
    

    千万不要看到这么长就觉得很难,只要你真正理解了短路逻辑的本质,它就是变身器,无论碰到什么怪兽时,你都能变身迪迦奥特曼打败它。当然了,你一定要相信光,相信迪迦。“迪迦!🎇”

    我们先进行第一步运算,
    a() = 0,b() = 1,
    a() and b() = a() = 1;
    所以第一个and后的所有and连接但是是下一个or出现之前的表达式都要被短路,也就是b(),c()会被短路。所以打印a但不打印b,c。
    接着运算:
    a() or d() = d() = 3
    or的左侧a为False,所以后面的表达式不会被短路,打印 d ,继续运算:
    d() or e() = d() =3
    or的左侧d()为True,后面所有表达式都会被短路了,
    所以最后的返回值为3。
    
    

    值得注意的是:在有多个and,or连接运算的时候,很多初学者可能有绕懵,认为就只是运算符and,or 两侧的表达式在进行运算,不是的,是and,or两侧的逻辑值进行运算。
    例如在上述例子计算d() or e()时,d()是被返回一个最终值在进行运算,也就是在运算过后要把a() and b() and c() or d()看成一个值,再去与后面的e 进行or运算,而不要直接就当作是d()在后面的e进行运算,是因为 a and b and c or d = d()
    其实就等同于数学里:(a+b+c)* d,要先算括号里的值,但括号里是算出一个最终值A=a+b+c来,再进行接下来的运算A*d。

    以上就是and和or的全部含义与用法,加油各位,我们,未来可期!


    本文参考(在此表示感谢!):
    博客园博主:luser_run

    展开全文
  • 【数据库原理】关系代数

    万次阅读 多人点赞 2020-08-15 10:22:56
    关系模型中常用的关系操作包括查询操作和更新操作(包括插入、删除和修改)两大部分。从计算机语言角度看,后者在前者的基础上工作,前者比后者复杂,但前者有理论基础,所以成为了主要的研究对象,也是关系操作中最...

    简述.

    关系模型中常用的关系操作包括查询操作更新操作(包括插入、删除和修改)两大部分。从计算机语言角度看,后者在前者的基础上工作,前者比后者复杂,但前者有理论基础,所以成为了主要的研究对象,也是关系操作中最主要的部分。
    关系操作采用集合操作方式,即操作的对象和结果都是集合,称为Set-at-a-time(一次一集合)的操作方式。
    早期的关系操作通常用代数方式或逻辑方式来表示,分别称为关系代数和关系演算。前者用对关系的运算来表达查询要求,后者用谓词来表达查询要求。关系演算又可以根据谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。三种运算语言在表达能力上是等价的。

    关系代数.

    关系代数的运算对象是关系,运算结果也是关系。而我们说过关系是笛卡尔积集合的子集,所以也印证了我们前述Set-at-a-time的操作方式。关系代数中用到的运算符主要有以下的类型:
    在这里插入图片描述
    其中后面两种类型的运算符,也就是算术比较和逻辑运算符,都是用于辅助专门的关系运算符进行操作的,所以我们可以将关系代数的运算按运算符的不同分为以下两类:

    • 【传统的集合运算】将关系看作元组的集合,以元组作为元素来进行运算,这种运算是从关系的"水平"方向,也就是【行】的角度进行的,当中包括并、交、差以及笛卡尔积运算。
    • 【专门的关系运算】是为数据库的应用而引进的特殊运算,不仅仅涉及行运算,也涉及列运算,当中包括选取、投影、连接以及除法操作。

    从关系代数的完备性角度看,可以将操作分为基本操作和非基本操作:

    • 【基本操作】并、差、积、选取和投影,构成了关系代数完备的操作集。
    • 【非基本操作】可以用以上五种基本操作合成的所有其他操作。

    传统的集合运算.

    两个关系进行传统的集合运算时,对于这两个关系是需要满足一定的条件的,描述如下:
    在这里插入图片描述
    除了笛卡尔积运算外,其他的集合运算要求参加运算的关系必须满足上述的相容性限制。两个关系的基本运算是并和差,是无法用其它运算表达的运算。

    并 Union.

    R和S的并运算结果是R和S中的所有元组合并,并且那些重复的元组只出现一次,组成一个新的n元关系。对于关系数据库,记录的插入和添加可以通过并运算实现。并运算记作:
    在这里插入图片描述

    差 Difference.

    R和S差运算的结果是属于R而不属于S的所有元组组成的集合,即从R中删去S包含的部分,组成一个新的n元关系。对于关系数据库,记录的删除可以通过差运算实现。差运算记作:
    在这里插入图片描述

    交 Intersection.

    R和S交运算的结果由既属于R又属于S的元组,也就是R和S中相同的元组组成一个新的n元关系。交运算记作:
    在这里插入图片描述

    广义笛卡尔积 Extended Cartesian Product.

    两个分别为n元和m元的关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R中有x个元组,S中有y个元组,那么R和S的广义笛卡尔积有xy个元组,可以记作:
    在这里插入图片描述
    广义的笛卡尔积可以用于两关系的连接操作。
    最后我们以实际的例子结束传统的集合运算,下图是两个相容的关系R和S以及两个关系的各种传统集合运算结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    专门的关系运算.

    传统的集合运算,只是从行的角度进行,而要灵活地实现关系数据库多样的查询操作,必须引入专门的关系运算。在介绍专门的关系运算之前,为了叙述上的方便,先引入几个概念:

    • 设关系模式为R(A 1 _1 1,A 2 _2 2,…,A n _n n),它的一个关系为R,t∈R表示t是R的有一个元组,那么t[A i _i i]表示元组t相对于属性A i _i i的一个分量;
    • 给定一个关系R(X,Z),X和Z为属性组,定义当t[X]=x时,x在R中的像集Image Set为Z x _x x={t[Z]|t∈R,t[X]=x},它表示的是R中属性组X上值为x的那些元组在Z分量上的集合。

    选取Selection.

    选取运算是单目运算,它根据一定的条件从关系R中选择若干个元组,组成一个新的关系。选取操作记作:
    在这里插入图片描述
    其中σ为选取运算符,F是选取的条件。F是由运算对象(属性名、常数、简单函数)、算术比较运算符(>、≥、<、=、≠)和逻辑运算符(与、或、非)连接起来的逻辑表达式,其结果是逻辑值True或False,所以我们对于选取运算进行总结:它从关系R中选取那些使得逻辑表达式F为真的元组,是从行的角度进行的运算。以下面的关系为例,我们给出实际的选取运算:
    在这里插入图片描述
    在这里插入图片描述

    投影Projection.

    投影运算也是单目运算,关系R上的投影是从R中选择出若干属性列,组成新的关系,即对关系R在垂直方向上进行运算,从左到右按照指定的若干属性及顺序(意味着我们可以改变属性列的顺序,实际上关系中的属性列是可以交换位置的)取出相应列,并且要删除重复的元组。投影运算记作:
    在这里插入图片描述
    从其定义可以看出,投影运算是从列的角度进行的运算,这也是投影运算和选取运算最大的区别所在。以下面的关系为例,我们给出实际的投影运算:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    θ连接θJoin.

    θ连接运算是一个二元运算,其效果是从两个关系R和S的笛卡尔积中选取满足连接条件的元组,而后组成新的关系。设两个关系R和S,它们的属性列数分别为n和m,其中R中的属性可以进一步分解为属性集Z和X,即R=(Z,X),关系S可以进一步分解为属性集W和Y,即S=(W,Y)。如果我们认定X和Y是连接属性(需要X和Y的属性列数相等),那么关系R和S在连接属性X和Y上的θ连接,就是在R和S的笛卡尔积中选择那些X属性集上的分量与Y属性集上的分量满足θ比较条件的那些元组。新关系的列数为(n+m),即两个关系的列数和,记作:
    在这里插入图片描述
    其中θ代表的是一个算术比较运算符,称为θ连接。XθY是连接条件:

    • θ为"="时,称为等值连接;
    • θ为"<"时,称为小于连接;
    • θ为">"时,称为大于连接

    前面我们说过五种基本的操作,包括并、差、积、选取、投影,其中并没有连接运算。从连接运算的定义中,我们也不难发现,可以使用选取操作和广义笛卡尔积运算来表示:
    在这里插入图片描述
    除此之外,还有一种常用的连接称为自然连接,它是在等值连接的情况下,当连接属性X和Y有着相同的属性列时,去掉连接结果中那些相同的属性列。总结来说,自然连接是在广义笛卡尔积R×S中选出同名属性上符合相等条件的元组,再进行投影,去掉重复的同名属性,组成新的关系。
    在这里插入图片描述
    以下面的关系为例,我们给出实际的连接运算:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    关于选取、投影、连接运算的复杂操作:
    在这里插入图片描述

    除法Division.

    除法运算是二目运算,设有关系R(X,Y)和关系S(Y,Z),其中X、Y、Z是属性集合,并且R.Y和S.Y可以有不同的属性名,但对应属性必须出自相同的域。关系R除以关系S所得的商是一个新的关系P(X),P是R中满足下列条件的元组在属性集X上的投影:

    • 元组在X上的分量值x的像集Y x _x x包含了S在Y上的投影集合。

    形式化的表示如下:
    在这里插入图片描述


    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


    展开全文
  • 运算是我们在编程中常会遇到的操作,但仍然有很多开发者并不了解位运算,这就导致在遇到位运算时会“打退堂鼓”。实际上,位运算并没有那么复杂,只要我们了解其运算基础和运算符的运算规则,就能够掌握位运算的...
  • 运算放大器基本运算

    千次阅读 2017-10-27 15:49:17
    运算放大器组成的电路五花八门,令人眼花瞭乱,是模拟电路中学习的重点。在分析它的工作原理时倘没有抓住核心,往往令人头大。为此本人特搜罗天下运放电路之应用,来个“庖丁解牛”,希望各位从事电路板维修的同行,...
  • 2)运算器的核心是算术逻辑单元(ALU)。 3)运算器的操作种类来源于控制器,操作的数值来源于存储器。处理结果往往返回存储器(也可以暂时保存)。 4)运算器也包含许多通用的逻辑单元,暂存操作数,累加器(ACC)...
  • 定点除法运算

    千次阅读 2019-11-05 19:53:33
    计算机中,除法运算和乘法运算一样,是非常常用的一种运算。同样,除法运算在计算机中的实现也分为符号部分和数值部分两部分。 (1)符号位。符号位的确定和乘法运算的规则一致,除法运算的符号位无法通过转换补码...
  • 卷积运算与图像处理

    千次阅读 2019-08-09 09:32:50
    在介绍卷积神经网络之前,我们需要先了解以下卷积运算和互相关运算。很多时候,我们都说卷积神经网络在图像处理方面具有很大的优势,主要原因就在于卷积运算,所以接下来就主要从图像处理和卷积的联系入手进行分析。...
  • 运算方法与运算器——定点运算

    千次阅读 2020-04-19 23:57:59
    1、逻辑运算 计算机中逻辑运算主要有: 逻辑非:按位反 逻辑加:按位或 逻辑乘:按位与 逻辑异或:按位加 2、移位运算 左移n位等于乘2n 右移n位等于除2n (1)、移位与加法结合,实现乘除运算 (2)、无符号数的移位叫...
  • 定点运算,浮点运算,算术逻辑单元

    千次阅读 多人点赞 2018-12-16 04:31:22
    定点运算 (一)移位运算 1、移位运算的数学意义 先举一个例子:15m = 1500 cm,在这个变换过程中,就可以通过移位运算进行实现,实际上在这个等式中,小数点被隐含了,在15m和1500cm数值最后有一个小数点被隐含...
  • 1.线程池和CPU核心数的关系 一般说来,大家认为线程池的大小经验值应该这样设置:(其中N为CPU processors的个数) (1)如果是CPU密集型应用,则线程池大小设置为N+1(或者是N),线程的应用场景:主要是复杂算法 (2...
  • 计算机一级知识点:运算器、控制器一级主要考核微型计算机基础知识和使用办公软件及因特网(Internet)的基本技能。一级主要考核微型计算机基础知识和使用办公软件及因特网(Internet)的基本技能。以下是为大家分享的...
  • 对计科核心课程的关系的总结

    千次阅读 2017-04-23 15:07:43
    我们学校计科专业的核心课程有: 高等数学、计算机科学导论、C语言、数据库原理及应用、数据结构、概率论与数理统计、电路分析、计算机网络、计算机组成原理、离散数学、线性代数、电子技术基础、编译原理、操作系统...
  • 计算机组成原理---运算器(一)

    千次阅读 2019-06-16 22:13:14
    运算器 数据的表示与运算 进制之间的转换 定点数据的表示码:原码、反码、补码以及之间的关联与区别,运算,溢出监测 位移预算,原码定点数加减运算、补码定点数的加减运算、定点数乘除运算、溢出概念和判别方法 ...
  • 运算器的完整功能是进行什么

    千次阅读 2021-07-24 03:50:58
    运算器的完整功能是进行算术运算和逻辑运算运算器和控制器是CPU最重要的部件,其中运算器用来处理数据,它的主要功能是对二进制数码进行算术运算或逻辑运算。本教程操作环境:windows10系统、Dell G3电脑。运算器...
  • 运算器只能运算不能储存信息吗

    千次阅读 2021-07-27 03:30:19
    运算器不能储存信息,只能运算运算器是计算机中执行各种算术和逻辑运算操作的部件;运算器处理的数据来自存储器,处理后的结果数据通常送回存储器,或暂时寄存在运算器中。运算器只能运算,不能储存信息。运算器:...
  • 运算方法和运算

    千次阅读 2020-03-03 22:12:30
    一、基本的二进制加法/减法器 半加器不考虑进位 各种逻辑门的图形符号 ... 行(xing)波进位:串行进位,高位的运算要等待低位的进位传到才能执行,区别于并行进位或超前进位。 对行波进...
  • 微型计算机中运算器的主要功能是进行:算术运算和逻辑运算运算器是计算机中执行各种算术运算和逻辑运算操作的部件;运算器的基本功能是完成对各种数据的加工处理,例如算术四则运算,与、或、求反等逻辑运算,算术...
  • 一、CPU中的核心部分就是ALU了,ALU英文全称是 Arithmetic Logic Unit ,即算数逻辑运算单元。 二、小时候最早接触“算数”和“逻辑”的概念是用51单片机。那时候最简单,也是最有意思的莫过于流水灯了。点亮一个灯...
  • 数据库基础数据库介绍数据模型概念模型逻辑模型关系型数据库 写下博客用于自我复习、自我总结。 如有错误之处,请各位指出。 本数据库系列专栏,文章的重心将会是总结SQL语句的使用,而不会涉及到太多数据库本身或...
  • 计算机是如何运算

    万次阅读 多人点赞 2019-04-29 10:38:05
    2、计算机如何实现加法运算? 3、计算机如何在庞大的内存里面找数据? 4、计算机如何执行代码? 5、编程的本质是什么? 2.关键词 继电器,串联,并联,振荡器,计数器,地址,内存,RAM阵列,锁存器...
  • 二进制补码运算

    千次阅读 多人点赞 2020-07-23 13:52:43
    我们应该反过来看符号位,正是在补码运算中,存在第一位为0则是正数,为1则是负数这个规律,我们才方便地认定第一位为符号位,符号位跟人为定义没有任何关系(人为定义的符号位不可能满足数学规则参与数学运算)。...
  • 运算放大器工作原理

    万次阅读 多人点赞 2017-07-22 14:38:07
     运算放大器基本上可以算得上是模拟电路的基本需要了解的电路之一,而要想更好用好运放,透彻地了解运算放大器工作原理是无可避免,但是运放攻略太多,那不妨来试试这篇用电路图作为主线的文章来带你领略运算放大器...
  • 积分运算电路的设计方法详细介绍

    千次阅读 2019-07-01 14:17:34
    下图为以集成运算放大器为核心元件的基本反相积分运算电路,输入电压uI经电阻R加至运算放大器的反相输入端,C为反馈电容,引入电压并联负反馈,R‘为平衡电阻,uO为输出电压。 输入信号uI为占空比q=50%、幅值为±...
  • 比较不错的 C++矩阵运算

    万次阅读 2019-03-10 20:25:41
    目前使用比较广的C++矩阵运算库之一,是在C++下使用Matlab方式操作矩阵很好的选择,许多Matlab的矩阵操作函数都可以找到对应,这对习惯了Matlab的人来说实在是非常方便,另外如果要将Matlab下做研究的代码改写成C++...
  • 这里我们简化模型为简单的四则运算求解,如下: 1+223*309+(9-48/25) 输入的数字称为操作数 输入的运算符为‘+’、‘-’、‘*’、‘/’四则元素符 输入括号‘(’、')'称为界限符 任何一个算术表达式都...
  • 史上最全运放运算放大器知识讲解

    万次阅读 多人点赞 2019-07-18 10:09:13
    史上最全运放运算放大器知识讲解 原文:http://www.sohu.com/a/154282071_755644 调节和放大模拟信号,它是用途十分广泛的器件,接入适当的反馈网络,可用作精密的交流和直流放大器、有源滤波器滤波器的供应商、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 145,172
精华内容 58,068
关键字:

关系运算的核心