跟老齐学Python之眼花缭乱的运算符

WBOY
Release: 2016-06-16 08:42:02
Original
1218 people have browsed it

在计算机高级中语言,运算符是比较多样化的。其实,也都源于我们日常的需要。

算术运算符

前面已经讲过了四则运算,其中涉及到一些运算符:加减乘除,对应的符号分别是:+ - * /,此外,还有求余数的:%。这些都是算术运算符。其实,算术运算符不止这些。根据中学数学的知识,看官也应该想到,还应该有乘方、开方之类的。

下面列出一个表格,将所有的运算符表现出来。不用记,但是要认真地看一看,知道有那些,如果以后用到,但是不自信能够记住,可以来查。

运算符 描述 实例
+ 加 - 两个对象相加 10+20 输出结果 30
- 减 - 得到负数或是一个数减去另一个数 10-20 输出结果 -10
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 10 * 20 输出结果 200
/ 除 - x除以y 20/10 输出结果 2
% 取余 - 返回除法的余数 20%10 输出结果 0
** 幂 - 返回x的y次幂 10**2 输出结果 100
// 取整除 - 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0

是不是看着并不陌生呀。这里有一个建议给看官,请打开你的IDLE,依次将上面的运算符实验一下。

列为看官可以根据中学数学的知识,想想上面的运算符在混合运算中,应该按照什么顺序计算。并且亲自试试,是否与中学数学中的规律一致。(应该是一致的,计算机科学家不会另外搞一套让我们和他们一块受罪。)

比较运算符

所谓比较,就是比一比两个东西。这在某国是最常见的了,做家长的经常把自己的孩子跟别人的孩子比较,唯恐自己孩子在某方面差了;官员经常把自己的工资和银行比较,总觉得少了。

在计算机高级语言编程中,任何两个同一类型的量的都可以比较,比如两个数字可以比较,两个字符串可以比较。注意,是两个同一类型的。不同类型的量可以比较吗?首先这种比较没有意义。就好比二两肉和三尺布进行比较,它们谁大呢?这种比较无意义。所以,在真正的编程中,我们要谨慎对待这种不同类型量的比较。

但是,在某些语言中,允许这种无意思的比较。因为它在比较的时候,都是将非数值的转化为了数值类型比较。这个后面我们会做个实验。

对于比较运算符,在小学数学中就学习了一些:大于、小于、等于、不等于。没有陌生的东西,python里面也是如此。且看下表:

以下假设变量a为10,变量b为20:

