> 文章列表 > Python基础-02 运算

Python基础-02 运算

Python基础-02 运算

进制转换

整数的表示方法

整形就是整数,计算机只能保存二进制0和1
为了方便数据的表示,计算机也支持八进制和十六进制

二进制 八进制 十六进制 十进制 Python都能够表示

a = 98  # 默认数字都是十进制的数字b = 0b10110110  # 以0b开头的数字都是二进制
print(b) # 当使用print语句打印一个数字的时候,默认也是用十进制打印输出的
# 二进制里最大的数是1c = 0o34 # 以0o开头的数字是八进制的数字
#八进制里最大的数是7d = 0x23 # 以0x开头的数字是十六进制
#十六进制是0-9,a-f

十进制转换为二进制

使用分解质因数的方式,求某个值的二进制数
Python中可以用bin内置函数进行转换

二进制,八进制,十进制,十六进制的转换

二进制 <==> 十进制
二进制 ==> 八进制
二进制 ==> 十六进制

  1. 十进制:23 -> 23
  2. 使用分解质因数转换为二进制: 0001 0111 -> 0b00010111
  3. 二进制转八进制:以三位为一组,将转换为八进制: 010 111 -> 0o27
  4. 二进制转十六进制:以四个为一组,转换为十六进制: 0001 0111 -> 0x17

使用内置函数进行进制转换

二进制 -> bin
八进制 -> oct
十六进制 -> hex

a = 23
print(bin(a))
print(oct(a))
print(hex(a))# 0b10111
# 0o27
# 0x17

数据类型转换

进行数据类型转换的原因:不同数据类型的计算方式不同
将一个类型的数据转换为其他类型的数据

int() --> 将数据类型转换为int
int() 在字符串合法的情况下,可以添加一个参数,指定转换后的进制,8,16.默认转换为十进制

str() --> 将数据类型转换为str

bool() --> 将数据类型转换为bool
数字中,只有数字0被转换成布尔值是False,其他的数字转换为布尔值都是True
字符串中,只有空字符串可以转换为False,其他的字符串都转换为True
None转换为布尔值是False
空列表,空元组,空字典,空集合转换为布尔值是False

float() --> 将数据类型转换为float

隐式类型转换

if 3:print('good')

运算符

算数运算符

1. + 加号
2. - 减号
3. * 乘号
4. / 除号
5. // 取整 #向下取整
6. % 取余
7. ** 指数
8. () 小括号(提高运算优先级)

在Python中,两个整数相除会得到一个浮点数

算数运算符在字符串里的使用

字符串仅支持加法和乘法运算符

加法运算符:
只能用于两个字符串类型的数据,用来拼接多个字符串
数字和字符串之间不能进行加法运算

print('hello' + 'world') # 将多个字符串拼接为一个字符串

乘法运算:
可以用于数字和字符串之间,用于将一个字符串重复多次

print('hello' * 2) # hellohello

赋值运算符

  • 在计算机编程中,我们将=称为赋值运算符,和数学中的等号有一定的区别
  • 等号(赋值运算符)的作用是将等号右边的值赋值给等号左边
  • 等号左边的不能是常量或者表达式
符合赋值运算符
+= 
-=
*=
/=
**=
//=
%=
  • 等号连接的变量可以传递赋值
a = b = c = d = 'hello'
  • 使用如下方法对多个变量进行赋值,实际上是进行了元组的拆包操作,拆包时,变量的个数和值的个数不一致,会报错
  • 可以使用*使变量变为可变长度
m,n = 3,5 #拆包
m,*n,o = 1,2,3,4,5,6 #可变长度

比较运算符

> 大于
< 小于
>= 大于等于
<= 小于等于
!= 不等于
== 判断==号左右两边是否相等

比较运算符在字符串中的使用

  • 字符串之间使用比较运算符,会根据各个字符的编码值逐一进行比较
  • ASCII码表a-z A-Z
  • 当某一位之间比较出结果之后就不再比较.
print('a' > 'b') # False
print('abc' > 'b') # False
  • 数字和字符串之间,做 == 运算的结果是False,做 != 的结果是True,不支持其他的比较运算

逻辑运算符

and 逻辑与
or 逻辑或
not 逻辑非
  • 逻辑与规则:只要有一个运算结果是False,结果就是False;只有所有运算结果都是True,结果才是True
  • 逻辑或规则:只要有一个运算结果是True,结果就是True;只有所有运算结果都是False,结果才是False
  • 逻辑非预算:取反,True ==> False,False ==> True

逻辑运算的短路和取值

4 > 3 and print('hello world')  # hello world
4 < 3 and print('hello world')  # False(不执行print)
# 逻辑与运算的短路问题4 > 3 or print('哈哈哈')  #True(不执行print)
4 < 3 or print('嘿嘿嘿')  # 嘿嘿嘿
# 逻辑或运算的短路问题
  • 逻辑运算的结果不一定是布尔值
  • 逻辑与运算做取值时,取第一个为False的值;如果所有的运算都是True,取最后一个值
print(3 and 3 and 0 and 'hello')  # 0(取第一个为False的值)
  • 逻辑或运算做取值时,取第一个为True的值;如果所有的运算都是False,取最后一个值
print(0 or [] or 'lisi' or 5 or 'ok')  # lisi(取第一个为True的值)

位运算符

& 按位与
| 按位或
^ 按位异或
<< 按位左移
>> 按位右移
~ 按位取反
  • 按位运算,先将需要比较的转换为二进制
  • 按位与运算: 同为1则为1,否则为0
  • 按位或运算: 只要有一个为1,则为1
  • 按位异或运算: 相同为0,不同为1
  • 按位左移: 在右侧补X位的0,可以通过a << n ==> a*(2 ** n) 来计算
  • 按位右移: 在右侧删除X位,可以通过a >> n ==> a/(2 ** n)后取整 来计算
  • 按位取反: 把0变成1,1变成0,补码形式

位运算符练习

  • 使用位运算符,获取到十六进制颜色0xF0384E的RGB值,以十进制的形式打印输出
color = 0xF0384E
red = color >> 16
green = (color >> 8) ^ (red << 8)
blue = ((red << 16) + (green << 8) ) ^ colorprint(hex(red))
print(hex(green))
print(hex(blue))
print(red)
print(green)
print(blue)# 0xf0
# 0x38
# 0x4e
# 240
# 56
# 78

运算符的优先级

运算优先级: ** 高于 * / % //高于+ -,建议使用()来处理运算符优先级.
逻辑运算符的优先级: not > and > or