运算符和表达式

Posted sunbinary

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运算符和表达式相关的知识,希望对你有一定的参考价值。

Date: 2019-05-13

Author: Sun

1. 赋值语句

赋值语句

上节变量赋值可知,赋值语句主要用于实现给变量分配对象过程

python中常见赋值语句如下表:

运算 解释
a=100 基本形式
a,b = 100,200 元组赋值
[a, b] = [100, 200] 列表赋值(位置性)
a,b,c = ‘ABC‘ 序列赋值(通用性)
a,b = [10,20] 序列赋值(通用性)
a,*b = ‘hello‘ 扩展的序列解包(python3中特有)
a = b = c = 10 多目标赋值
a += 1 增强赋值

2.关系运算

关系运算就是比较运算,如果表达式成立,返回True,否则返回False。关系运算的结果是布尔值。

运算符 示例 说明
== a == b a和b相等,结果是True,a和b不相等结果为False
!= a != b a不等于b 结果为True,否则结果为True
> a > b a大于b结果为True,否则为False
>= a >= b a大于等于b结果为True,否则为False
< a < b a小于b结果为True,否则为False
<= a <= b a小于等于b结果为True,否则为False

注意:

  • 优先级: 比较运算符优先级相同

  • 从左向右算

  • 可以这样算:1 < a < 3 等价于 a > 1 and a < 3

3 逻辑运算

逻辑运算符可以用于构造复杂条件。逻辑运算符包括:

  • 逻辑与 and 对应汉语的意思是“并且” 、 “同时”
  • 逻辑或 or 对应汉语意思为"或者"
  • 逻辑非 not 对应汉语意思为”相反“

在逻辑运算中,False、None、0、0.0、‘’(空字符串)被看做假(False),其它的看做真(True)

3.1 逻辑与

a b a and b
True True True
True False False
False True False
False False False

小结:真真为真,有假为假

逻辑与表达式的值:a and b,如果a为假,则结果是a的值,否则结果是b的值

3.2 逻辑或

a b a or b
True True True
True False True
False Ture True
False False False

小结:有真为真,假假为假

逻辑或表达式的值: a or b,如果a为真,则结果为a的值,否则结果是b的值

3.3 逻辑非

a not a
True False
False True

小结:真则为假,假则为真

逻辑非表达式的值:!a ,如果a为真,则结果为假,否则结果为真

3.4 短路计算

  • 对于逻辑与表达式 a and b,如果a为假,则不计算b
  • 对于逻辑或表达式 a or b ,如果a为真,则不计算b

3.5 注意事项

  • 优先级 not > and >or

4.身份运算符

is: 判断两个标识符是否引用自同一个实体【对象】,比较的是两个对象的id是否一样,如果相同为真,否则为假

is not:判断两个标识符是不是引用自不同的实体【对象】如果两个对象的id不同结果为真,否则为假

id()函数获取实体的id(地址)

注意:is和==的区别

is用于判断两个变量引用实体是否为同一个【id】

==用于判断两个变量的值是否相同,但id不一定相同

5.成员运算符

主要应用在列表中

in:如果在指定的列表中找到指定的值,则返回True,否则返回False

not in:如果在指定的列表中未找到指定的值,则返回True,否则返回False

6. 位运算符(难点,不是重点)

6.1 内存

内存是存储数据地方,内存按字节存储二进制数据,字节是内存分配的最小单位,每一个字节存储8位二进制数据。位是最小的数据单位,1位可以保存一个二进制数据0或1

位 bit ---b

字节 Byte ----B

1B = 8b

1k = 1024B

1M = 1024k

1G = 1024M

6.2 二进制

  • 进制就是进制位,一种进位方法,例如:十进制逢十进一,二进制逢二进一。。。【八进制和十六进制是通过二进制演变的】

  • 每种进制都有自己的符号集:

    • 十进制(0,1,2,3,4,5,6,7,8,9)
    • 二进制(0,1)
    • 八进制(0,1,2,3,4,5,6,7)
    • 十六进制(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f)
  • 二进制的计算【逢二进一】

    0 + 0 = 0
    0 + 1 = 1
    1 + 1 = 10
    11 + 1 = 100
    
    101110
    011101
    --------
    1001011
  • 进制转换

    十进制:  123  基数是10,权重:3的权重(10的零次方)  2的权重(10的1次方) 1的权重(10的平方)
             123 = 1*10(2) + 2*10(1) + 3 * 10(0)  括号里表示10的次方
    
    
    二进制:  101 基数是2 权重 1的权重(2的0次方) 0的权重(2的1次方)  1的权重(2的2次方)
             101(B) =>十进制:   1*2(2) + 0*2(1) + 1*2(0) = 5
    
    二进制 =》十进制 : 把二进制按照权展开,相加就可以得到对应的十进制
    十进制 =》二进制: 
            对于整数,对十进制数进行除2运算,直到商为0为止,然后将各个步骤得出的余数倒着写出来
          对于小数:整数部分同上,对于小数,乘以2取整,直到结果为0
           11.625  =>1011.101
    
    二进制 =》八进制 : 从右向左进行分组,每三位为一组,不足时需要进行补0操作
           1001 0110  -----》010 010 110-----》2 2 6------>0o226
           1010001------》001 010 001-------》121-----》0o121
    
    二进制 =》十六进制 : 从右向左进行分组,每四位为一组,不足时需要进行补0操作
         1001 0110------》9 6-----》0x96
       1011 1110------》11  14-----》b e------》0xbe
       11 1011 ------》0011 1011------》3 11----》0x3b
  • 原码、反码和补码

    【原码】:将最高位设为符号位(0表示正数,1表示负数),其余位数存储数值大小,称为数字的原码。
     1 ----》0000 0001    
     -1----》1000 0001
     +-----------------------------
             1000 0010      -2
    结论:原码不能正确运算,所以计算机不是以原码存储数据

    【反码】正数的反码就是原码,负数的反码是原码符号位不变,其他位按位取反(1变0,0变1)
    1----》0000 0001
    -1----》1111 1110
    +----------------------------
    1111 1111 -0
    结论:计算不以反码为存储方式
    【补码】正数的原码反码补码相同,负数的补码是反码加1
    1----》0000 0001
    -1----》1111 1111
    +-----------------------
    0000 0000 0
    结论:计算机采用补码存储数据

