点击蓝字 一起划水

Review:

Python零基础入门(一):对Python的简单认识

Python零基础入门(二):字符串基础

Python零基础入门(三):字符串进阶

Python零基础入门(四):输入输出

Python零基础入门(六):数字

中间好像少了什么的亚子

好吧,其实是我记错了,我以为上次应该从六开始,直接把五扔下了

为了保证顺序的一致性,我决定把五撂过去,接着上次的六后面开始

零、目标

1.算数运算符2.比较运算符3.赋值运算符4.逻辑运算符5.成员运算符6.身份运算符*7.位运算符**为选看,不是重点看起来种类很多,但是一敲代码发现这些东西都是非常简单的,并没有想象中那么难。“纸上得来终觉浅,绝知此事要躬行”这句诗说的就这个道理吧。一、算数运算符

其实我们前面接触过挺多算数运算符的。

+ 加法运算
- 减法运算
* 乘法运算
/ 除法运算,返回浮点数
// 取整的除法运算(去尾法)
% 取模运算(求余运算)
** 幂运算,a**b等价于a的b次方

Examples:

需要注意的是,这里的乘号"*"在运算中是不可省略的。

数学中我们可以讲很多参数写在一起来表示相乘,但是不可以在编程中这样写。比如说,我们都知道:

但是在程序设计中,4ac的乘号不能省略,Δ也应该用符合规则的变量名去替代。

delta = b ** 2 - 4 * a * c

二、比较运算符

== 比较两个数是否相等
!= 比较两个数是否不等
> 比较前者是否大于后者
< 比较前者是否小于后者
>= 比较前者是否大于等于后者
<= 比较前者是否小于等于后者

每一个都在比较两个数是否xxx,所以如果结果为“是”则返回True,结果为“否”返回False,True和False都是布尔(bool)类型变量,不知道你是否还记得呢?

三、赋值运算符

前面也提到过,在数学上,x=x+1中的是“等于”的意思,而在编程语言中,"="是“赋值”的意思,将"="右边的值赋值给"="左边。

所以,x=x+1在数学上是无解的,或者是不成立的,但是在编程语言中,表示的是将变量x做了加1的操作。

= 赋值运算符,计算右侧的值,然后赋给左边
+= 加法赋值运算符,a+=b等价于a=a+b
-= 减法赋值运算符,a-=b等价于a=a-b
*= 乘法赋值运算符,a*=b等价于a=a*b
/= 除法赋值运算符,a/=b等价于a=a/b
//= 整除赋值运算符,a//=b等价于a=a//b
%= 求余赋值运算符,a%=b等价于a=a%b
**= 幂赋值运算符,a**=b等价于a=a**b

Examples:

上面也仅仅是选取了一部分赋值运算符作为例子,剩下的还是要自己多多使用。

赋值运算符还有一个很高级的用法,就是对多个变量同时赋值。

学习C语言的同学一定写过或者间接用过这个函数:

void swap(int a, int b){    int temp = a;    b = a;    a = temp;}

或者是这样:(我个人更常用位运算,总觉得能节省空间和时间)

