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


Posted in Python onSeptember 14, 2014

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

算术运算符

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

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

运算符 描述 实例
+ 加 - 两个对象相加 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

逻辑运算符

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

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

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

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

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

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

布尔类型的变量

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

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

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

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

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

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

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

布尔所创立的这套逻辑被称之为“布尔代数”。其中规定只有两种值,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

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

>>> 4>3 and 4<2
False

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

>>> 4<3 and 4<2
False

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

or

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

if A==True:
  return True
else:
  if B==True:
    return True
  else if B==False:
    return False

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

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

if A==True:     #如果A的值是True
  return True   #返回True,表达式最终结果是True
else:        #否则,也就是A的值不是True
  if B==True:   #看B的值,然后就返回B的值做为最终结果。
    return True
  else if B==False:
    return False
举例,根据上面的运算过程,分析一下下面的例子,是不是与运算结果一致?
>>> 4<3 or 4<9
True
>>> 4<3 or 4>9
False
>>> 4>3 or 4>9
True
not

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

>>> not(4>3)
False
>>> not(4<3)
True

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

Python 相关文章推荐
Python语言生成水仙花数代码示例
Dec 18 Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 Python
Python实现决策树C4.5算法的示例
May 30 Python
pycharm 实现显示project 选项卡的方法
Jan 17 Python
python redis 批量设置过期key过程解析
Nov 26 Python
pycharm无法导入本地模块的解决方式
Feb 12 Python
使用 Python ssh 远程登陆服务器的最佳方案
Mar 06 Python
python函数中将变量名转换成字符串实例
May 11 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
python制作抽奖程序代码详解
Jan 15 Python
Python爬虫基础讲解之请求
May 13 Python
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
May 31 Python
跟老齐学Python之玩转字符串(3)
Sep 14 #Python
跟老齐学Python之玩转字符串(2)
Sep 14 #Python
跟老齐学Python之玩转字符串(1)
Sep 14 #Python
跟老齐学Python之永远强大的函数
Sep 14 #Python
用Python实现QQ游戏大家来找茬辅助工具
Sep 14 #Python
跟老齐学Python之开始真正编程
Sep 12 #Python
跟老齐学Python之??碌某?? target=
Sep 12 #Python
You might like
第二节 对象模型 [2]
2006/10/09 PHP
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
jquery插件jSignature实现手动签名
2015/05/04 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
详解js图片轮播效果实现原理
2015/12/17 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
利用JS做网页特效_大图轮播(实例讲解)
2017/08/09 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
2017/11/20 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
发布你的Python模块详解
2016/09/15 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
关于python之字典的嵌套,递归调用方法
2019/01/21 Python
python opencv实现证件照换底功能
2019/08/19 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
如何利用python进行时间序列分析
2020/08/04 Python
Lookfantastic葡萄牙官方网站:欧洲第一大化妆品零售商
2018/03/17 全球购物
AMAVII眼镜官网:时尚和设计师太阳镜
2019/05/05 全球购物
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
开业庆典邀请函
2014/01/08 职场文书
品质主管岗位职责
2014/03/16 职场文书
商务英语专业求职信
2014/06/26 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
防溺水安全教育主题班会
2015/08/12 职场文书