【Python】学习笔记day3

Python
144
0
0
2024-08-02
标签   Python基础

一.运算符

1.算术运算符

运算符

描述

实例(设变量a=10,b=20)

+

加 , 两个对象相加

a + b 输出结果 30

-

减 , 得到负数或是一个数减去另一个数

a - b 输出结果 -10

*

乘 , 两个数相乘或是返回一个被重复若干次的字符串

a * b 输出结果 200

/

除 , x除以y

b / a 输出结果 2

%

取模 , 返回除法的余数

b % a 输出结果 0

**

幂 , 返回x的y次幂

a**b 为10的20次方, 输出结果 100000000000000000000

//

取整除 , 返回商的整数部分(向下取整)

9 // 2 输出结果 4 -9 // 2 输出结果 -5

算术运算符的运算顺序: 先算乘方,然后是乘除,最后算加减. 如果运算过程中想修改默认的运算顺序,就需要加上 ( ) .
在Python中,0/0.0都不能作为除数.(会出现抛出异常,程序被终止).
除法的截断: 如果是整数/整数,除不尽,得到的就是小数,不会出现截断的情况.
**进行的乘方运算,既支持整数次方,也支持小数次方.(即开方运算)
// 表示地板除法(取整除法) ,其实就相当于C语言里的除法.但要注意负数运算是向下取整!
Python中,字符串之间可以相加, 整数和浮点数可以相加, 整数和布尔值可以相加 (True为1,False为0)但是没有意义.
Python中只有字符串类型,没有字符类型!

2.关系运算符

像< <= > >= == !=这一系列的运算符称为关系运算符,它们是在比较操作数之间的关系.

其中:

  • <=是 小于等于
  • >=是 大于等于
  • ==是 等于
  • !=是 不等于

如果关系符合,则表达式返回True.如果关系不符合,则表达式返回False.如:

a=10
b=20

print(a<b)
print(a>b)
print(a<=b)
print(a>=b)
print(a==b)
print(a!=b)

运行结果:

关系运算符比较字符串

关系运算符不仅能比较数字,还能比较字符串,如:

a="hello"
b="world"

print(a<b)
print(a>b)
print(a<=b)
print(a>=b)
print(a==b)
print(a!=b)

运行结果:

字符串的比较逻辑字典序. 先看首字母在字母表上的顺序,谁小,谁就排在前面. 如果首字母相同,依次比较第二个字母,第三个字母...... 如果直到最后一个字母都相同,则两字符串相等. 字符串在字典上越靠前,就越小,越靠后,就越大.

注意:中文字符串在Python中可以比较大小,但比较的结果没有任何意义.

因为在计算机里,表示中文,是用多个字节构成的一个比较大的数字来进行比较的.

在某些场景中需要对中文进行排序时,需要借助第三方库来实现.

关于字符串能否使用==/!=来比较:

Python中支持连续大于连续等于(链式赋值)的写法,这一点在C语言中是不支持的,如:

a=10
print(0<a<20) #判定a是否大于0且小于20

运行结果:

关系运算符比较浮点数

针对浮点数来说,使用==比较相等,会存在一定的风险!!!

因为浮点数在内存中的存储和表示,是可能存在误差的!!!

(有关浮点数在内存中的存储还不清楚的朋友可以移步我的这篇博客【C数据结构】整形和浮点型在内存中的存储,里面对整数和浮点数在内存中的存储方式做了较为生动的图解)

这样的误差在进行算术运算的时候就可能被放大,从而导致==的判定出现误判.

如:

我们逐步拆解一下这个表达式的问题:

print(0.1+0.2==0.3)

print(0.1)
print(0.2)
print(0.1+0.2)
print(0.3)

输出结果:

可以看到,虽然0.3和0.3000000000000004已经非常接近了.

但是如果直接使用==进行比较,仍然会出现False的情况.

正确的比较浮点数相等:作差,看差值是否小于预期的误差范围!

如:

a= 0.1 + 0.2
b= 0.3

#看a-b是否是一个非常小的数字,是否在误差范围之内
print(-0.000001<(a-b)<0.000001)

运行结果:

3.逻辑运算符

and

并且

两侧操作数均为True,表达式的值为True.否则为 False.(一假即假)

or

或者

两侧操作数均为False,表达式的值为False,否则为True(一真即真)

not

逻辑取反

只有一个操作数.操作数为True,则返回False,操作数为False,则返回True.

短路求值:

是逻辑运算符中的重要细节.

对于and操作来说,如果左侧表达式为False,那么整体的值一定是False,右侧的表达式不必求值. 对于or操作来说,如果左侧表达式为True,那么整体的值一定是true,右侧的表达式不必求值.

验证方法:

下面这个程序如果没有短路求值的话,那么接着运行,用0做除数会导致程序抛出异常

a=10
b=20
print(a>b and 10/0==1)  #此处如果没有短路求值的话,那么接着运行用0做除数会导致程序抛出异常

运行结果:

可以看到,程序成功运行,并给出了表达式的判断结果.

如果将and左右的表达式交换位置:

a=10
b=20
print(10/0==1 and a>b)

运行结果就会抛出异常:

可见,由此可以验证短路求值是真实存在的.

4.赋值运算符

运算符

描述

实例

=

简单的赋值运算符

c = a + b 将 a + b 的运算结果赋值为 c

+=

加法赋值运算符

c += a 等效于 c = c + a

-=

减法赋值运算符

c -= a 等效于 c = c - a

*=

乘法赋值运算符

c *= a 等效于 c = c * a

/=

除法赋值运算符

c /= a 等效于 c = c / a

%=

取模赋值运算符

c %= a 等效于 c = c % a

**=

幂赋值运算符

c **= a 等效于 c = c ** a

//=

取整除赋值运算符

c //= a 等效于 c = c // a

=表示赋值,将右侧的值填充到左侧的空间中.

因此=左侧必须是变量,不能是无法修改的常量或常量表达式.

使用复合赋值运算符时程序会先读取变量,然后计算,最后赋值,因此必须保证左侧的变量是已经被定义过的,否则程序就会因为第一步读取变量失败而报错.

Python中不支持++/--这样的自增操作!

链式赋值:

下面这种链式赋值的意思就是先把20赋值给b,再把b赋值给a.

a=b=20

该行代码相当于:

a=20
b=20

虽然链式赋值在语法上是允许的,但一般在编程中还是不建议使用,因为代码可读性会很低.

多元赋值:

下面这种多元赋值的意思是,把10赋值给a,把20赋值给b.

a,b=10,20

多元赋值也不推荐使用,但可以使用多元赋值帮助我们解决一些特殊的问题:

如,当我们需要交换两个变量的值时

传统方法是再创建一个临时变量来完成两个变量的互换,如:

a=10
b=20

tmp=a
a=b
b=tmp

但使用多元赋值时,我们可以直接一步就完成交换,如:

a=10
b=20

a,b=b,a

今日感悟:超额付出,而不是等额付出,期待超额回报.