02---python基本数据类型

💡大纲

👉数字类型:分类(整数、浮点数、复数)、数字运算操作符与操作函数

👉字符串类型:基本性质(索引、切片)、操作符与操作函数

👉布尔类型:逻辑运算

👉类型转换:类型判断、类型转换

一、数字类型(不可变)

(一)分类

1、整数---不同进制的转换

👉默认输入十进制

👉二进制0b、八进制0o、十六进制0x

16 == 0b10000 == 0o20 == 0x10
#True
  • 十进制转换为其他进制---bin、oct、hex

a = bin(16)    # 转二进制
b = oct(16)    # 转八进制
c = hex(16)    # 转十六进制
print(a, b, c) # 0b10000 0o20 0x10

type(a)        # str

 ⚠️转换后结果为字符串类型

  • 其他进制转十进制---int(变量,进制类型)

d = int(a, 2)      # 二进制转十进制
e = int(b, 8)      # 八进制转十进制
f = int(c, 16)     # 十六进制转十进制
print(d, e, f)     # 16 16 16

 ⚠️布尔类型是整型的子类

2、浮点数---不确定性

💡浮点数在计算过程中不确定小数问题。因为计算机是使用二进制小数来表示浮点数的小数部分的,但是部分小数不能用二进制小数完全表示二进制小数会无限逼近浮点数小数,通常不会影响计算精度

0.1 + 0.7  # 0.7999999999999999 四舍五入获得精确解0.8

a = 3*0.1
print(a)   # 0.30000000000000004

b = round(a, 1) # 四舍五入,保留一位小数
print(b)   # 0.3
b == 0.3   # True
  • 导入decimal模块,表示十进制
import decimal
a = decimal.Decimal("0.1")
b = decimal.Decimal("0.2")
c = a + b
print(c) # 0.3 精确答案
  • 科学计数法  
0.00005 = 5e-05 # 5*10^-5

3、复数---a+bj

👉大写J或小写j均可

👉虚部系数为1时,需要显式写出

x = 1 + 2j # 实部与虚部都是浮点数
x.real # 1.0
x.imag # 2.0
complex(1,2) # 返回一个复数

(二)运算操作符(a 操作符 b)

⚠️整数与浮点数运算结果是浮点数

⚠️除法运算的结果是浮点数

1、加减乘除 + - * /

2、取反 -

x = 1
-x    # -1

3、乘方 **

2**3 == 2*2*2 == 8

4、整数商、模运算

👉整数商//

13//5 # 2,整数商,相当于x/y 向下取整数
-3//2 # -2 取比目标结果小的最大整数

👉模运算%

13 % 5   # 3,模运算,求余数 13=2*5+3

