数据类型与字符串内置方法
内置方法理论
数据内置方法理论
每一种数据类型都含有一系列操作方法,内置方法是其中最多的。
在python中数据类型调用内置方法统一句式为:句点符
变量名或 数据值 或关键字 str.
# 补充:如何查看数据类型的内置方法
借助于编程软件的自动提示,采用句点符快速查看
内置方法
整型内置
1. 类型转换
把其他数据类型转换成整型。
int(其他数据类型) int方法只能转换纯数字的字符串 (浮点型和字符串纯数字)
2. 进制数转换
数字如果是:
0b开头 二进制 0o开头 八进制
0x开头 十六进制
十进制转其他进制
print(bin(100)) # 0b开头二进制 bin(用来转二进制)
print(oct(100)) # 0o开头八进制 oct(用来转八进制)
print(hex(100)) # 0x开头十六进制 hex(用来转十六进制)
其他进制转十进制
# 其他进制转十进制 用 int
print(int(0b1100100))
print(int(0o144))
print(int(0x64))
# 其他进制数转十进制 字符串用法,在后面要告诉int是哪种进制
print(int("0b1100100", 2))
print(int("0o144", 8))
print(int("0x64", 16))
"""python 对数字精确度低,python有很多厉害的模块,如果需要进行精确计算那么要用到模块numpy...."""
浮点型内置
只能转换数字的数据类型(整型,浮点型,字符串)只能转换字符串里的整数或者只有一个小数点的数字也可以转换,可以识别小数点(但是只能识别1个小数点)
类型转换
float(其他数据类型)
代码:
res = float(11)
print(res, type(res))
res = float(11.1)
print(res, type(res))
res = float('11')
print(res, type(res))
res = float('11.11')
print(res, type(res))
res = float('11.1.1') # 字符串转浮点型只支持1个小数点
print(res, type(res))
字符串内置
类型转换
str()
各数据类型转换
res = str(11)
print (res, type(res))
res1 = str(11.11)
print (res1, type(res1))
res2 = str('12')
print (res2, type(res2))
res3 = str([1, 2, 3])
print (res3, type(res3))
res4 = str({'name': 123, }) # 字典只能取键值
print (res4, type(res4))
res5 = str((1, 2, 3, 4))
print (res5, type(res5))
res6 = str({1, 2, 3, 4})
print (res6, type(res6))
索引取值
索引取值: 根据索引位取值
支持负数从尾开始 ,起始从0开始超出范围会报错
a1 = 'hello world'
print(a1[0]) # h
print(a1[-1]) #支持负数 从某尾开始
切片操作
切片操作:
在切片操作中 我们需要注意的是 我们输入的索引位是顾头不顾尾, 切片也可以用负数(从左往右),我们也可以修改从右往左[-1:-4:-1] -1代表从右往左。也可以设置隔位切取 输入 2 代表隔1位取一次,如果索引内只输入冒号的情况下默认全取也可以在后面输入隔位切取。
a1 = 'hello world' # 字符串里空格也算字符
print(a1[1:5]) # 顾头不顾尾 从索引1一直切取到索引4
print(a1[-5:-1]) # 注意只能从左往右
可以修改切片方向 (间隔)
print(a1[1:5:2]) # 可以设置 间隔几个取一个值 默认是1
print(a1[-1:-5:-1]) # 上面切片操作只能从左往右 -1代表从从右往左
print(a1[:]) # 不写数字默认全取
统计操作
统计字符串中字符的个数,强调字符串里的空格也算长度和个数
len
a1 = '123456789' # 字符串里的空格也算长度和个数
print(len(a1)) # len 统计关键字
移除首尾字符操作
在我们使用登录操作时,如果用户输入的用户名可能会多输入一个空格,那么就需要使用移除首位字符操作
.strip() 移除首尾字符
username = input('username:') # 获取用户输入的用户名
if username == 'tank': # 判定用户名是否是 tank
print('登上啦')
""" 如果我们在输入用户的时候 在前面和后面 多输入了一个空格那么就无效"""
res = ' tank '
print(res.strip()) # 如果strip 括号内不写默认移除首位的空格
"""补充:
也可以移除左边的首位空格,或者右边的首位空格 使用l(左) r(右) 中间不能移"""
切割操作
在我们是使用split切割操作时 需要指定却要切割的字符,在我们使用split中也可以限制切除几个指定字符(maxsplit)来设置最大切割数,还可以改变方向切割
.split(指定字符)
res = 'tank|123|eee'
print(res.split('|')) # 该方法处理完成后是一个列表
name, pwd, hobby = res.split('|') # 解压赋值
print(name, pwd, hobby )
print(res.split('|', maxsplit=1)) # 使用maxsplit 切除指定1个管道符 maxsplit 表示最大切割数
print(res.rsplit('|', maxsplit=1)) # 使用r左右往左 切割 1割管道符,
字符串格式化输出操作
在我们没学习字符串格式化的时候都是使用占位符%s ,比较麻烦。字符串格式化format比较简便。使用大括号{}占位 .多个{}也可以使用数据值中的索引位来占位。
res = 'uesrname {} age {}'.format('tank', 18) # 普通占位使用方法
print(res)
res = 'uesrname {0} age {1} {0}'.format('tank', 18) # 可以使用索引位来占位
print(res)
res = 'uesrname {name1} age {age1} '.format(name1='tank', age1=18) # 关键字传参(见名知意,直接高速度它正确的数据值)
print(res)
'''推荐使用方法:f模板字符串
name = input('你的名字是:')
age = input('年龄:')
res = f'my name is {name} my age is {age}' # 在字符串前面写一个f 在大括号里输入变量名,获取用户输入后直接获取
print(res) '''
字符串内置方法补充
大小写相关
"""当我们在日常输入图片验证码的时候会有大小写之分,使用.upper或 .lower 来将用户输入的验证码统一转换大小写后在和验证码校对"""
res = 'heLLo World'
print(res.upper()) # HELLO WORLD
print(res.lower()) # hello world
code = '1AfEwQ'
print('展示给用户看的验证码图片', code) # 打印验证码给用户看
confirm_code = input('请输入验证码').strip() # 确定验证码- 获取用户输入验证码,我们要习惯加上移除首位空格符
if confirm_code.upper() == code.upper(): # 判断 用户输入的确定验证码转大写.upper 后和 我们设定的验证码code.upper转大写后是否一致
print('验证码正确')
大小写补充
res = 'heLLo World'
print(res.isupper()) # 判断字符串是否时纯大写 False
print(res.islower()) # 判断字符串是否时纯小写 False
判断字符串中是否时纯数字
.isdigit()
res = ''
print(res.isdigit()) #打印时判断res数值是否是全数字
猜年龄获取用户输入转纯数字代码(也可以用在输入密码上)
guess_age = input('你猜猜我多大').strip() # 猜年龄-获取用户输入-去掉首尾空格
if guess_age.isdigit(): # 判断 获取到的用户输入值是否时全数字
guess_age = int(guess_age) # 把猜年龄获取到的数值转换成整型
else: #如果不是则
print('您输的是数字吗?')
替换字符串中指定的内容
.replace()
res = 'name is tank tank tank'
print(res.replace('tank', 'sb', 1)) # replack替换res中的 旧数值为tank, 新数值位sb 1代表替换几次
字符串拼接
字符串与字符串之间可以使用+法,只能和数字*。 加法过程中可以在+中添加符号
.join() 加入
a1 = 'you is'
a2 = 'sb'
print(a1 + a2) # a1加上a2
print(a2 * 4) # a2 × 4 只能和数字
.join将列表当中多个数据值用管道符拼接到一块 参与拼接的数据值必须都是字符串
print('|'.join(['111', '222', '333'])) # .join将列表当中多个数据值用管道符拼接到一块 参与拼接的数据值必须都是字符串
1.统计指定字符出现的此时
res = '1223422225622'
print(res.count('2')) # 统计 2出现的次数
2.判断字符串的开头或结尾
res = 'age name'
print(.startswith('a')) # 判定开头是否是a
print(.endswith('e') # 判定结尾是否是e
成员运算符 复习 in
3.补充
.title() #将每个数据值(英文词)的首字母大写
.capitalize() # 将整个单词首字母大写
.swapcase() # 将大小写转换
.index() #查找单数据值对应的索引 输入没有的数值会返回 -1
.find() #查找单数据值对应的索引 ,输入没有的数值会报错
作业
1. 基于字符串充当数据库完成用户登录(基础练习)
data_source = 'jason|123' # 一个数据库
username = input('请输入用户名:').strip() # 获取用户输入用户名
pwd = input('请输入密码:').strip() # 获取用户输入密码
# 切割字符串,获取正确的用户名和密码
real_username, real_pwd = data_source.split('|')
# 校对用户名密码是否正确
if username == real_username and pwd in real_pwd:
print('登陆成功')
else:
print('用户名密码错误')
```python
基于列表充当数据库完成用户登录(拔高练习)
data_source = ['jason|123', 'kevin|321', 'oscar|222'] # 多个用户数据
username = input('请输入用户名:').strip() # 获取用户输入用户名
pwd = input('请输入密码:').strip() # 获取用户输入密码
# join将usename pwd获取到的用户输入值 以管道符拼接起来
a = ('|'.join([username, pwd]))
if a in data_source:
print('登陆成功')
else:
print('用户名密码错误')
data_source = ['jason|123', 'kevin|321','oscar|222']
data_source = ['jason|123', 'kevin|321', 'oscar|222']
# 1.先获取用户输入的用户名和密码
username = input('username>>>:').strip()
password = input('password>>>>:').strip()
# 2.循环获取列表中每一个真实数据
for data in data_source: # 'jason|123' 'kevin|321'
real_name, real_pwd = data.split('|') # jason 123
if username == real_name and password == real_pwd:
print('登录成功')
break
else:
print('用户名或密码错误')
data_source = ['jason|123', 'kevin|321', 'oscar|222']
username = input('username>>>:').strip()
password = input('password>>>:').strip()
user_data = f'{username}|{password}' # username + '|' + password
if user_data in data_source:
print('登录成功')
else:
print('用户名或密码错误')
利用列表编写一个员工姓名管理系统
输入1执行添加用户名功能
输入2执行查看所有用户名功能
输入3执行删除指定用户名功能
'''分析 用户输入的不同 可以执行不同的代码'''
ps: 思考如何让程序循环起来并且可以根据不同指令执行不同操作
提示: 循环结构 + 分支结构
name_list = [] #设立一个空的表
while True: # 循环
num =input('请输入命令').strip() # 获取用户输入命令
if num == '1': # 当命令等于=1 时
name = input('请输入用户名:').strip() # name 获取输入用户名
name_list.append(name) #append name获取到的用户名加入name_list 空的表中
print(name_list) # 打印表
elif num =='2': # 当命令是 2时
print(name_list) # 打印 列表
elif num =='3': # 命令等于3时
name1 = input('请输入指定的用户名').strip() # name1 获取用户输入的指定用户名
name_list.remove(name1) # 在name_list表中 用.remove(name1)删除 a获取的用户输入值
data_list = []
# 2.添加循环结构
while True:
# 3.先打印项目功能 供用户选择
print("""
1.添加用户
2.查看用户
3.删除用户
""")
# 4.获取用户想要执行的功能编号
choice_num = input('请输入您想要执行的功能编号>>>:').strip()
# 5.根据不同的功能编号执行不同的分支代码
if choice_num == '1':
# 6.获取用户输入的用户名
username = input('请输入您的用户名>>>:').strip()
# 7.判断当前用户名是否已存在
if username in data_list:
print('用户名已存在')
else:
# 8.列表添加用户名
data_list.append(username)
print(f'用户名{username}添加成功')
elif choice_num == '2':
# 9.循环打印每一个用户数据
for name in data_list:
print(
f"""
------------user info---------
用户名:{name}
------------------------------
""")
elif choice_num == '3':
# 10.获取用户想要删除的用户名
delete_username = input('请输入您想要删除的用户名>>>:').strip()
# 11.先判断用户名是否存在
if delete_username in data_list:
data_list.remove(delete_username)
print(f'用户名{delete_username}删除成功')
else:
print('你个傻帽 用户名不存在 删毛线啊!!!')
else:
print('很抱歉 暂时没有您想要执行的功能编号')