第六章:range方法与数据类型内置方法
range方法
生成数字列表,顾头不顾尾。类似于一个工厂,不会占用太多的内存空间,要就生产。
for i in range(101): # 起始位置为0 终止位置为100
print(i) # [0,.......100]
for i in range(10, 20): # 第一个为起始位置 第二个终止位置
print(i)
for i in range(1, 20, 2): # 第三个数为步长 默认为 1
print(i) # [1, ...19]
倒叙不输出的情况
for i in range(10,0,-1):
print(i) # [10, ...1]
for i in range(0,10,-1): #什么都不输出
print(i)
for i in range(10,-2): #什么都不输出
print(i)
for i in range(-2,10): # -2 为开头
print(i) # [-2, ...9]
数据类型内置方法
每一种数据类型本身都含有一系列的操作方法,内置方法是其中最多的(自带的功能)。
在 python 中数据类型调用内置方法的统一句式为:句点符。
如:dit = {‘a’:123} dit.item() 字典的内置方法
绑定字符串的 变量名.字符串 内置方法
ps:数据类型的内置方法比较的多,我们如果想要掌握,不要光靠死记硬背,唯手熟尔。
类型转换
int (其他数据类型)
ps:浮点型可以直接转,字符串必须满足内部是纯数字才可以
进制 | 进制前缀 | 转为十进制 | 十进制转X进制 | 字符串转值 |
---|---|---|---|---|
二进制 | 0b | int(0b1100100) | bin(100) | int("0b1100100", 2) |
八进制 | 0o | int(0o144) | oct(100) | int("0o144", 8) |
十六进制 | 0x | int(0x64) | hex(100) | int("0x64", 16) |
ps:python 自身对数字的敏感度较低(精确度低),如果需要进准的计算需要借助于模块 numpy...
0.1 * 0.23 0.023000000000000003
字符串的内置方法
切片
s = 'ABCDEFGHIJK'
# 索引
s1 = s[3]
print(s1) # D
# 切片 顾头不顾尾
s2 = s[0:3]
s3 = s[0:4]
print(s2, s3) # ABC ABCD
# 方向
s6 = s[4:0:-1]
print(s6) # EDCB
# 例子
print(s[::-1]) # KJIHGFEDCBA 整体倒叙
print(s[2:]) # CDEFGHIJK 从索引 2 开始往后都要
print(s[:5]) # ABCDE 从索引 0 开始往后要到4
print(s[::2]) # ACEGIK 步长为 2 进行取值
print(s[-1:-5:-1]) # KJIH 倒叙最后一位至倒数第四位
长度统计
s = 'ABCDEFGHIJK'
print(len(s)) # 11
移除字符串首尾指定的字符
括号内不写,默认移除首尾的空格
# 默认删除空格
x =" 唯 一 不 变 的 就 是 变 化 "
x1 = x.strip()
x2 = x.rstrip()
x3 = x.lstrip()
print(x1) # '唯 一 不 变 的 就 是 变 化'
print(x2) # ' 唯 一 不 变 的 就 是 变 化'
print(x3) # '唯 一 不 变 的 就 是 变 化 '
# 删除指定字符
z='%the*onlyconstant-is9change.'
z1 = z.rstrip('.%')
print(z1) # '%the*onlyconstant-is9change'
切割字符串中指定的字符
res = 'jason|123|read'
print(res.split('|')) # ['jason', '123', 'read'] 该方法的处理结果是一个列表
name, pwd, hobby = res.split('|')
print(res.split('|', maxsplit=1)) # ['jason', '123|read'] 从左往右切指定个数
print(res.rsplit('|',maxsplit=1)) # ['jason|123', 'read'] 从右往左切指定个数
大小写
y = 'abcDEfg'
y2 = y.upper() #全大写
y3 = y.lower() #全小写
print(y2,y3) # ABCDEFG abcdefg
y1 = y.capitalize() #首字母大写
print(y1) # Abcdefg
y3 = y.swapcase()
print(y3) # ABCdeFG
y4 = y.center(25) #居中,填充
print(y4) # abcDEfg
y5 = y.center(25,'-')
print(y5) # ---------abcDEfg---------
#每个隔开(特殊字符或数字)的单词首字母大写
x = 'the only constant is change.'
x1 = x.title() # The Only Constant Is Change.
print(x1)
z = 'the*only constant-is9change.'
z1 = z.title() # The*Only Constant-Is9Change.
print(z1)
判断字符串中是否是纯数字
name = '亦双弓123'
print(name.isalnum()) # True 字符串由字母或数字组成
print(name.isalpha()) # False 字符串由字母组成
print(name.isdigit()) # False 字符串只有数字组成
替换字符串中指定的内容
#replace 默认是全局替换
str = '唯一不变的就是变化'
str1 = str.replace('变','change')
str2 = str.replace('变','change',1)
print(str1) # 唯一不 change 的就是 change 化
print(str2) # 唯一不 change 的就是变化
字符串的拼接
s1 = 'hello'
s2 = 'world'
print(s1 + '##' + s2) # hello##world
print(s1 * 3) # hellohellohello
print('@'.join(['jason', '123', 'read', 'JDB'])) # jason@123@read@JDB
# print('@'.join(['jason', 123])) # 报错 参与拼接的数据值必须都是字符串
统计指定字符出现的次数
z = 'the only constant is change.'
z = z.count('on')
print(z) # 2
判断字符串的开头或者结尾
res = 'jason say hello'
print(res.startswith('jason')) # True
print(res.startswith('j')) # True
print(res.startswith('say')) # False
print(res.endswith('o')) # True
print(res.endswith('llo')) # True
print(res.endswith('hell')) # False
其他方法补充
res = 'helLO wORld hELlo worLD'
print(res.index('D')) # 22 获取‘D’的索引位置
print(res.find('R')) # 8 查找 ‘R’的索引位置
# print(res.index('c')) # 找不到直接报错
print(res.find('c')) # -1 找不到默认返回-1
print(res.find('LO')) # 3
作业
1.计算1-100所有的数之和
2.判断列表中数字2出现的次数
l1 = [11,2,3,2,2,1,2,1,2,3,2,3,2,3,4,3,2,3,2,2,2,2,3,2]
3.编写代码自动生成所有页网址(注意总共多少页)
https://movie.douban.com/top250
4.编写代码打印出下列图形(ps:for循环嵌套)
*****
*****
*****
*****
5.基于列表充当数据库完成用户登录 # 多个用户数据
data_source = ['jason|123', 'kevin|321', 'oscar|222']
6.利用列表编写一个员工姓名管理系统
输入1执行添加用户名功能
输入2执行查看所有用户名功能
输入3执行删除指定用户名功能
'''分析 用户输入的不同 可以执行不同的代码'''
ps: 思考如何让程序循环起来并且可以根据不同指令执行不同操作
提示: 循环结构 + 分支结构
拔高: 是否可以换成字典或者数据的嵌套使用完成更加完善的员工管理而不是简简单单的一个用户名
解答
# 1.计算1-100所有的数之和
num = 0
for i in range(1,101):
num += i
print(num) # 5050
# 2.判断列表中数字 2 出现的次数
l1 = [11,2,3,2,2,1,2,1,2,3,2,3,2,3,4,3,2,3,2,2,2,2,3,2]
l2 = []
for i in l1:
if i == 2:
l2.append(i)
print(len(l2))
# 3.编写代码自动生成所有页网址(注意总共多少页)
http = 'https://movie.douban.com/top250?start={}&filter='
for i in range(0, 250, 25):
print(http.format(i))
# 4.编写代码打印出下列图形(ps:for循环嵌套)
for _ in range(4):
for _ in range(5):
print('*', end='')
print()
# 5.基于列表充当数据库完成用户登录
data_source = ['jason|123', 'kevin|321', 'oscar|222']
data_source_dit = {i.split('|')[0]:i.split('|')[1] for i in data_source}
print('请登录')
name = input('用户名>>>')
pawd = input('密码>>>')
if name in data_source_dit.keys() and pawd == data_source_dit[name]:
print('登录成功')
else:
print('登录失败')
# 6.利用列表编写一个员工姓名管理系统
info = '''
输入1执行添加用户名功能
输入2执行查看所有用户名功能
输入3执行删除指定用户名功能
'''
dit = {}
while 1:
print(info)
num = int(input('请输入序号:').strip())
if num == 1:
print('添加用户')
name = input('用户名:').strip()
pawd = input('密码:').strip()
if name in dit.keys():
print('用户名重复')
else:
dit[name] = pawd
print('添加成功')
elif num == 2:
print('查看所有用户名')
print(' '.join(dit.keys()))
elif num == 3:
print('删除用户名')
del_name = input('需要删除的用户名:').strip()
dit.pop(del_name)
print('{} 已删除'.format(del_name))
else:
print('暂无该功能')
exit = input('是否重新选择(N/Y):').strip().upper()
if exit == 'Y':
pass
else:
print('退出系统')
break