void swap(int a, int b){    a = a ^ b;  // "^"表示按位异或    b = a ^ b;    a = a ^ b;}

没学过C语言的小问号可能会问:这个东西是干吗用的呀?

这个东西是用来将两个变量的值互换的。

在高中数学课本里的算法部分提到了两个求最大公约数的非常神奇的算法:辗转相除法和更相减损术。

我们以更相减损术为例。

可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。

《九章算术》(懒得写现代汉语算法了,古文也是可以读的)

里面“以少减多”会涉及到变量的互换。比如a和b是两个参与运算的数字,刚开始的时候a>b。如果我们操作a-=b,操作完之后如果a>b,则继续a-=b,如果ab。这个时候只需要一句:

a, b = b, a

就可以啦!

友情提供算法函数*

# greatest common divisor# We assume that a > b.def gcd(a, b):    reduction = 1    while True:        if not (a & 1 or b & 1):            # 可半者半之            a //= 2            b //= 2            reduction *= 2        else:            # 不可半者            break    while True:        # 副置分母、子之数,以少减多        a -= b  # 更相减损,求其等也        if a == b:            return a * reduction        else:            if a < b:                a, b = b, a  # 交换变量

这通操作是不是有点看傻了呢?

代码看不懂没关系,大学的应该用不到,高中的迟早也要学(指算法),里面的很多知识都会在后面讲到的。现在看不懂的def、if、else、not、&都会讲的。

四、逻辑运算符

这个东西在高中就见过了。

and 逻辑“与” p∧q
or 逻辑“或” p∨q
not 逻辑“非” ﹁p

总的来说,就是:

逻辑“与”:p和q都为True,则(p and q)为True;其他情况,(p and q)全为False。

逻辑“或”:p和q都为False,则(p or q)为False;其他情况,(p or q)全为True。

逻辑“非”:p为True,not p就是False;p为False,not p就为True。

示例就是刚刚的更相减损术,在第六行有所体现:

# greatest common divisor# We assume that a > b.def gcd(a, b):    reduction = 1    while True:        if not (a & 1 or b & 1):            a //= 2            b //= 2            reduction *= 2        else:            break    while True:        a -= b        if a == b:            return a * reduction        else:            if a < b:                a, b = b, a

第六行我之所以加括号是担心运算符之间混淆。

我们令a & 1为p,b & 1为q,这一行就是not (p or q)。

如果不加括号的话,你可能会担心not p or q会被解释为(not p) or q。

因为我没有记忆计算符的优先级,所以我加了括号。

五、成员运算符

成员运算符为"in",用来判断某个值是否在某个序列中出现。

有则返回True,没有则返回False。

Examples:

当然,也有not和in的搭配,也很常用。下面是一个代码片段:

if name not in name_list:    print("此人不在名单中")else:    print("此人在名单中")
六、身份运算符*

身份运算符为is。

我们曾介绍过id(),当时是用它来查看变量内容所在的小房间号。

这里的is所做的事情就是判断两个变量的内容是否在一个小房间里的。

a is b就等价于id(a)==id(b),这两个表达式都会返回一个布尔值,用来表明该表达式的对与错。如果a与b所在的内存地址相同,则返回True,否则返回False。

对于入门来说,了解关于is的以上使用说明就足够了,其实不了解也没问题。

本部分接下来的内容有点难以理解,大可跳过。

上面这段代码中,我在内存(房子)中开辟了一块内存空间(小房间),用来存储字符串“huaji”,然后让变量a与b都指向这一块内存空间。并不是我们想象的那样——分别开两个房间,里面放的都是"huaji"。

这样做的好处就是节省内存。

我们再换一个数字试试看:

这和上面的的字符串的解释基本一样,只需将上图中的"huaji"换成数字1即可。

但是,并不是所有的字符串和数字都是这样的。

究其原因,是因为Python中设置了一个“小整数对象池”。

整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间。

IDLE对小数值整数的定义是 [-5, 256],小整数字符串是只包含字母、数字、下划线的字符串, 这些整数对象是提前建立好的,不会被垃圾回收,一个相同的值,永远对应同一个内存地址。

详情请见:

https://blog.csdn.net/BGONE/article/details/93311990?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

也可以用"is not"搭配。此时,a is not b等价于id(a) != id(b)。

七、位运算符*

入门的盆友们可以直接略过此部分。

涉及到的数字都会被转换为二进制数字时候按位运算。

"&":按位与运算——对应位全1得1,其他得0

"|":按位或运算——对应位全0得0,其他得1

"^":按位异或运算——对应位相同得0,不同得1

"~":按位取反运算——1变0,0变1

学过大学计算机的同学应该还记得原码、反码、补码这几个比较让人头大的东西。我们这里以二进制数1010为例,也就是十进制的10。1010在计算机中是以00001010(补码)存储的,~00001010=11110101,首位为1,说明是个负数,我们要用11110101求这个负数,也就是为一个补码求逆。步骤:1.先减一得到反码:11110100
2.除符号位以外取反得到原码:10001011
3.转换,得到数字:-11
了解原理后,我们可以很容易得到一个公式:~x = -(x+1)

"<

例如:3 << 2

3的二进制表示为00000011,左移两位为00001100,也就是十进制的12。

在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
">>":右移运算——按二进制形式把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。

右移一位相当于除以2,右移n位相当于除以2的n次方,结果取整数。

来点创造性的思考,自己去IDLE里试试看有没有">>="、"<<="、"&="、"|="、"^="这样的赋值号。

我也是写到这里突发奇想,因为前面也是双目运算符(对两个数字操作的运算符)和赋值号结合形成一个新的赋值号,这里的很多运算符也是双目运算符(除了"~")。

bigdecimal判断大于零_Python零基础入门(七):运算符相关推荐

  1. 【php基础入门】运算符、流程控制语句及单双引号区别和模块化编程的使用详解

    目录 字符串的单引号和双引号区别 PHP 运算符 算数运算符 字符运算符 关系运算符 逻辑运算符 赋值运算符 错误抑制符 三元运算符 PHP 流程控制 分支语句 循环语句 模块化编程 今日相关函数 今 ...

  2. C语言判断(条件)语句基础入门教学

    C 判断(条件) 判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的). C 语言把任何非零和非空的值假定为 true,把零或 n ...

  3. BigDecimal 判断大于小于

    BigDecimal a = new BigDecimal (101); BigDecimal b = new BigDecimal (111);   //使用compareTo方法比较 //注意:a ...

  4. python面向对象六大原则_Python面向对象基础入门之编码细节与注意事项

    前言 在前面,我用了3篇文章解释python的面向对象: 本篇是第4篇,用一个完整的示例来解释面向对象的一些细节. 例子的模型是父类Employe和子类Manager,从类的定义开始,一步步完善直到类 ...

  5. JS基础入门 Javascript运算符

    Javascript运算符 1.运算符(操作符) 1.1运算符的分类 运算符(operator)也被称为操作符,是用于实现赋值.比较和执行算数运算等功能的符号 Javascript中常用的运算符有: ...

  6. C语言 ##运算符 - C语言零基础入门教程

    目录 一.##运算符简介 二.##运算符使用 1.##运算符常规使用 2.##运算符定义结构体 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础 ...

  7. C语言 #运算符 - C语言零基础入门教程

    目录 一.#运算符简介 二.#运算符使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.#运算符简介 在 C 语言关于 define ...

  8. C语言条件判断 if / else - C语言零基础入门教程

    目录 一.C 语言条件判断 if 1.if 语法 2.if 实战 二.C 语言条件判断 if / else 1.if / else 语法 2.if / else 实战 三.猜你喜欢 零基础 C/C++ ...

  9. Python 条件判断 if/else - Python零基础入门教程

    目录 一.Python 条件判断 if/else 简介 二.Python 条件判断 if/else 实战 三.重点总结 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 & ...