运算符 描述 实例
== 等于 - 比较对象是否相等 (a == b) 返回 False。
!= 不等于 - 比较两个对象是否不相等 (a != b) 返回 true.
> 大于 - 返回x是否大于y (a > b) 返回 False。
小于 - 返回x是否小于y (a
>= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
小于等于 - 返回x是否小于等于y。 (a

上面的表格实例中,显示比较的结果就是返回一个true或者false,这是什么意思呢。就是在告诉你,这个比较如果成立,就是为真,返回True,否则返回False,说明比较不成立。

请按照下面方式进行比较操作,然后再根据自己的想象,把比较操作熟练熟练。

>>> a=10
>>> b=20
>>> a>b
False
>>> a<b
True
>>> a==b
False
>>> a!=b
True
>>> a>=b
False
>>> a<=b
True
>>> c="5"  #a、c是两个不同类型的量,能比较,但是不提倡这么做。
>>> a>c
False
>>> a<c
True
Copy after login

逻辑运算符

首先谈谈什么是逻辑,韩寒先生对逻辑有一个分类:

逻辑分两种,一种是逻辑,另一种是中国人的逻辑。————韩寒

这种分类的确非常精准。在很多情况下,中国人是有很奇葩的逻辑的。但是,在python中,讲的是逻辑,不是中国人的逻辑。

逻辑(logic),又称理则、论理、推理、推论,是有效推论的哲学研究。逻辑被使用在大部份的智能活动中,但主要在哲学、数学、语义学和计算机科学等领域内被视为一门学科。在数学里,逻辑是指研究某个形式语言的有效推论。

Copy after login

关于逻辑问题,看官如有兴趣,可以听一听《国立台湾大学公开课:逻辑》

下面简单理解一下逻辑问题。

布尔类型的变量

在所有的高级语言中,都有这么一类变量,被称之为布尔型。从这个名称,看官就知道了,这是用一个人的名字来命名的。

乔治·布尔(George Boole,1815年11月-1864年,),英格兰数学家、哲学家。

乔治·布尔是一个皮匠的儿子,生于英格兰的林肯。由于家境贫寒,布尔不得不在协助养家的同时为自己能受教育而奋斗,不管怎么说,他成了19世纪最重要的数学家之一。尽管他考虑过以牧师为业,但最终还是决定从教,而且不久就开办了自己的学校。

在备课的时候,布尔不满意当时的数学课本,便决定阅读伟大数学家的论文。在阅读伟大的法国数学家拉格朗日的论文时,布尔有了变分法方面的新发现。变分法是数学分析的分支,它处理的是寻求优化某些参数的曲线和曲面。

1848年,布尔出版了《The Mathematical Analysis of Logic》,这是他对符号逻辑诸多贡献中的第一次。

1849年,他被任命位于爱尔兰科克的皇后学院(今科克大学或UCC)的数学教授。1854年,他出版了《The Laws of Thought》,这是他最著名的著作。在这本书中布尔介绍了现在以他的名字命名的布尔代数。布尔撰写了微分方程和差分方程的课本,这些课本在英国一直使用到19世纪末。
由于其在符号逻辑运算中的特殊贡献,很多计算机语言中将逻辑运算称为布尔运算,将其结果称为布尔值。

Copy after login

请看官认真阅读布尔的生平,立志呀。

布尔所创立的这套逻辑被称之为“布尔代数”。其中规定只有两种值,True和False,正好对应这计算机上二进制数的1和0。所以,布尔代数和计算机是天然吻合的。

所谓布尔类型,就是返回结果为1(True)、0(False)的数据变量。

在python中(其它高级语言也类似,其实就是布尔代数的运算法则),有三种运算符,可以实现布尔类型的变量间的运算。

布尔运算

看下面的表格,对这种逻辑运算符比较容易理解:

(假设变量a为10,变量b为20)

运算符 描述 实例
and 布尔"与" - 如果x为False,x and y返回False,否则它返回y的计算值。 (a and b) 返回 true。
or 布尔"或" - 如果x是True,它返回True,否则它返回y的计算值。 (a or b) 返回 true。
not 布尔"非" - 如果x为True,返回False。如果x为False,它返回True。 not(a and b) 返回 false。

and

and,翻译为“与”运算,但事实上,这种翻译容易引起望文生义的理解。先说一下正确的理解。A and B,含义是:首先运算A,如果A的值是true,就计算B,并将B的结果返回做为最终结果,如果B是False,那么A and B的最终结果就是False,如果B的结果是True,那么A and B的结果就是True;如果A的值是False ,就不计算B了,直接返回A and B的结果为False.

比如:

4>3 and 4<9,首先看4>3的值,这个值是True,再看4<9的值,是True,那么最终这个表达式的结果为True.

>>> 4>3 and 4<9
True
Copy after login

4>3 and 4<2,先看4>3,返回True,再看4<2,返回的是False,那么最终结果是False.

<code>>>> 4>3 and 4<2
False</code>
Copy after login

4<3 and 4<9,先看4<3,返回为False,就不看后面的了,直接返回这个结果做为最终结果。

<code>>>> 4<3 and 4<2
False</code>
Copy after login

前面说容易引起望文生义的理解,就是有相当不少的人认为无论什么时候都看and两边的值,都是true返回true,有一个是false就返回false。根据这种理解得到的结果,与前述理解得到的结果一样,但是,运算量不一样哦。

or

or,翻译为“或”运算。在A and B中,它是这么运算的:

<code><pre class="php" style="box-sizing: border-box; border-bottom: 0px; border-left: 0px; padding-bottom: 10px; text-transform: none; background-color: rgb(245,245,245); text-indent: 0px; margin: 20px 0px; padding-left: 10px; letter-spacing: normal; padding-right: 10px; display: block; font: 0.92em/1.3 Menlo, Monaco, Consolas, 'Courier New', monospace; word-wrap: break-word; color: rgb(51,51,51); overflow: auto; word-break: break-all; border-top: 0px; border-right: 0px; word-spacing: 0px; padding-top: 10px; border-top-left-radius: 2px; border-top-right-radius: 2px; border-bottom-right-radius: 2px; border-bottom-left-radius: 2px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">if</span> A==<span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">True</span>:
  <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">return</span> <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">True</span>
<span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">else</span>:
  <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">if</span> B==<span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">True</span>:
    <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">return</span> <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">True</span>
  <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">else</span> <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">if</span> B==<span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">False</span>:
    <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">return</span> <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">False</span>
Copy after login

上面这段算是伪代码啦。所谓伪代码,就是不是真正的代码,无法运行。但是,伪代码也有用途,就是能够以类似代码的方式表达一种计算过程。

看官是不是能够看懂上面的伪代码呢?下面再增加上每行的注释。这个伪代码跟自然的英语差不多呀。

<code><pre class="php" style="box-sizing: border-box; border-bottom: 0px; border-left: 0px; padding-bottom: 10px; text-transform: none; background-color: rgb(245,245,245); text-indent: 0px; margin: 20px 0px; padding-left: 10px; letter-spacing: normal; padding-right: 10px; display: block; font: 0.92em/1.3 Menlo, Monaco, Consolas, 'Courier New', monospace; word-wrap: break-word; color: rgb(51,51,51); overflow: auto; word-break: break-all; border-top: 0px; border-right: 0px; word-spacing: 0px; padding-top: 10px; border-top-left-radius: 2px; border-top-right-radius: 2px; border-bottom-right-radius: 2px; border-bottom-left-radius: 2px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">if</span> A==<span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">True</span>:     <span class="comment" style="box-sizing: border-box; font-style: italic; color: rgb(153,153,136)">#如果A的值是True</span>
  <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">return</span> <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">True</span>   <span class="comment" style="box-sizing: border-box; font-style: italic; color: rgb(153,153,136)">#返回True,表达式最终结果是True</span>
<span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">else</span>:        <span class="comment" style="box-sizing: border-box; font-style: italic; color: rgb(153,153,136)">#否则,也就是A的值不是True</span>
  <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">if</span> B==<span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">True</span>:   <span class="comment" style="box-sizing: border-box; font-style: italic; color: rgb(153,153,136)">#看B的值,然后就返回B的值做为最终结果。</span>
    <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">return</span> <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">True</span>
  <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">else</span> <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">if</span> B==<span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">False</span>:
    <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">return</span> <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">False</span>
Copy after login
举例,根据上面的运算过程,分析一下下面的例子,是不是与运算结果一致?
<code><pre class="python" style="box-sizing: border-box; border-bottom: 0px; border-left: 0px; padding-bottom: 10px; text-transform: none; background-color: rgb(245,245,245); text-indent: 0px; margin: 20px 0px; padding-left: 10px; letter-spacing: normal; padding-right: 10px; display: block; font: 0.92em/1.3 Menlo, Monaco, Consolas, 'Courier New', monospace; word-wrap: break-word; color: rgb(51,51,51); overflow: auto; word-break: break-all; border-top: 0px; border-right: 0px; word-spacing: 0px; padding-top: 10px; border-top-left-radius: 2px; border-top-right-radius: 2px; border-bottom-right-radius: 2px; border-bottom-left-radius: 2px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="prompt" style="box-sizing: border-box; color: rgb(153,0,115)">>>> </span><span class="number" style="box-sizing: border-box; color: rgb(0,153,153)">4</span><<span class="number" style="box-sizing: border-box; color: rgb(0,153,153)">3</span> <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">or</span> <span class="number" style="box-sizing: border-box; color: rgb(0,153,153)">4</span><<span class="number" style="box-sizing: border-box; color: rgb(0,153,153)">9</span>
<span class="built_in" style="box-sizing: border-box; color: rgb(0,134,179)">True</span>
<span class="prompt" style="box-sizing: border-box; color: rgb(153,0,115)">>>> </span><span class="number" style="box-sizing: border-box; color: rgb(0,153,153)">4</span><<span class="number" style="box-sizing: border-box; color: rgb(0,153,153)">3</span> <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">or</span> <span class="number" style="box-sizing: border-box; color: rgb(0,153,153)">4</span>><span class="number" style="box-sizing: border-box; color: rgb(0,153,153)">9</span>
<span class="built_in" style="box-sizing: border-box; color: rgb(0,134,179)">False</span>
<span class="prompt" style="box-sizing: border-box; color: rgb(153,0,115)">>>> </span><span class="number" style="box-sizing: border-box; color: rgb(0,153,153)">4</span>><span class="number" style="box-sizing: border-box; color: rgb(0,153,153)">3</span> <span class="keyword" style="box-sizing: border-box; color: rgb(51,51,51); font-weight: bold">or</span> <span class="number" style="box-sizing: border-box; color: rgb(0,153,153)">4</span>><span class="number" style="box-sizing: border-box; color: rgb(0,153,153)">9</span>
<span class="built_in" style="box-sizing: border-box; color: rgb(0,134,179)">True</span>
Copy after login
not

not,翻译成“非”,窃以为非常好,不论面对什么,就是要否定它。

>>> not(4>3)
False
>>> not(4<3)
True
Copy after login

关于运算符问题,其实不止上面这些,还有呢,比如成员运算符in,在后面的学习中会逐渐遇到。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template