⭕ 发现

  • x == ( x // y ) * y + ( x % y ) 

(三)数字运算操作函数

1、绝对值 abs()

⚠️需要注意的是对复数求绝对值,其实是求模运算

abs(3+4j)  # 5,(3^2+4^2)^0.5

2、幂次方 pow(x,n)

pow(2, 3)  # 2的3次方,等价于2**3
pow(2, 5, 3) # 2^5%3,等于2

3、四舍五入 round(x,n)

a = 3.14159926
round(a)       # 3,默认四舍五入为整数
round(a, 2)    # 3.14,参数2表示四舍五入后保留2位小数
round(a, 10)   # 3.14159926,位数不足无需补齐

4、整数商和模运算 divmod(x,y)

👉等价于返回二元元组(x//y,x%y)

👉较(x//y,x % y)更快,只执行了一次x/y

x,y = divmod(13,5) # 解包赋值
print(x) # 2
print(y) # 3

5、序列最大值最小值 max( )/min( )

👉括号里面可以直接给一系列的数,或者给列表、元组的变量 

max(3, 2, 3, 6, 9, 4, 5)    # 9

a = [3, 2, 3, 6, 9, 4, 5]
print("max:", max(a))       # 9
print("min:", min(a))       # 2

6、求和 sum(x)

👉对列表、元组等进行求和运算,参数是序列类型(元组、列表)

sum((1, 2, 3, 4, 5))    # 15

7、借助科学计算库 math/scipy/numpy

import math   # 导入库
import numpy as np

二、字符串类型(不可变)

(一)表达

1、用""或''括起来的任意字符都表示字符串

print("Python")    # Python
print('Python')

2、当字符串中有双引号或单引号时,用另一种方式来包含

  • 双中有单(字符串中有单引号,则用双引号表达字符串)

print("I'm 18 years old")   
  • 单中有双
print('"Python" is good')    # "Python" is good
  • 双中有双,单中有单
print(""Python" is good")

⚠️不可以直接以这样的形式在双引号里再出现双引号,单引号同理。需要借助转义符\

👉\"在输出的时候表现为"

👉在转义字符后面添加'\'表示该行还没有写完,例如:\n\,表示换行后继续输入,实现长字符串

👉在字符串前加 r 可以让反斜杠 / 不发生转义

 

3、长字符串

👉使用""" """或''' '''对一段字符进行表示

x = """我是帅哥"""

(二)字符串的性质---索引

1、正向索引:从0开始递增

2、反向索引:从-1开始递减 

👉不可以通过索引的方式改变对应的值,例如str[0] = "B",想要将"R"改为"B",这样是错的

👉位置编号不能超过字符串的长度

⚠️经观察发现索引只能获得一个字符,如何获得多个字符? 

str = "Runoob"
print(str)
print(str[0])
print(str[6]) # 超出长度

(三)字符串的性质---切片

  

1、定义

💡变量名[开始位置:结束位置:切片间隔]

👉切片间隔如不设置默认为1,可省略

👉切片范围不包含结束位置。如s[a,b],不包含b,可以看作一个左闭右开的区间

👉起始位置是0 可以省略

👉结束位置省略,代表可以取到最后一个字符

👉可以使用反向索引

⚠️从左到右切

2、反向切片

👉起始位置是-1也可以省略

👉结束位置省略,代表可以取到第一个字符

⚠️间隔不能省略

⚠️从右到左切

print(str[0:-1])
print(str[::])
print(str[-1:-7:-1]) # 不包括结束位置

(四)字符串操作符

1、字符串的拼接:字符串1+字符串2

a = "I love "
b = "you "
a+b    # 'I love you '        

2、字符串的成倍复制:字符串 * n

c = a+b
print(c*3)    # I love you I love you I love you 

3、成员运算

👉子集 in 全集:任何一个连续的切片都是原字符串的子集(这是逻辑判断,返回True或False)

👉遍历字符串字符for 字符 in 字符串

(五)字符串处理函数

1、长度 len

👉返回字符串所含字符的个数

s = "python"
len(s)    # 6

2、字符编码(不重要)

💡将中文字库,英文字母、数字、特殊字符等转化成计算机可识别的二进制数

👉每个单一字符对应一个唯一的互不重复的二进制编码

👉Python 中使用的是Unicode编码

  • 将字符转化为Unicode码---ord(字符)
print(ord("中"))    # 20013
print(ord("国"))    # 22269
  • 将Unicode码转化为字符---chr(Unicode码)
print(chr(1010))    # c

(六)字符串的处理方法 

1、字符串的分割

  • 字符串.partition(分割字符)/.rpartition(分割字符)

👉返回一个三元组,默认是(分割左边,分隔符,分割右边)

👉默认从左到右进行切割

"www.ilovefishc.com".partition(".") # .作为分隔符,返回一个三元组('www', '.', 'ilovefishc.com')分别是分隔符左边内容,分隔符,分隔符右边内容。分割方向是从左到右
"www.ilovefishc.com".rpartition(".") # ('www.ilovefishc', '.', 'com'),从右到左进行分割
  • 字符串.split(分割字符)/rsplit(分割字符)

👉原字符串不变,返回一个列表

👉可以指定切割次数

👉默认从左到右进行切割

languages = "Python C C++ Java PHP R"
languages_list = languages.split(" ")
print(languages_list)    # ['Python', 'C', 'C++', 'Java', 'PHP', 'R']
print(languages)         # Python C C++ Java PHP R

"www.ilovefishc.com".split(".",1) # 根据.切割一次 ['www', 'ilovefishc.com']
"www.ilovefishc.com".rsplit(".",1) # ['www.ilovefishc', 'com']
"www.ilovefishc.com".split(".") # ['www', 'ilovefishc', 'com']
  •  字符串.splitlines(keepends = False)

👉默认分割所有系统环境下的换行符

👉参数表示分割结果是否包含换行符,Ture表示包含

"www\nilovefishc\ncom".splitlines() # ['www', 'ilovefishc', 'com']
"www\nilovefishc\ncom".splitlines(True) # ['www\n', 'ilovefishc\n', 'com']

2、字符串的拼接---“聚合字符”.join(可迭代数据类型)

👉原字符串不变,返回一个字符串

👉可迭代类型如:字符串、列表,序列类型的元素必须是字符类型

👉其实就是用聚合字符将可迭代数据类型分隔开

s = "12345"
",".join(s)    # '1,2,3,4,5'

s = ["1", "2", "3", "4", "5"]
"*".join(s)    # '1*2*3*4*5'

".".join(['www', 'ilovefishc', 'com']) # 'www.ilovefishc.com'
"".join(["fishc","fishc"]) # 'fishcfishc'

3、截取字符串

  • 删除两端特定字符---字符串.strip(删除字符) 

👉原字符串不变,返回一个字符串

👉strip从两侧开始搜索,遇到指定字符执行删除(可以是一段字符,根据该段字符在字符串中逐一查找删除),遇到非指定字符,搜索停止

👉类似的还有左删除lstrip右删除rstrip

s = "**********I have many books*****"
print(s.strip("*"))        # I have many books               
print(s.lstrip("*"))       # I have many books*****
print(s.rstrip("*"))       # **********I have many books
print(s)                   # **********I have many books*****

"    左侧不要留白".lstrip() # 默认是删除空白,'左侧不要留白'

# 对参数中的字符逐一删除
"www.ilovefishc.com".lstrip("wcom.") # 'ilovefishc.com'
"www.ilovefishc.com".rstrip("wcom.") # 'www.ilovefish'
"www.ilovefishc.com".strip("wcom.")  # 'ilovefish'
  • 删除指定的前缀或后缀---字符串.removeprefix/removesuffix(删除字符) 

👉可以删除字符串的前缀或后缀,不是逐个字符的删除

"www.ilovefishc.com".removeprefix("www.") # 'ilovefishc.com'
"www.ilovefishc.com".removesuffix(".com") # 'www.ilovefishc'

4、字符串的替换

👉将字符串中的Tab换为空格

code = """
        print("I Love")
    print("I")"""
    
new_code = code.expandtabs(4)
print(new_code)
'''
    print("I Love")
    print("I")
'''

👉字符串.replace("被替换","替换成"),原字符串不变,返回一个字符串 

s = "Python is good"
s1 = s.replace("Python","C++")
print(s1)    # C++ is good

 👉translate(table) 根据table进行字符串的转换

table = str.maketrans("ABCDEFG","1234567") # 规定一个变化表格
"I Love FishC".translate(table) # 根据变化表格进行转换
table = str.maketrans("ABCDEFG","1234567","Love") # 第三个参数是将指定的字符串忽略
"I Love FishC".translate(table) # 'I  6ish3'

5、字符串查找统计

👉字符串.count("待统计字符",起始位置,结束位置)        统计字符串中某子字符的数量

👉字符串.find("待查找字符")                                          从左往右查找字符

👉字符串.rfind("待查找字符")                                         从右往左查找字符

👉字符串.index("待查找字符")                                       查找字符串

x = "上海自来水来自海上"
# 统计字符
x.count("海") # 2
x.count("海",0,5) # 1

# 返回字符下标
x.find("海") # 1 该字符下标
x.rfind("海") # 7
x.find("龟") # -1 对于字符串中没有的字符,返回下标-1
x.index("龟") # 会报错

6、字符串字母大小写

👉字符串.capitalize()         首字母大写,其他字母变为小写

👉字符串.casefold()          全部小写(可以处理多种语言)

👉字符串.title()                  

👉字符串.swapcase()        字符串的所有单词大小写反转

👉字符串.upper() 

👉字符串.lower()

s = "Python"
s.upper()    # 全部大写,'PYTHON'
s.lower()    # 全部小写,'python'
s.title()    # 首字母大写,'Python'

7、左中右对齐 

x = '有内鬼,停止交易!'
x.center(15,"*")  # 可以用*来填充,更改填充符
x.center(15) # '   有内鬼,停止交易!   '
x.rjust(15)  # '      有内鬼,停止交易!'
x.ljust(15)  # '有内鬼,停止交易!      '
x.zfill(15)  # '000000有内鬼,停止交易!'

"520".zfill(5)  # '00520'
"-520".zfill(5) # '-0520'

8、字符串的判断和检测(返回是bool类型)

x.isdigit()/x.isdecimal()/x.isnumeric()纯数字
x.isalpha()     纯字母
x.isalnum()    由数字和字母组成
x.startswith()/字符串.endswith()  字符是否在字符串开头或结尾
x.istitle()      大写字母开头,其他字母均为小写
x.isupper()/x.islower()全为大写字母或小写字母

x.isspace()/x.isprintable()

判断是不是空白字符串/可打印字符串

x.isidentifier()

是不是一个合格的python标识符

keyword.iskeyword('if')

是不是关键字

👉比如可用于判断用户名是否合法

age = "20"
name = "wang"
fix = "wang24"
age.isdigit()    # True
name.isdigit()   # False
name.isalpha()   # True
fix.isalnum()    # True

x = "I love Python"
x.istitle() # False,因为l没有大写
x.isupper() # 判断是不是均为大写
x.islower()

# 判断是不是数字
x.isdecimal()
x.isdigit()
x.isnumeric() # 可以处理所有数字类型(中文、罗马数字、繁体字)

x = "i am boy"
x.isidentifier() # False

👉比如可用于判断子字符串在字符串中的位置是否为首尾

x = "我爱python"
x.startswith('我') # startswith 判断某个子字符的位置是否在字符串的开始位置 Ture
x.startswith('爱', 1) # 规定从爱开始进行查找

x.endswith('n') # endswith 判断某个子字符的位置是否在字符串的末尾位置 Ture
x.endswith('py', 0, 4)

# 可以传入元组
x = "他爱python"
if x.startswith(("你","我","他","她")):
    print("总有人喜欢python")

👉判断是不是空白字符串、可打印的字符串

x = "       \n"
x.isspace() # 判断字符串是不是空白字符串,不仅仅只空格键

"I love you\n".isprintable() # False,因为\n转义字符不是可打印的字符串

👉判断是不是关键字

import keyword
keyword.iskeyword('if') # Ture

9、格式化字符串的方法:format

👉基本格式:"字符{ 0 }字符{ 1 }字符".format(v0,v1)

👉位置索引:参数中的字符串会当作元组的元素来对待,所以有自己的索引值

👉关键字索引:不用关注索引值,根据给定的关键字进行赋值

👉两者联合使用的话,位置参数要放在前面

"我叫{name},我爱{fiv}".format(name="小甲鱼",fiv="python")
"我叫{name},我爱{0},喜欢{0}的人,运气都不会差".format("python",name="小甲鱼")

"{},{{}},{}".format(1,2) # '1,{},2' 里面的花括号被注释了
  • 填充与对齐 

 

print("{0:_^20}".format(PI)) #用下划线_符号进行填充,整个字符串宽度为20,数据居中对齐

  • 数字千分位分隔符
print("{0:,}".format(10000000))
#1,000,000

print("{0:&>20,}".format(10000000))
#&&&&&&&&&&10,000,000
  • 浮点数类型输出 

"{0:.2f}".format(3.1415) # 3.14
"{:.2g}".format(3.1415) # 3.1
"{:.6}".format("I Love FishC") # 'I Love'
  • 按百分数输出,保留一位小数

print("{0:.1%}".format(0.818727)) # 81.9%
  • 科学计数法输出

print("{0:.2e}".format(0.818727)) # 8.19e-01

👉十进制整数转二进制、unicode码、十进制、八进制、十六进制输出

"二进制{0:b},Unicode码{0:c},十进制{0:d},八进制{0:o},十六进制{0:x}".format(450)
# '二进制111000010,Unicode码ǂ,十进制450,八进制702,十六进制1c2'
# "{:#b}".format(80) # '0b1010000',添加前缀0b

总结

👉"字符{0:修饰}字符{1:修饰}".format(v0,v1)

10、f-字符串 

👉在字符串前面添加'f'或'F',向系统表示这是format语句

三、布尔类型TRUE/False

  • 定义为False的对象:None、False
  • 值为0的数字类型:0、0.0、0j、Decimal(0)
  • 空的序列和集合:''、()、[]、{}、set()、range(0)

(一)逻辑运算的结果

a = 11
print(a > 4)        # True
print(a == 13)      # False
print(a < 5)        # False

(二)操作函数

1、any()

👉有一个为真就返回True

2、all()

👉全真,则返回True

print(any([False,1,0,None]))   
print(all([False,1,0,None]))

(三)作为指示条件,用于循环判断

(四)作为掩码(numpy)

四、类型判别和转换

(一)类型判别

1、type(变量)

age = 22
print(type(age))    # <class 'int'>

2、isinstance(变量,预判类型)

👉承认继承

👉变量类型是预判类型的子类型为真,否则为假

print(isinstance(age, int))        # True,承认继承
print(isinstance(age, object))     # True,object是最高等级的老祖宗

(二)字符串检查方法

(三)类型转换

 1、数字类型转字符串---str(数字类型)

age = 24
print("My age is "+str(age))    # My age is 24

2、仅有数字组成的字符串转数字---int()/float()/eval()

s1 = "24"
s2 = "2022.1"
int(s1)        # 24
float(s1)      # 24.0
int(s2)        # 报错,int只能将整型字符串转换为整型数字
float(s2)      # 2020.1
eval(s1)       # 24,去引号

 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盾山狂热粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值