6.3 位运算

是通过整数的二进制位进行计算的,只有整数可以进行位运算

运算符 说明 规律
& 按位与 全1为1,有0为0
| 按位或 有1为1,全0为0
^ 按位异或 相同为0,不同为1
~ 按位取反 1变0,0变1
<<(左移) 按位左移
>>(右移) 按位右移

7. 运算符的优先级

  • 尽量不要把一个表达式写的过于复杂,如果遇到复杂的需求,则最好分步运算

  • 不要过多的依赖于运算符的优先级,否则代码的可读性太差,在实际的项目开发中,一般采用()将优先级高的运算括起来

8 数据类型的转换

python是一种强类型语言:要求运算符两边的操作数必须是同一个类型的,否则必须转换

函数名 函数值
int(x,[基数]) 将数字或字符串转换为整数,如果x为浮点数,则自动截断小数部分
float(x) 将x转换成浮点型
str(x) 将x转换成字符串
bool(x) 转换成bool类型 的True或 False
repr(x) 返回一个对象的String格式
eval(str) 执行一个字符串表达式,返回计算的结果
tuple(seq) 参数可以是元组、列表或者字典,为字典时,返回字典的key组成的集合
list(s) 将序列转变成一个列表,参数可为元组、字典、列表,为字典时,返回字典的key组成的集合
set(s) 将一个可以迭代对象转变为可变集合,并且去重复,返回结果可以用来计算差集x - y、并集x | y、交集x & y
chr(x) 输入一个ASCII码(0-255),返回一个对应的字符。返回值是当前整数对应的ascii字符。
ord(x) 返回一个字符所对应的码值

数值类型 : int、float、bool

bool -> int -> float

通过eval()函数来求值

我们可以通过eval函数将字符串转换为python可以识别的表达式。

eg:

# -*- coding: utf-8 -*-
__author__ = 'sun'
__date__ = '2019/5/27 9:54'

x = 10
y = 20

formula = 'x*y+10-(x-y)'
result = eval(formula)
print(result)

9 Python math库常用函数

math库常用函数

使用math库前,用import导入该库

import math

取大于等于x的最小的整数值,如果x是一个整数,则返回x

>>> math.ceil(5.12)
6

floor()取小于等于x的最大的整数值,如果x是一个整数,则返回自身

>>> math.floor(4.999)
4

求x的余弦,x必须是弧度

>>> math.cos(math.pi/4)
0.7071067811865476

把x从弧度转换成角度

>>> math.degrees(math.pi/4)
45.0

fabs()返回x的绝对值

>>> math.fabs(-0.5)
0.5

factorial()取x的阶乘的值

>>> math.factorial(3)
6

对迭代器里的每个元素进行求和操作

>>> math.fsum((1,2,3,4))
10.0

返回x和y的最大公约数

>>> math.gcd(8,6)
2

得到(x2+y2),平方的值

>>> math.hypot(3,4)
5.0

pow()返回x的y次方,即x**y

>>> math.pow(3,4)
81.0

sqrt()求x的平方根

>>> math.sqrt(100)
10.0

案例分析:

接受一个正整数输入x,打印下述公式的输出值。

技术图片

输入格式:

共一行,为一个正整数。

输出格式:

共一行,采用round函数保留10位小数。

# -*- coding: utf-8 -*-
__author__ = 'sun'
__date__ = '2019/5/27 9:54'

from math import *

x=int(input('请输入正整数样例:'))
y=sin(15/180*pi)+(e**x-5*x)/sqrt(x**2+1)-log(3*x)
print('%.10f'%y)

以上是关于运算符和表达式的主要内容,如果未能解决你的问题,请参考以下文章

10个JavaScript代码片段,使你更加容易前端开发。

我的重构第一步

C#图解教程 第十九章 LINQ

jsonpath的使用

20个简洁的 JS 代码片段

20个简洁的 JS 代码片段