Python学习记录 - 02- 进制、不同进制数据转换、数据类型转换、运算符

本节内容:进制转换,数据类型转换,常用运算符

一、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

不同进制下数据的验证,可以使用 计算器进行查看
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、进制转换

  1. 十进制转换为二进制,根据余数转换

十进制的:23
23 / 2:11 余数为1
11/2: 5 余数为1
5/2: 2 余数为1
2/2: 1 余数为 0
对应转换为二进制为:10111, ==> 0b10111
在这里插入图片描述

  1. 二进制转换为八进制:三个二进制为一组,转换为八进制
    010 111
    10 / 8 :余数为2
    111 / 8: 余数为7
    010 111对应的 八进制数据为 27,==> 0o27

  2. 二进制转换为十六进制:四个二进制为一组,转换为十六进制
    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
在这里插入图片描述

  1. 使用 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 (十进制展示)
  1. 使用内置 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
  1. 使用 str 类 可以将其他类型的数据转换为 字符串
a= 34
b= str(a)
print(type(a))  #  <class 'int'>
print(type(b))  #  <class 'str'>
  1. 用 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

建议:在开发中,使用括号来说明运算符的优先级

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值