运算符和表达式
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)
以上是关于运算符和表达式的主要内容,如果未能解决你的问题,请参考以下文章