今日内容概要
- 数据类型内置方法理论
- 数据类型整形内置方法
- 数据类型浮点型内置方法
- 数据类型字符串内置方法
- 数据类型列表内置方法
- 可变类型与不可变类型理论
- 练习题及答案
1.数据类型内置方法理论:
我们之前学习的每一种数据类型本身都含有一些列的操作方法,内置方法是其中使用最多的(它相当于小功能集合)
在Python中我们使用方法:
使用句点符.
变量名或数据值加.加方法
我们在学习数据类型内置方法时不需要死记硬背,孰能生巧即可。
2.数据类型内置方法之整形int
1.类型转换:
int()
可以转换int()内的数据值的数据类型
字符串:
name = int('555')
print(type(name))
浮点型:
name1 = int(11.11)
print(name1)
2.进制转换:
二进制转换:bin()
八进制转换:oct()
十六进制转换:hex()
如果我们想把二进制、八进制、十六进制转换为十进制
那么我们可以这样做:
int(对应进制)
print(int) 即可
print(int(0b1000101011))
print(int(0o1053))
print(int(0x22b))
或者:
print(int(对应字符串类型进制),相应进制数)
print(int("0b1100100", 2))
print(int("0o144", 8))
print(int("0x64", 16))
python对数字的敏感度比较低,在进行一些计算时精度不准确
如a = 1
b = 2.11
print(b-a)
我们需要精确的计算数据的话可以借助一些模块的功能去辅助我们完整运算部分内容
如:numpy....等
3.数据类型内置方法之浮点型float
1.类型转换:
float(其它数据类型)
字符串也可以转换为浮点型,前提是文本内容有且只有一个小数点,并且全为数字才可以
print(float('585'))
print(float(5))
它的缺点上面整形部分也提到过就是在数学计算方面并没有那么的精准,好在我们也可以通过模块去帮助我们解决这些问题
4.数据类型内置方法之字符串str(重点)
1.类型转换:
字符串也跟上述数据类型一样可以转换类型:
str(其他数据类型类型)
任意数据类型都可以转!
print(type(str(555)))
print(type(str(12.44)))
2.必须掌握的内置方法:
1.索引取值:(前取后不取)
我们使用[]加索引位置就可以取值了
l1 = 'hello world'
print(l1[0])
print(l1[-1])
2.切片操作:
我们在[]分别数字 用:隔开 这样表示的是在这个区间里面取字符串里面的数值
print(l1[1:4])
print(l1[0:5])
print(l1[-5:-1])
3.切片操作(反方向):
我们可以在[]在添加一个:号 后面加-1 这样我们就可以反着取值
如:
print(l1[::-1])
4.切片补充:
print(l1[:])
print(l1[2:])
print(l1[:6])
print(l1[::2])
3.统计字符串中字符的个数
len() 统计个数/'长度'
l1 = 'hello world'
print(len(l1))
4.去除字符串首尾指定的字符
.strip() 去除指定字符(括号内无内容默认是去除空格)
l1 = '@@hello world@@@'
print(l1.strip('@'))
.lstrip()
print(l1.lstrip('@'))
.rstrip()
print(l1.rstrip('@'))
'''
这个我们做一个应用来看一下它的使用场景
大家都知道我们在登录一些账户时可能无意间输入了空格,但是账户还是可以成功登录
那这样的情况就是类似于.strip()的功能
user_name = input('请输入用户名:')
pass_word = input('请输入密码:')
if user_name.strip() == 1 and pass_word.strip() == 1:
print('登录成功')
这样我们用户不管是不是误操作无意间输入空格,只要用户名和密码正确就可以成功登录
'''
5.切割字符串中指定字符:
.split()
l2 = 'sex|name|hobby'
print(l2.split('|'))
print(l2.split('o'))
我们也可以使用之前解压赋值的方法将分割好的列表进行赋值
a,b,c = ['sex','name','hobby']
print(a,b,c)
我们如果只想分割一个数据值的话我们可以这样:
maxsplit 代表最大分割数
print(l2.split('|',maxsplit=1))
由于我们使用split方法分割,它的顺序时从做往右分割的,我们也可以在开头加r让它从右向左分割
print(l2.rsplit('|',maxsplit = 1))
6.字符串格式化输出:
我们之前学会过可以使用占位符%s 或者%d 替换相关内容
现在我们可以通过字符串的内置功能来自实现此功能
1. .format()方法1
l1 = 'hello worl{}'
print(l1.format('d'))
2. format()方法2
l1 = 'h{0}llo worl{1} {1}{0}{1}{0}'
print(l1.format('e','d'))
3.format()方法3
res = 'my name is {name1} my age is {age1} ' \
'{name1} {age1} {name1} '.format(name1='jason', age1=123)
print(res)
4.format()方法4(推荐使用方法)
name = 'bob'
age = 15
print(f'欢迎你{name},你的年龄为{age}岁')
这个方法更加简洁也能让人见名知意
7.字符串中需要了解的方法
1.大小写:
.lower()
.upper()
l1 = 'HEllo WoRLd'
print(l1.upper())
print(l1.lower())
其实它的应用场景与上述说的strip差不多,也可以用于用户登录输入验证码时
用户只要输入正确的验证码 不管时大写小写 都可以正常登录
info = 'PxKYGhn'
print('验证码为:PxKYGhn')
pass_word = input('请输入验证码:')
if pass_word.lower() == info.lower():
print('登录成功')
else:
print('输入错误,请重新输入')
8.判断字符串中是否为纯数字
.isdigit()
l1 = '5544875'
print(l1.isdigit())
l1 = '55x4875'
print(l1.isdigit())
它也可以用在我们之前的练习题:猜年龄里面
age = input('请输入年龄:')
if age.isdigit() == True
print('不错可以')
else:
print('请输入数字')
9.替换字符串中指定的内容:
.replace()
l1 = '我喜欢 小明 小明 小明 小明 小明 小明'
print(l1.replace('小明','小美女'))
10.字符串的拼接
方法1:加号
l1 = '你好'
l2 = '我叫'
print(l1+l2)
方法2:.join()方法
我们想添加字符串内容到列表内部:
print('、'.join(['wo','shi','da','shuai','ge']))
我们可以看到 它是按一个数据值后添加一个我们想添加的字符串的
11.判断指定字符出现的次数:
.count()
l1 = '115111511148811'
print(l1.count('1'))
12.判断字符串的开头和结尾
.startswith()
.endswith()
l1 = '5599988'
print(l1.stratswith('55'))
print(l1.stratswith('9'))
print(l1.endswith('8'))
print(l1.endswith('9'))
13.其他方法补充说明:
.title()
l1 = 'helLO wORld hELlo worLD'
print(l1.title())
.capitalize()
print(l1.capitalize())
.swapcase()
print(l1.swapcase())
.index()
print(l1.index('O'))
.find()
print(l1.find('O'))
print(l1.find('x'))
print(l1.index('x'))
'''
如果index()方法 找不到这个值 就会直接报错
如果find()方法 找不到这个值 会直接默认返回-1
'''
print(l1.find('ld'))
5.数据类型内置方法之列表list(重点)
1.类型转换
list()
可以被for循环的数据类型都可以使用list()方法转换成列表
字典 字符串 元组 集合
print(list('good moring'))
print(list({'username': 122, 'password': 857}))
print(list({11,55,77,88}))
print(list((55,88,66,99)))
2.需要掌握的list内置方法(重点)
1.索引取值:
l1 = [11,22,33,44,55,66,88]
print(l1[5])
print(l1[-1])
2.切片操作(与字符串切片操作基本一致)
print(l1[0:5])
print(l1[0:5:2])
print(l1[::-1])
3.统计列表中数据值的个数:
len()
print(len(l1))
4.列表内部数据值修改:
可以通过索引取值后用赋值符号赋值给变量名
data = 55
l1[0] = data
print(l1)
5.在列表尾部添加新数据:
方式1:
.append()
l1.append(28)
print(l1)
l1.append(['jason', 'kevin', 'jerry'])
print(l1)
方式2:
.insert()
l1.insert(5,88)
l1.insert(3,[55,66,77])
6. 拓展列表/合并列表:
l1 = [1,2,3]
l2 = [4,5,6]
方式1:
我们可以让两个列表进行相加,这样他们可以合并成一个列表
print(l1+l2)
方式2:
.extend()方法
l1.extend(l2)
print(l1)
我们看一下字符串:
l2 = ['wo','zui','shuai']
l1.extend(l2)
print(l1)
7.删除列表数据
l1 = [11,22,33,44,55,66,88]
方法1.
del l1[0]
print(l1)
方法2:
.remove()
l1.remove(66)
print(l1)
l1.remove(100)
print(l1)
方法3:
.pop()
l1.pop(2)
l1.pop()
pop 方法与 remove 方法的区别在于 remove 是直接移除列表中的数据值
而pop方法是先弹出此数据值 并不会直接删除
8.排序:
.sort()
l1 = [54, 99, 55, 76, 12, 43, 76, 88, 99, 100, 33]
l1.sort()
print(l1)
必须是数字才可以排序,不能是字符串
.sort(reverse = True)
l1.sort(reverse = True)
print(l1)
9.统计列表中某个数据值出现的次数
.count()
print(l1.count(99))
10.颠倒列表顺序
.reverse()
l1.reverse()
print(l1)
reverse 是颠倒顺序 , 而 sort 是排序 注意不要搞混
6.数据类型字典内置方法
1.类型转换
dict()
字典的转换一般不使用关键字
而是自己动手转
2.字典必须要掌握的操作:
取值方法1:
uesr_dict = {'username':'jason','hobby':555,'info':'buy'}
print(user_dict['username'])
print(user_dict.get('some'))
取值方法2:
print(user_dict.get('info'))
print(user_dict.get('some'))
print(user_dict.get('some','这个值不在这里请换一个哦'))
修改数据值:
user_dict['username'] = 'tony'
user_dict['baby'] = 'tom'
print(user_dict.get('baby'))
3.删除数据:
1.del user_dict['username']
print(user_dict)
2.pop方法
print(user_dict.pop('info'))
print(user_dict)
4.统计字典中键值对的数量
len()
print(len(user_dict))
5.字典三剑客:
1..keys()
data = user_dict.keys()
print(data)
2..values()
data = user_dict.values()
print(data)
3..items()
data = user_dict.items()
print(data)
for k,v in user_dict.items():
print(k,v)
8. 补充说明:
快速生成 值相同的字典
print(dict.fromkeys(['username','hobby','sex','height'],667))
data = dict.fromkeys(['username','hobby','sex','height'],[])
print(data)
data['username'].append('jason')
data['hobby'].append(559)
直接乱了!
'''使用此方法当第二个公共值是可变类型的时候 一定要注意 通过任何一个键修改都会影响所有'''
print(user_dict.setdefault('username', 'tony'))
print(user_dict)
7.数据类型元组内置方法
1.类型转换()
tuple()
2.元组必须掌握的方法
t1 = [11,222,33,55,88,77,66,999,885]
与字符串 列表 相同
1.计算元组内数据值的个数:(字符串 列表)
.len()
print(len(t1))
2.计算数据出现在元组中的次数
.count
print(t1.count(88))
3.找出元组内指定数据值的索引值
.index()
print(t1.index(222))
4.元组内如果只有一个数据值需要在后面加一个逗号让它并保持元组的数据类型
5.元组内索引值绑定的数据值这个关系不可以被修改
6.元组内不能新增数据以及删除数据
8.数据类型集合内置方法
1.类型转换()
set()
集合内数据必须是不可变类型的(字符串、整形、字符串、元组)
集合内的数据是无序的,不能用索引取值
2.我们使用集合主要是用来
1.去重:
s1 = {11, 22, 11, 22, 22, 11, 222, 11, 22, 33, 22}
l1 = [11, 22, 33, 22, 11, 22, 33, 22, 11, 22, 33, 22]
s1 = set(l1)
l1 = list(s1)
print(l1)
'''集合的去重无法保留原先数据的排列顺序'''
2.关系运算:
f1 = {'jason', 'tony', 'jerry', 'oscar'}
f2 = {'jack', 'jason', 'tom', 'tony'}
print(f1 > f2)
print(f1 < f2)
9.字符编码理论及实操
'''
我们知道计算机只能识别0/1,所以我们如果想让计算机能输出我们想要的字母或者文字,我们就需要把0/1二进制组合进行一些编排,让它对应上我们生活中的字母以及文字。
相当于我们的文字与二进制是由一种对应的关系 比如我输入 你 那么计算机会把编码本的对应关系 进行一个对照
'''
字符编码实战:
1.针对乱码不要慌 切换编码慢慢试即可
2.编码与解码
编码:将人类的字符按照指定的编码编码成计算机能够读懂的数据
字符串.encode()
解码:将计算机能够读懂的数据按照指定的编码解码成人能够读懂
bytes类型数据.decode()
3.python2与python3差异
python2:
1.文件头
2.字符串前面加u
u'你好啊'
python3默认的编码是utf系列(unicode)
python2默认的编码是ASCII
10.不可变类型与可变类型理论(有点点小绕)
1.可变类型
2.不可变类型
下面我们用几个例子来说明一下他们的实际情况:
比如:
s1 = '我要吃苹果'
name = s1.strip('我')
print(name)
print(s1)
'''
字符串在调用内置方法后 并不会修改自己本身,而是产生了一个新的结果
我们想看它有没有新的结果可以在字符串使用方法的时候用赋值符号将它赋值给一个变量名并打印结果即可
'''
我们在来看一下列表部分:
l1 = [11,22,33]
print(l1.append(44))
print(l1)
'''
因为列表在使用内置方法后改变的就是自己本身,所以没有产生一个新的结果。我们同样可以用赋值符号来进行判断。(除.count()方法)
'''
11.练习题及答案
'''
我们知道计算机只能识别0/1,所以我们如果想让计算机能输出我们想要的字母或者文字,我们就需要把0/1二进制组合进行一些编排,让它对应上我们生活中的字母以及文字。
相当于我们的文字与二进制是由一种对应的关系 比如我输入 你 那么计算机会把编码本的对应关系 进行一个对照
'''
字符编码实战:
1.针对乱码不要慌 切换编码慢慢试即可
2.编码与解码
编码:将人类的字符按照指定的编码编码成计算机能够读懂的数据
字符串.encode()
解码:将计算机能够读懂的数据按照指定的编码解码成人能够读懂
bytes类型数据.decode()
3.python2与python3差异
python2:
1.文件头
2.字符串前面加u
u'你好啊'
python3默认的编码是utf系列(unicode)
python2默认的编码是ASCII
1.基于字符串充当数据库完成用户登录(基础练习)
data_source = 'jason|123'
获取用户用户名和密码 将上述数据拆分校验用户信息是否正确
data_source = 'jason|123'
name = input('请输入用户名:')
password = input('请输入密码:')
l1 = data_source.split('|')
if name == l1[0] and password == l1[1]:
print('输入正确,登录成功')
else:
print('用户名或密码输入错误')
2.基于列表充当数据库完成用户登录(拔高练习)
data_source = ['jason|123', 'kevin|321','oscar|222']
data = input('请输入用户名')
password = input('请输入密码')
a,b,c = data_source
if data == a[0:5] and password == a[6:9]:
print('登录成功')
elif data == b[0:5] and password == b[6:9]:
print('登录成功')
elif data == c[0:5] and password == c[6:9]:
print('登录成功')
else:
print('用户名或密码输入错误')
3.利用列表编写一个员工姓名管理系统
输入1执行添加用户名功能
输入2执行查看所有用户名功能
输入3执行删除指定用户名功能
'''分析 用户输入的不同 可以执行不同的代码'''
ps: 思考如何让程序循环起来并且可以根据不同指令执行不同操作
提示: 循环结构 + 分支结构
list1 = []
while True:
data = input('请输入指令(数字1,2,3):')
if int(data) == 1:
name = input('请输入想要添加的用户名:')
list1.append(name)
print(f'用户{name}已经添加到系统中!')
if int(data) == 2:
print('您好系统列表已经打印出', list1)
if int(data) == 3:
re_data = input('请输入需要移除的用户名(请优先查看有没有用户名):')
list1.remove(re_data)
print('已经从系统中移除掉%s'% re_data)
else:
print('请输入数字1或者2或者3')
拔高: 是否可以换成字典或者数据的嵌套使用完成更加完善的员工管理而不是简简单单的一个用户名(能写就写不会没有关系)
notice = True
user_data_list = []
user_data_dict = {}
admin_data = {'随风': 4897}
login_count = 0
common_data = {}
while notice:
print('欢迎使用随风出品员工登录管理系统,请先注册/登录!')
login_choice = input('请输入序号\n1.注册\n2.登录\n请输入您的选择:')
if int(login_choice) == 1:
common_name = input('请输入需要注册的用户名:')
common_password = input('请输入需要注册的密码(仅限数字)')
common_data[common_name] = common_password
print(f'恭喜,{common_name}注册成功')
elif int(login_choice) == 2:
login_name = input('请输入登录用户名')
login_password = input('请输入登录密码')
if login_name in common_data and login_password == common_data[login_name]:
choice_login = input('输入Q进入员工模式/输入M进入管理者模式')
if choice_login.upper() == 'M':
admin_username = input('请输入管理者用户名>>>>>:')
admin_password = input('请输入管理者密码:')
if admin_username in admin_data and int(admin_password) == admin_data[admin_username]:
print(f'欢迎{admin_username}进入管理者模式,请根据选项编号选择您要执行的操作')
while notice:
choice = input(
' 请输入选项编号\n 1. 添加用户名\n 2. 查看所有用户名\n 3. 删除指定员工\n 4. 退出程序并回到登录界面\n 5.修改指定员工信息\n >>>>>>>>')
if choice.strip() == '1':
user_name = input('请输入用户名>>>>>:')
if user_name in user_data_list:
print('用户名已存在,请重新输入')
continue
user_password = input('请输入密码:>>>>>')
user_data_dict[user_name] = user_password
user_data_list.append(user_name)
print(f'成功!用户{user_name}已经添加到系统中')
elif choice.strip() == '2':
print(f'已经为您展示出已有用户名信息:\n{user_data_list}')
elif choice.strip() == '3':
choice_del = input('请输入您想要删除的用户名>>>>>:')
if choice_del not in user_data_dict:
print(f'您输入的{choice_del}不在系统中!请重新输入')
else:
user_data_dict.pop(choice_del)
user_data_list.remove(choice_del)
print(f'用户{choice_del}已从系统中移除')
elif choice.strip() == '4':
print('已退出管理员登录界面')
break
elif choice.strip() == '5':
re_name = input('请输入原有需要修改的用户名:')
if re_name in user_data_list:
qe_name = input('请输入新用户用户名信息:')
qe_pwd = input('请输入新用户密码信息:')
user_data_list.remove(re_name)
user_data_list.append(qe_name)
user_data_dict.pop(re_name)
user_data_dict[qe_name] = qe_pwd
print(f'亲爱的{qe_name}您好,用户名以及密码已修改成功')
else:
print('没有此用户,请重新输入')
continue
else:
print('进入选项失败,请输入对应的选项编号(数字)')
else:
login_count += 1
print(f'用户名或密码输入错误,您还有{3 - login_count}次机会,请重新输入')
if login_count == 3:
print('您已经输入错误三次,结束运行')
break
continue
else:
print('22')
if choice_login.upper() == 'Q':
print('欢迎您进入员工模式,您的权限为/添加员工信息/查看员工信息')
while notice:
choice = input(' 请输入选项编号\n 1. 添加用户名\n 2. 查看所有用户名\n 3. 退出程序并回到登录界面\n >>>>>>>>')
if choice.strip() == '1':
user_name = input('请输入用户名>>>>>:')
if user_name in user_data_list:
print('用户名已存在,请重新输入')
continue
user_password = input('请输入密码:>>>>>')
user_data_dict[user_name] = user_password
user_data_list.append(user_name)
print(f'成功!用户{user_name}已经添加到系统中')
elif choice.strip() == '2':
print(f'已经为您展示出已有用户名信息:\n{user_data_list}')
elif choice.strip() == '3':
print('已退出员工管理界面')
break
else:
print('进入选项失败,请输入对应的选项编号(数字)')
else:
login_count += 1
print(f'用户名或密码输入错误,您还有{3 - login_count}次机会,请重新输入')
if login_count == 3:
print('您已经输入错误三次,结束运行')
break
else:
print('请输入数字编号进行选择')
continue