昨日内容回顾
循环结构之for循还
for 变量名 in 迭代对象 循环体
迭代对象可以是字符串、列表、字典、元组、集合,其中列表、元组和集合用法一致
字符串是按照单个字符依次取值输出
列表是按照一个数据值依次取值输出
字典只能取到k值,它的v值不展示
range
for 变量名 in range() 循环体
第一种是range(数值一)
循环遍历的结果是从0开始到总和个数-1
第二种是range(数值一,数值二)
第一个数值指的是起始位置,第二个数值指的是终止位置,这个情况可以简述为“顾头不顾尾”
第三种是range(数值一,数值二,数值三)
在第二种的基础上多增加了一个数值,这个数值叫做间隔数,就是隔几个数取值,也可看做我们数学里学的等差数列
range的实际案例
网络爬虫:python代码模拟网络数据请求获取数据
找到网址的规律,只需要用到for循环再加上占位符简单的网络爬虫就可以实现了
for+break
break是终止循环
for+continue
continue是跳出此次循环,继续下次循环
for+else
在循环结束以后,正常输出,与for同级
今日学习内容
数据类型的内置方法简介
概念:每一种数据类型自带的功能
数据类型.方法名()
使用数据类型的内置方法统一采用句点符,因有些数据类型的内置方法太多,可以记个大致记到眼熟,在使用的时候通过自动提示找到自己的想要的功能
整型相关方法
关键字:int()
内置方法:没有,整型就是整数,主要就是用来计算的,所以没什么内置方法
类型转换:必须符合内部都是纯数字的情况,int(需要转化的内容)
print(type(int('12345678'))) # 字符串内部是纯数字情况可以转换 print(type(int('1nuuuuuh46781'))) # 字符串里面必须是纯数字才可以转换 print(type(int('67567.33'))) # 小数点也算一个字符,所以也不可以
进制的转换:
二进制 八进制 十进制 十六进制,我们日常生活中用的是十进制
十进制转换其他进制
bin() 是将十进制转二进制 0b是二进制数的标识
print(bin(100)) # 0b1100100
oct() 是将十进制转八进制 0o是八进制数的标识
print(oct(100)) # 0o144
hex() 是将十进制转十六进制 0x64 0x是十六进制数的标识
print(hex(100)) # 0x64
如果数字前面没有任何标识,默认就是十进制
其他进制转换十进制
通过各进制特有的标识,我们就可以是哪个进制转换的十进制,同样我们也可以人为的指定进制数
print(int(0b1100100)) # 100 print(int(0o144)) # 100 print(int(0x64)) # 100 print(int('0b1100100', 2)) # 100 print(int('0o144', 8)) # 100 print(int('0x64', 16)) # 100
浮点型相关方法
关键字:float()
内置方法:没有,主要用于参与数学运算
类型转换:
争对浮点型的类型转换,它比整型稍微好一点,可以识别一个小数点,但仅限识别一个
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')) # 不可以
特殊情况:主要针对的是布尔值,False就是0.0,True就是1.0
补充说明:python对数字不敏感,很容易出错,算着算着可能就会失真,但是它还是可以做许多事情,厉害的不是它本身,是它的一些模块,可以通过模块来修改它的缺点
字符串相关方法
关键字:str()
内置方法:
争对字符串的所应取值有索引取值、切片取值、间隔/方向,索引取值:单个字符 支持负数
str = 'hello world' print(str[0]) # h # 支持负数的取法 print(str[-1])
想取到哪个就可以取到哪个,
切片取值:多个字符
str = 'hello world' print(str[0:4]) # hell print(str[-1:-4]) # 取不到值 print(str[-4:-1]) # orl print(str[-1:-4:-1]) # dlr 可以通过第三个参数的正负一 控制方向
其中的数字代表着的是索引,采用的也是'顾头不顾尾'的概念,
切片的顺序是默认从左向右的,在负向切片的时候需要注意
间隔/方向
str = 'hello world' print(str[:]) # 什么都不写,默认取到所有的 print(str[::2]) # 表示间隔一个取一个 hlowrd print(str[::3]) # 表示间隔俩个取一个 hlwl
统计字符串中字符的个数
print(len(str)) # 11
需要注意的是在字符串中空格也算一个字符,在统计字符串的个数的时候也会把它算在内
移除字符串首尾指导的字符
.strip()默认移除的是首尾的空格符号,经常会用在我们登录的时候的操作name = ' zhang ' print(len(name)) # 开始name的字符串长度为 9 print(name.strip(), len(name.strip())) # 通过移除后 长度只剩 5 res = name.strip()
这里需要注意的是它不会改变原来的值,只是重新创建了一个新的数据,如果想要永久的保存这个新的值可以给这个值也绑定一个名字
.strip('\('))可以用来移除指定的值 .lstrip('\)')) 移除左边的指定的值
.rstrip('$'))移除右边的指定的值按照指定的字符切割字符串
当字符串中出现连续的特征符号,就可以考虑使用字符切割,切割字符串以后结果出现的是一个列表info = 'zhan|123|run' res = info.split('|') # 切割字符串之后结果是一个列表 print(res, type(res)) # ['zhang', '123', 'run'] <class 'list'>
.split('|', maxsplit=1)) 里面的maxsplit表示从左往右 只切一次 ['zhang', '123|run']
.rsplit('|', maxsplit=1)) 表示从右往右 只切一次 ['zhang|123', 'run']
字符串大小写相关
.lower() 将字符串里的大写全部转换为小写.upper() 将字符串里的大写全部转换为小写
注意:只是字母之间转换,数字、符号、空格等不能参与转换.islower() 判断字符串中所有的字母是否是全小写
.isupper() # 判断字符串中所有的字母是否是全大写
字符串的格式化输出
关键词:.format方式一:等价于%S占位,前把文本编辑好,需要占位的地方输入{}来展位,可以设置多个占位,然后通过 变量名.format('数据值','数据值'......)
res1 = 'my name is {} my age is {}' print(res1.format('zhangran', 18))
方式二:利用索引值,先用{}进行占位,里面输入索引,然后在使用的时候按照索引顺序输入值,,可以多次使用
res2 = 'my name is {0} my age is {1} {0} my friends always called me {2}' print(res2.format('zhangran', 18, 'zhangxiaoran'))
方式三:支持关键字取值(按k取值),也支持重复使用在{}输入k值,然后在使用的时候输入k值的数据值就可以了
res3 = '{name} {name} {age} my name is {name} my age is {age}' print(res3.format(name='jason', age=18))
方式四:使用变量名,先将数据值绑定给变量,然后在使用的时候直接在{}里输入变量名就可是使用,同样也可以重复多次使用,最推荐使用的方法
name = 'zhangran' age = 18 print(f'my name is {name} my age is {age} {name} {age}')
统计字符串中指定字符出现的次数
关键字:.count(),底层实现的操作就是使用的是for循环,它内部自己用来比较是否与你输入的一直,然后自己再给累加,得出结果
str = 'jjsokjflpkfpzfifmcuioijjjALJAGAGAGFETEYEUEJDHDGDGSBSBS' print(str.count('j')) # 6 print(str.count('GA')) # 2
判断字符串的开头或者结尾
.startswith 表示的是开头的字符
.endswith 表示的是结尾的字符
可以查找的是单个字符,也可以是多个字符,返回的结果是布尔值
res = 'jason say ha ha ha heiheihei' print(res.startswith('jason')) print(res.startswith('j')) print(res.startswith('b')) print(res.endswith('heiheihei')) print(res.endswith('hei')) print(res.endswith('h'))
字符串的替换
关键字:.replace
语法结构:变量名.replace('old_str','new_str' ,1),从左到右依次替换,可指定替换的个数
字符串的拼接
关键字:''.join([]),前面一个字符串,后面跟.join(),join()里面写一个列表、元组,进行字符串拼接,但是列表中的数据必须都是字符串类型
res1 = 'hello' res2 = 'world' print(''.join(['hello', 'world', 'hahaha'])) # join方法拼接 print('|'.join(['hello', 'world', 'hahaha'])) # join方法拼接 print('$'.join(['jason', 'say', 666])) # 列表中的数据都必须是字符串类型 报错!!!
字符串支持加号拼接
res1 = 'hello' res2 = 'world' print(res1 + res2)
字符串支持乘号重复
res1 = 'hello' res2 = 'world' print(res1 * 10)
判断字符串中是否是纯数字
关键词:.isdigit(),返回的是布尔值,判断字符串是不是纯数字,可以使用在登录的情况,可以防止网站崩溃
print('123'.isdigit()) # True print('123a'.isdigit()) # False print(''.isdigit()) # False
查找某个字符对应的索引值
res = 'jason say ha ha ha heiheihei'
.index 可以用来查找字符的索引
.find 也可以用来查找字符的索引
.index与.find都可以用来查找索引 ,但是在一定范围内查找是否存在字符,前者如果没有则报错,后者没有返回的是-1,-1表示的是没有,报错,没有办法执行
print(res.find('d',0,5)) # -1 prnt(res.index('d',0,5)) # 会报错
正文相关操作
.title(),首字母大写
.capitalize(),只有第一个字母大写
res = 'my name is zhangran' print(res.title()) # My Name Is Zhangran print(res.capitalize()) # My name is zhangran
类型转换:
任何数据类型都可以转为字符串型,他只是在最外层加了’‘,它兼容了所有的数据类型print(str(12), type(str(12))) # 12 <class 'str'> print(str(123.11), type(str(123.11))) # 123.11 <class 'str'> print(str([1, 2, 3, 4]), type(str([1, 2, 3, 4]))) # [1, 2, 3, 4] <class 'str'> print(str({'name': 'jason'}), type(str({'name': 'jason'}))) # {'name': 'jason'} <class 'str'> print(str(True), type(str(True))) # True <class 'str'> print(str((1, 2, 3, 4)), type(str((1, 2, 3, 4)))) # (1, 2, 3, 4) <class 'str'> print(str({1, 2, 3, 4}), type(str({1, 2, 3, 4}))) # {1, 2, 3, 4} <class 'str'>
列表相关方法
关键字:list()
类型转换:
整型和浮点型不能直接转为列表,list()其实就是一个for循环,能够被for循环的数据类型都能被转换为列表
内置方法:
索引取值
str = ['sjkah','jksal','ajshd','kasjhd','aslj','akJSBS'] print(str[0]) # h # 支持负数的取法 print(str[-1])
切片取值
str = ['sjkah','jksal','ajshd','kasjhd','aslj','akJSBS'] print(str[0:4]) print(str[-1:-4]) print(str[-4:-1]) print(str[-1:-4:-1])
间隔/方向
str = ['sjkah','jksal','ajshd','kasjhd','aslj','akJSBS'] print(str[:]) # 什么都不写,默认取到所有的 print(str[::2]) # 表示间隔一个取一个 print(str[::3]) # 表示间隔俩个取一个
统计列表中数据的个数
print(len(str)) # 11
课后作业
# 1.基于字符串充当数据库完成用户登录(基础练习)
# data_source = 'jason|123' # 一个用户数据
# 获取用户用户名和密码 将上述数据拆分校验用户信息是否正确
# 拆分为用户名与密码,按|拆分
data_source = 'jason|123'
res = data_source.split('|')
# print(res) # ['jason', '123']
data_name = res[0]
data_pwd = res[1]
# print(data_name,data_pwd)
# 用户登录代码
username = input('输入用户名:')
password = input('输入密码:')
"""
1.判断用用户是否输入正确,登录成功与失败
2.判断输入的数据是否为数据库的用户
3.数据库用户的提取
print(res) # ['jason', '123'] 此时字符串已经被拆分为列表
data_name = res[0]
data_pwd = res[1]
"""
if username == data_name and password == data_pwd:
print('登录成功')
else:
print('登录失败')
# 2.基于列表充当数据库完成用户登录(拔高练习) # 多个用户数据
# data_source = ['jason|123', 'kevin|321','oscar|222']
data_source2 = ['jason|123', 'kevin|321', 'oscar|222']
# 先取出每个值,然后进行分割
data1 = data_source2[0].split('|')
data2 = data_source2[1].split('|')
data3 = data_source2[2].split('|')
print(data1, data2, data3) # ['jason', '123'] ['kevin', '321'] ['oscar', '222']
# 分割后进行查找值
data_name1 = data1[0]
data_pwd1 = data1[1]
data_name2 = data2[0]
data_pwd2 = data2[1]
data_name3 = data3[0]
data_pwd3 = data3[1]
# 获取用户输入的数据
# 如果用户名输入的是jason并且密码是123,或者输入的是kevin并且密码是321,或者输入的是oscar并且密码是321,登录成功,否则失败
username = input('输入用户名:')
password = input('输入密码:')
if username == data_name1 and password == data_pwd1:
print('jason,登录成功')
elif username == data_name2 and password == data_pwd2:
print('kevin,登录成功')
elif username == data_name3 and password == data_pwd3:
print('oscar,登录成功')
else:
print('登录失败')