本节内容:进制转换,数据类型转换,常用运算符
一、Python中整数的表示方式
整型就是整数,计算机其实只能保存二进制 0 和 1,为了方便数据的表示,计算机也支持八进制和十六进制。
二进制、八进制 、十六进制、十进制 在Python中都可以表示
十进制
a = 98 #默认数字都是十进制的数字,98就是十进制的98
二进制:以 0b 开头的数字是二进制,二进制里最大的个位数是1,不能出现2
b = 0b101011101
print(b) # 结果是:349
八进制:以 0o 开头的数字是八进制,八进制里最大的个位数是7,不能出现8
c =0o125374
print(c) #结果为: 43772
十六进制:以 0x 开头的数字是十六进制,包含 0~9,a~f
d = 0x23
print(d) # 结果为:35
e = 0x2a
print(e) # 结果为:42
不同进制下数据的验证,可以使用 计算器进行查看
二、进制转换
- 十进制转换为二进制,根据余数转换
十进制的:23
23 / 2:11 余数为1
11/2: 5 余数为1
5/2: 2 余数为1
2/2: 1 余数为 0
对应转换为二进制为:10111, ==> 0b10111
-
二进制转换为八进制:三个二进制为一组,转换为八进制
010 111
10 / 8 :余数为2
111 / 8: 余数为7
010 111对应的 八进制数据为 27,==> 0o27 -
二进制转换为十六进制:四个二进制为一组,转换为十六进制
0001 0111
0001 /16 余数为1
0111/16 余数为7
0001 0111对应的十六进制数据为 17, ==> 0x17
三、使用代码进行进制转换
a = 12 #十进制数字12
print (bin(a)) # 0b1100 bin内置函数,将数字转换为二进制结果
print(oct(a)) # 0o14 oct内置函数,将数字转换为八进制结果
print(hex(a)) # 0xc hex内置函数,将数字转换为十六进制结果
四、数据类型的转换
因为不同的数据类型,进行运算时,规则不一样,需要对数据类型进行转换
进制转换:将 int 类型以不同的进制表现出来
类型转换:将一个类型的数据转换为其他类型的数据
int >str; str>int; int⇒ float; bool==>int
- 使用 int 内置类 将数据转换为整型
age = input("请输入您的年龄:")
请输入您的年龄:18
print(age+1) #TypeError: can only concatenate str (not "int") to str
# 原因:input 接收到的用户输入信息,都是 str 类型,字符串,python中字符串与数字的加法运算会报错
# 方法:需要把字符串类型的变量 age 转换成数字类型, 直接使用 int 内置函数
new_age = int(age)
print(new_age+1)
# 结果为:19
print(type(age)) # <class 'str'>
print(type(new_age)) # <class 'int'>
注意:如果 字符串不是一个合法的数字,int 函数结果将会直接报错
x= 'hello'
y=int(x) #ValueError: invalid literal for int() with base 10: 'hello'
x= '1a2c'
y=int(x) #ValueError: invalid literal for int() with base 10: '1a2c'
x= '1a2c'
y=int(x,16) # 将字符串 1a2c 转换为16进制的数据,对应为 6700(十进制展示)
print(y) #结果为:6700
m='abc'
print(int(m,16)) # 结果为 2748 将 abc 转换为 16进制的数据,对应为 2748(十进制展示)
m='12'
print(int(m,8)) # 结果为:10 将 12 转换为 八进制的数据,对应为 10 (十进制展示)
- 使用内置 float 类 可以将其他类型的数据转换为float 浮点数
a= '12.34'
b=float(a)
print(b+1) # 13.34
如果字符串不能被转换成有效的浮点数,将会直接报错
c= 'hello python'
d = float(c)
print(d) #ValueError: could not convert string to float: 'hello python'
print(float(100)) # 100.0 将整数100转换为浮点数 100.0
- 使用 str 类 可以将其他类型的数据转换为 字符串
a= 34
b= str(a)
print(type(a)) # <class 'int'>
print(type(b)) # <class 'str'>
- 用 bool 内置类 可以将其他数据类型转换为布尔值
数字中,只有 0 被转换成布尔值False,其他的转换为布尔值均为True
print(bool(100)) # True
print(bool(-1)) # True
print(bool(0)) # False
字符串中,只有空字符串,“” ''可以转换为False,其他的字符串都会被转换成True. None 转换成布尔值也是False
print(bool('False')) # True
print(bool('hello')) # True
print(bool('')) # False
print(bool(None)) # False None 转换成布尔值也是False
print(bool('None')) # True "None"是一个字符串
print(bool([])) # False 空列表也是 Fasle
print(bool(())) # False 空元组也是 False
print(bool({})) # False 空字典也是 False
print(bool(set())) # False 空集合也是 False
在计算机中,True 和 False 使用数字 1 和 0 来保存的
True + 1 # 2
False + 1 # 1
#隐式类型转换
if 3 >2:
print("good")
# 结果 good
if 0:
print("good") #不会打印任何结果,此处 0 被转换为 Fasle
五、运算符
5.1. 算术运算符
Python中支持很多运算符
+加 - 减 * 乘 / 除 ** 幂运算 // 整除 % 取余
在Python 3 中,两个整数相除,得到的结果会是一个浮点数
print(4-2) # 2
print(4*2) # 8
print(4/2) # 2.0 结果是一个浮点数
print(3**3) # 27
print(81 **0.5) # 9.0 结果是一个浮点数
运算符在字符串中的应用:
字符串中有限度地支持加法和乘法运算符
=> 加法运算符:只能用于两个字符串类型的数据,用来拼接两个字符串,数字和字符串之间不能做加法运算
print('hello'+' rose') # hello rose
=> 乘法运算符:可以用于数字和字符串之间,将一个字符串重复多次
print('hello' * 3) # hellohellohello
5.2. 赋值运算符
在计算机编程里, = 是赋值运算符,将等号右边的值赋值给等号的左边。等号的左边一定不能是常量或者表达式
a = 4 # 将4赋值给a
3+3 = m # SyntaxError: can't assign to operator
4 = m # SyntaxError: can't assign to literal
m = 5
m +=2
print(m) # 7
m = 5
m -=2
print(m) # 3
m = 5
m *=2
print(m) # 10
m = 5
m /=2
print(m) # 2.5
m = 5
m //=2
print(m) # 2
m = 5
m **=2
print(m) # 25
等号连接的变量可以传递赋值
a =b =c =d ='hello'
print(a,b,c,d) # hello hello hello hello
x ='yes' = y = z
print(x,y,z) # SyntaxError: can't assign to literal
从右向左赋值,'yes'是固定的值,不能给常量赋值,会报错
m,n = 3,5
print(m,n) #3 5 拆包
拆包要求,变量的个数和值的个数要一致
y,z = 1,2,3,4,5
print(y,z) #ValueError: too many values to unpack (expected 2)
o,p,q = 1,2
print(o,p,q) #ValueError: not enough values to unpack (expected 3, got 2)
o,*p,q = 1,2,3,45,6
print(o,p,q) #1 [2, 3, 45] 6 *为可变长度,1和6分别赋值给o,q, 剩下中间的都复制给p
x = 'hello','good','bad'
print(x) # ('hello', 'good', 'bad') 得到一个元组
5.3. 比较运算符
print(5>3) # True
print(5<6) # True
print(5 !=6 ) # True
print('hello'=='hello') # True
字符串之间使用比较运算符,会根据各个字符的编码值逐一进行比较(ASCII码表)
数字和字符串之间, == 运算的结果是Fasle,!= 运算的结果是 True,其他的运算不支持
print('a'>'b') # False 相当于97 > 98
print('abc'>'b') # False 相当于 97,98,99与98逐一比较
print('abc'>90) # TypeError: '>' not supported between instances of 'str' and 'int'
print('a' == 97) # False
print('a' != 97) # True
5.3. 逻辑运算符
print( 3>2 and 10>2) # True
print( 3>2 and 1>2 and 6>1) # False
print( 3>2 or 1>2 or 6>1) # True
print( 3<2 or 1>2 or 6<1) # False
print(not(5>2)) # False
逻辑运算的短路问题
5 > 3 and print('hello') # hello 第一个运算结果为True,继续进行计算判断
5 < 3 and print('hello') # False 逻辑与运算的短路问题,第一个计算结果为False,将不再执行了
5 > 3 or print('hello') # True 逻辑或的短路问题,第一个计算结果为True,将直接输出结果,不再继续判断
5 < 3 or print('hello') # hello 第一个结果为False,需要继续往下判断
逻辑运算符的结果一定是布尔值吗 —不一定
逻辑与运算做取值时,取第一个为False的值,如果所有的运算数都是 True,取最后一个值
逻辑或运算做取值时,取第一个为True的值,如果所有的运算数都为 False,取最后一个值
print(3 and 5 and 0 and 'hello') # 0
print(3 and 5 and 'good' and 'hello') # hello
print(0 or [] or 'lisi' or 5 or 'ok') # lisi
print(0 or [] or {} or None) # None
5.4. 位运算符
5.5. 运算符的优先级
算数运算:幂运算 > 乘法、除法 > 加法、减法
print(10+ 2*3**2) # 28 幂运算 > 乘 > 加法
逻辑运算: not > and > or
print( True or False and True) # 计算过程 True and True ⇒ True
print(False or not False) # 计算过程 False or True ⇒ True
print(True or True and False) # 计算过程 True or False ⇒ False
建议:在开发中,使用括号来说明运算符的优先级