学习python-Day08
今日学习内容
数据类型的内置方法简介
1.内置方法可以简单理解成是每个数据类型自带的功能(每个人的不同特长)
2.结构:
名字+括号--->调用某个功能。
eg:print(...)调用打印功能
int(...)调用创建整型数据功能
float(...)调用创建浮点型数据的功能
使用数据类型的内置方法统一采用句点符。
数据类型.方法名()
eg:
'xz'.字符串具备的方法()
name = 'xz'
name.字符串具备的方法()
3.如何快速查看某个数据类型的内置方法,借助于编译器自动提示。
4.我们在学习内置方法过程中还会穿插一些其他用法。
print(int(True)) # 1
print(int(False)) # 0
整型相关方法
1.关键字 int()
2.若 age=10 , 本质 age = int(10)
3.整型就是整数,主要用于计算,没有内置函数。
4.类型转换:
int(待转的数据)
4.1 int可以将由纯整数构成的字符串直接转换成整型,若包含其他任意非整数符号,则会报错。
>>> s = '123'
>>> res = int(s)
>>> res,type(res)
(123, )
4.2 如果字符串出现了字母,还是小数点等,都会报错的。
>>> print(type(int('123a321')))
Traceback (most recent call last):
File "", line 1, in
ValueError: invalid literal for int() with base 10: '123a321'
>>> print(type(int('123.33')))
Traceback (most recent call last):
File "", line 1, in
ValueError: invalid literal for int() with base 10: '123.33'
进制转换
1.进制种类有:二进制 八进制 十进制 十六进制
2.浮点型就是小数,主要用于计算,没有内置函数。
3.十进制转其他进制:
2.1 print(bin(100))
bin() 将十进制转二进制 0b1100100 0b是二进制数的标识
2.2 print(oct(100))
oct() 将十进制转八进制 0o144 0o是八进制数的标识
2.3 print(hex(100))
hex() 将十进制转十六进制 0x64 0x是十六进制数的标识
4.如果数字前面没有任何标识,默认就是十进制。
5.其他进制转十进制
print(int(0b1100100)) # 100
print(int(0o144)) # 100
print(int(0x64)) # 100
5.1python直接将其他进制数以十进制来输出。
5.2人为指定进制数
print(int('0b1100100', 2)) # 100
print(int('0o144', 8)) # 100
print(int('0x64', 16)) # 100
6.整型会自动把布尔值转换成 1 或 0
浮点数相关方法
1.关键字 float()
1.1 >>> s = '12.3'
>>> res=float(s)
>>> res,type(res)
(12.3, )
1.2
print(float('123')) # 123.0
整型转换成浮点型则后面是补齐一个小数点后一位
print(type(float('123'))) # float
print(float('123a123'))
有字母和数字就不能转换成浮点型,会报错。
print(float('123.12'))
可以识别一个小数点,但不能识别多个小数点,不然会报错。
print(float('123.123.1.2.2.2.2.2.2'))
2.浮点型会自动把转换成 1.0 或 0.0
print(float(True)) # 1.0
print(float(False)) # 0.0
补充说明
eg:
a = 23.00
b = 1.2
c = a * b
print(c) # 27.599999999999998
python对数字不敏感 很容易出错,但是基于python开发的模块很厉害。
字符串相关方法
1.关键字 str()
2.关系转换
类型转换:兼容所有数据值
print(str(123), type(str(123))) #123
print(str(123.11), type(str(123.11))) #123.11
print(str([1, 2, 3, 4]), type(str([1, 2, 3, 4])))
#[1, 2, 3, 4]
print(str({'name': 'jason'}), type(str({'name': 'jason'})))
#{'name': 'jason'}
print(str(True), type(str(True)))
#True
print(str((1, 2, 3, 4)), type(str((1, 2, 3, 4))))
#(1, 2, 3, 4)
print(str({1, 2, 3, 4}), type(str({1, 2, 3, 4})))
#{1, 2, 3, 4}
无论数据类型是什么,都会转换成字符串类型。
3.操作的方法
怎么访问字符串里的数值?
字符串[开始索引:结束索引:步长]
注意:
切取字符串为开始索引到结束索引-1内的字符串
步长不指定时步长为1 字符串[开始索引:结束索引]
1.按索引取值(正向取/反向取):(左包含右不包含)
>>> str1 = 'hello python!'
1.1 正向取(从左往右)
>>> str1[6]
p
1.2反向取(负号表示从右往左)
>>> str1[-4]
h
1.3对于str来说,只能按照索引取值,不能改,报错TypeError。
>>> str1[0]='H'
2.切片:取出多个字符,支持负数,切片的顺序默认从左往右最后一个参数是负号则取值方向从右往左。
2.1顾头不顾尾:取出索引为0到8的所有字符
>>> str1[0:9]
hello pyt
2.2 反向切片( -1表示从右往左依次取值)
>>> str1[::-1]
!nohtyp olleh
3.间隔/方向
3.1 步长:0:9:2,第三个参数2代表步长,会从0开始,每次累加一个2,会取出索引0、2、4、6、8的字符。
中间间隔一个字符取值。默认1可以不用写。
>>> str1[0:9:2]
hlopt
3.2 取出全部
>>> str1[:]
hello python!
4.统计字符串中字符的个数 len
print(len(s1)) #13
注意:空格也算字符。
5.移除字符串首尾指导的字符 strip (注意中间的空号不能被移除)
name = ' xz '
print(len(name)) # 6
print(name.strip(), len(name.strip())) # xz 2
注意:字符串调用内置方法,不是改变原数据,而是产生了新的数据值,但这些数据值都是一次性的,在没有变量名绑定的时候,是不能一直使用。
res = name.strip()
print(name,len(name)) # xz 6
print(res,len(res)) #xz 2
desc1 = '$$xz$$'
单独的strip的含义是移除所有的 $
print(des1.strip('$')) #xz
前加l意思是从左边看,移除左边的$
前加r意思是从右边看,移除右边的$
print(des1.lstrip('$') #xz$$
print(des1.rstrip('$'))) #$$xz
eg:
username = input('username>>>:')
username = username.strip()
先获取用户输入 再立刻移除首尾空格 最后绑定给变量名username
username = input('username>>>:').strip()
作用是自动过滤用户输入多个空格,防止用户这样报错。上面是完整的代码,下面是第二个代码简写。
if username == 'xz':
print('登录成功')
else:
print('你不是xz!')
6.按照指定的字符切割字符串 split
info = 'xz|123|read'
当字符串中出现了连续的特征符号,应该考虑使用切割操作。
res = info.split('|')
切割后的结果是一个列表。
print(res, type(res))
#['xz', '123', 'read']
name, pwd, hobby = info.split('|')
# name, pwd, hobby = ['xz', '123', 'read']
相当于解压赋值,右边的字符串切割成列表的各个数据值。
然后再分别赋值给左边的变量名。
print(info.split('|', maxsplit=1))
# ['xz', '123|read']
从左往右切割,且只能切一次。
print(info.split('|', maxsplit=1))
# ['xz|123','read']
从右往左切割,且只能切一次。
7.字符串大小写相关 lower upper
s2 = 'HeLLo python 666 你好吗'
print(s2.lower()) #全部转换成小写字母,但数字和中文都不改变
print(s2.upper()) #全部转换成大写字母,数字和中文同上
print(s2.islower()) #is本身就是判断布尔值的标识,结果是布尔值。判断是否为全为小写字母
print(s2.isupper()) #判断是否全为大写字母,结果为布尔值。
print('aaa'.islower()) #Ture
print('AAA'.isupper()) #True
eg:这种方法可以转换用户输入的验证码的大小写,且不影响登录的效果。
方式一:
code = 'Xzeb6'
print('这是网页给你返回的随机验证码:%s' % code)
confirm_code = input('请输入验证码>>>:')
code_upper = code.upper() # 将网页返回的验证码转大写
confirm_code_upper = confirm_code.upper() # 将用户填写的验证码转大写
if confirm_code_upper() == code_upper(): # 统一转大写 再做比对
print('验证码正确')
else:
print('验证码错误')
方式二:
code = 'Xzeb6'
print('这是网页给你返回的随机验证码:%s' % code)
confirm_code = input('请输入验证码>>>:')
if confirm_code.lower() == code.lower(): # 统一转小写 再做比对
print('验证码正确')
else:
print('验证码错误')
8.字符串的格式化输出 {} format
方式1: 等价于%s占位 没有什么优势,这里是用{}占位符。xxx.format
res1 = 'my name is {} my age is {}'
print(res1.format('xzn', 18))
#my name is xzn my age is 18
方式2: 支持索引取值 并且支持重复使用。xxx.format
res2 = 'my name is {0} my age is {1} {0} {1} {1} {1}'
print(res2.format('xz', 18))
#my name is xz my age is 18 xz 18 18 18
方式3: 支持关键字取值(按k取值) 并且支持重复使用。xxx.format
res3 = '{name} {name} {age} my name is {name} my age is {age}'
print(res3.format(name='xz', age=18))
#xz xz 18 my name is xz my age is 18
方式4: f''
#定义变量,简写f后面用变量名表示。
name = 'xz'
age = 18
print(f'my name is {name} my age is {age} {name} {age}')
#my name is xz my age is 18 xz 18
9.统计字符串中指定字符出现的次数 count
res = 'sqwhasjdjahdjwqhdjkasdhdadadad'
print(res.count('j'))#4
print(res.count('ad'))#3
10.判断字符串的开头或者结尾 startswith/endswith
res = 'xz say ha ha hei'
#判断开头的字符,是为True,否为False
print(res.startswith('xz'))
print(res.startswith('x'))
print(res.startswith('b'))
#最后结尾的字符判断,结果为布尔值
print(res.endswith('hei'))
print(res.endswith('h'))
11.字符串的替换 replace
res = 'xz xz xz nihao '
print(res.replace('xz', 'wyb')) # 从左往右全部替换
print(res.replace('xz', 'wyb', 1)) # 从左往右替换指定个数为1
#wyb wyb wyb nihao
#wyb xz xz nihao
12.字符串的拼接 join
12.1
res1 = 'hello'
res2 = 'world'
# 字符串支持加号拼接
print(res1 + res2)
# 字符串支持乘号重复10次输出
print(res1 * 10)
12.2 支持用符号拼接
data_list = ["Kevin","age","address"]
v1 = "_".join(data_list)
print(v1) # Kevin_age_address
12.3 print('$'.join(['xz', 'say', 666])) # 列表中的数据都必须是字符串类型,不然保错!!!
13.判断字符串中是否是纯数字 isdigit
print('123'.isdigit()) # True
print('123a'.isdigit()) # False
print(''.isdigit()) # False
只能纯数字才能被识别成True,不然为False
14.查找某个字符对应的索引值 index
res = 'hello world xz'
print(res.index('d')) # 10
print(res.find('d')) # 10
index查找索引 ,若没有元素,则报错
find查找索引,若没有元素,则不会报错,但是结构为-1,也是就False
print(res.index('d', 0, 5)),在第0索引值和第4个索引值范围内查找该字符。
print(res.find('d', 0, 5))#-1
15.正文相关操作
res = 'my name is jason'
print(res.title()) # My Name Is Jason
如果字符串是标题化的,则见(title())则返回为True,不然返回为False。
内容第一个字母为大写
print(res.capitalize()) # My name is jason
列表的相关方法
1.关键字 list
2.类型转换
print(type(list(123)))
print(type(list(123.22)))
print(type(list('123243jasdsad')), list('123243jasdsad'))
# ['1', '2', '3', '2', '4', '3', 'j', 'a', 's', 'd', 's', 'a', 'd']
print(type(list({'name':"jason",'pwd':123})),list({'name':"jason",'pwd':123}))
# ['name', 'pwd']
列表只能将字典和字符串转化成功,整数和浮点数不能。
所以能够被for循环的数据类型都可以转换成列表
l1 = ['jason', 'kevin', 'oscar', 'tony']
2.1索引取值:
print(l1[0])#jason
print(l1[-1])#tony
负数为从右向左取值,-1位最右边第一个
2.22.切片操作
print(l1[0:3])#['jason', 'kevin', 'oscar']
print(l1[:])#['jason', 'kevin', 'oscar', 'tony']
print(l1[-4:-1])#['jason', 'kevin', 'oscar']
从右到左包含-1,-4
2.3间隔/方向
print(l1[::2])#['jason', 'oscar']
2.4统计列表中数据值的个数
print(len(l1))#4
2.内置函数
1.count():用来统计成员在列表中出现的次数。
2.index():返回改元素的索引值。
>>> list = [123,12,13]
>>> list *= 3
>>> list
[123, 12, 13, 123, 12, 13, 123, 12, 13]
>>> list.index(123)
0
>>> list.index(123,2,5)
3
通过这个列子我们就知道,当列表包含多个成员的时候,返回的是该成员的第一次出现的位置,同时,我们还可以对index()设置参数,查询成员在特定位置范围内出现的索引值,列如index(menber,m,n),表示member在第m-1个到第n-1个位置第一次出现的索引值。
3.reverse():就是将列表中的元素前后颠倒。
4.sort():将元素从小到大排序。
如果想让无序列表从大到小排序,那么可以先用sort() 的方法,再用reverse()方法。
当然我们可以用简便的方法--
>>> list
[123, 12, 13, 123, 12, 13, 123, 12, 13]
>>> list.sort(reverse = True)
>>> list
[123, 123, 123, 13, 13, 13, 12, 12, 12]
5.append():向列表中添加成员
>>> list.append(2)
>>> list
[123, 123, 123, 13, 13, 13, 12, 12, 12, 2]
>>> list.append('8')#可以添加字符类型的元素。
>>> list
[123, 123, 123, 13, 13, 13, 12, 12, 12, 2, '8']
注意:一次只能添加一个成员,并且只能添加在列表的末尾。如果想继续在列表中添加成员,可以通过append()方法,而不能采用extend()因为这会将列表里面的每个成员拆分成单独的成员添加到列表中。
6.exend():该方法也是向列表中添加成员,并且也是参数,但可以列表扩展列表(意思是exend后面是列表时,就会多加的列表里的成员到要添加的列表的后面)如果exend后面跟字符串,则就会一个个字符拆开后依次再加入到列表后面。如果想让字符串完整的加入列表,则需要用列表的形式来添加。
7.insert():在特定位置添加成员。两个参数,insert(m,member),在索引为m(也就是第m+1的位置进行添加),注意:因为是两个参数,索引多加一个参数就会造成错误。
8.remove():从列表中删除指定成员。remove(要删除的成员)
注意:当列表中有多个重复成员时,一次只能删第一个。
9.del :用索引进行删除
del list [2] 删除列表索引为2 的数据值。
10.pop{}:将指定位置的元素取出来,并删除,也就是说有返回值。
>>> list1 = [123, 456, 789]
>>> list1
[123, 456, 789]
>>> b = list1.pop(1)
>>> b
456
>>> list1
[123, 789]
pop{}方法将指定位置对策成员提取出来,返回并且删除了该成员。当pop()后面不加参数的时候,返回的是最后一个。
作业
1.基于字符串充当数据库完成用户登录(基础练习)
data_source = 'jason|123' # 一个用户数据
获取用户用户名和密码 将上述数据拆分校验用户信息是否正确
# #模拟一个数据库,将数据放在里面
data_source = 'jason|123'
# #先用split切割功能,将字符串里的数据切割成一个列表,最小单位为单个数据值,再解压赋值给左边的变量名
name, pwd = data_source.split('|')
# #这里我设置了一个操作三次输入密码错误将推出程序。
for i in range(3):
#定义一个用户输入用户名,加个去除空号的作用
username = input('输入用户名:').strip()
# 定义一个用户输入密码
password = input('输入密码:').strip()
if username == name and password == pwd:
print('登录成功!')
#这里设置了一个登录成功就退出程序
break
else:
print('你的用户名或者密码错误!')
2.基于列表充当数据库完成用户登录(拔高练习) # 多个用户数据
data_source = ['jason|123', 'kevin|321','oscar|222']
data_source = ['jason|123', 'kevin|321', 'oscar|222']
#这里我设置无限次数,是因为我想多次试验用户输入的用户名和密码是不是匹配,输入是不是正确。
while True:
#定义一个用户输入用户名加个去除空号的作用,防止用户在输入时多打出空号而出错。
username = input('输入用户名:').strip()
# 定义一个用户输入密码
password = input('输入密码:').strip()
#这里是列表,所以我可以用for循环取出每个数据值
for i in range(3):
#取出的数据值再除去|,再用解压赋值给左侧变量名。
name, pwd = data_source[i].split('|')
#判断用户名和密码是否正确,正确就退出循环,不正确将继续接着在列表中取下一个值。
if username == name and password == pwd:
print('登录成功!')
break
else:
print('你的用户名或者密码错误!')
另一种方法:
#数据库存放数据
data_source = ['jason|123', 'kevin|321', 'oscar|222']
#设置无限循环,可以无限试用密码和用户名是否匹配。
while True:
#输入用户名和密码
username = input('输入用户名:').strip()
password = input('输入密码:').strip()
#这里是列表,所以我可以用for循环取出每个数据值
for i in range(3):
#定义一个变量来绑定username和password和起来再加上|来和数据库里做比较,相同则输入正确,错误就失败。
data_user = (username + '|' + password).strip()
if data_user == data_source[i]:
print('登录成功')
break
else:
print('登录失败')