最新文章

  1. 如何构建顶部导航条_如何构建导航栏
  2. 视觉语言研究进展到哪了?CVPR2021视觉语言研究全面概述,附430页ppt
  3. 使用phpqrcode生成二维码时候显示不正常,有一个小方块
  4. python读取mtcars数据集并实现以下操作_Python可视化43 | plotnine≈R语言ggplot2,43plotnineR...
  5. php上传手机文件到服务器,安卓上传文件至PHP服务器(示例代码)
  6. /usr/include/c++/6/cstdlib:75:25: fatal error: stdlib.h: No such file or directory
  7. ASP.NET MVC (一、控制器与视图)
  8. 恢复html的初始选定状态,Adobe Photoshop
  9. 设计模式 之 建造者
  10. struts2框架之文件下载(参考第三天学习笔记)
  11. php新闻列表排序,javascript 新闻列表排序简单封装
  12. Unity 官方标准资源下载(standard assets)2种方式
  13. HashMap底层原理实现源码分析
  14. 计算机系统应用 莫军,Configuration tool for ARINC 653 operating systems
  15. 《学习Oracle从这里开始》之常用SQL篇
  16. kaggle:Quora Insincere Questions Classification
  17. 程序员不过愚人节???
  18. [转]PHP编码规范
  19. 创新驱动国产介入医疗设备崛起 唯迈医疗携极光平板DSA亮相新疆介入放射学年会
  20. 蓝牙 BLE 协议学习: 有关概念介绍

热门文章

  1. scale Database
  2. 微信浏览器禁止页面下拉查看网址
  3. Android 之 LogDog
  4. Info.plist中常用的key简介
  5. Http:Get、Post、Put、Delete、Head、Options详解
  6. mysql5.5以上my.ini中设置字符集
  7. [20160223]检查redo日志的完整性.txt
  8. 如何在present出来的viewController里使用push方法
  9. 阶乘与斐波那契数的理解
  10. 【FI模块学习笔记】 实收资本概述