[18/04/28 基础数据类型2 与字符串的常用操作方法
查看数据类型 : type
a = True print(a,type(a)) True <class 'bool'> #True 的类型是bool a = 'shfg' print(a,type(a)) shfg <class 'str'> #'shfg'的类型是字符串 a = 5 print(a,type(a)) 5 <class 'int'> #5的类型是int
一.基础数据的种类
1.int : 整数类型 用于计算
2.str : 字符串类型 储存少量数据 凡是用引号引起来的都是字符串
例如:'sjdi' , '1651' , '[1,2,3]'【'[1,2,3]'这只是字符串不是列表】
3.bool : 布尔值 判断真假,只有两种情况:
True 1 真 ,False 0 假
4.list : 列表 可以放入大量的,各种类型的数据,便于操作,而且列表是有序的,有索引值,可切片便于取值。
list = ['字符串' ,数字 ,bool,[列表],{字典:dict}..]
a = input('时间') #输入时间1995/1/7 print(a) b = a.split('/') #以“/”分割 print(b,type(b)) c = b[0] #对列表切片取【0】 print(c,type(c)) d = int(c) #转化成int形式 print(d,type(d)) 时间1995/1/7 1995/1/7 ['1995', '1', '7'] <class 'list'> #以“/”分割以后 1995 <class 'str'> #切片后转换成字符串 1995 <class 'int'>
5.tuple : 元组 被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组。
例如:(1,2,3...) ("a","b","c")
6.dict : 字典 采用键值的形式存储数据。 {键:值}可以储存大量数据,关系型数据。 是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象结合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
例如: dict = {'name':'老男孩' , #name=老男孩
'name'_list(列表):['学员甲','乙',...]
'alex(人名)':{'age'(年龄):20,
’hobby'(爱好):'old_women'
} #对应的是 alex这个字典
} #对应的是dict这个字典
7. set(集合):{'西西','alex'.....}采用大括号,但里面的内容是单独的元素
二。基础数据的互换
1. int(整数)<--> str(字符串)
int ---> str str(int)
s = 6 p = str(s) print(p,type(p)) 6 <class 'str'>
str ---> int int(str) #条件:字符串必须全部由数字组成。
s = '124' p = int(s) print(p,type(p)) 124 <class 'int'> s = 'sfg' #输入的字符串必须为数字 p = int(s) print(p,type(p)) ValueError: invalid literal for int() with base 10: 'sfg' (ValueError:无效的字面意思为int(),基数为10:'sfg')
2. str(字符串)<---> bool(波尔值)
1.bool ---> str # 凡是用引号引起来的都是字符串 例:'True' 'False'
2.str ---> bool 非空即为True, 空字符串即为假。 #一定要区分开
“ ” 与 “” 的区别 :“ ”虽然没有文字,但里面有空格,计算机就会认为它不是空字符。而 “” 里面什么也没有,连空格也没有,所以计算机认为它是一个空字符。
s = ' ' p = bool(s) print(p,type(p)) True <class 'bool'> s = '' p = bool(s) print(p,type(p)) False <class 'bool'>
三、字符串的常用操作方法
1.字符串的索引
索引即下标,就是字符串组成的元素从第一个开始,初始索引为0以此类推, 截取字符串的一个元素,形成新的字符串
a = 'fiibkdjnbviniuhuhiuw' #第一个元素“f”为0,依此类推第九个是V print(a[9]) v
a = 'ioujhjkenji' print(a['o']) #输入元素”o“,来找下标 print(a['o']) #报错
TypeError: string indices must be integers
2.字符串的切片
切片就是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串(原则是顾头不顾腚,且与原来的字符串没有任何关系) 步长的正反决定切片的方向
a = 'fiibkdjnbviniuhuhiuw' b = a[0:9] #第九个元素是V,因为顾头不顾腚的原则,所以V没有打上去。因为步长没有写, 所以就默认从左往右数无间隔打了九个字母, print(b) fiibkdjnb a = 'fiibkdjnbviniuhuhiuw' b = a[0:9:2] #从左往右无间隔打印默认步长为1,步长为2时,就隔一个打印 print(b) fikjb print(a[0:]) #切片的尾索引没有写就默认打印到最后 fiibkdjnbviniuhuhiuw #新打印出来的切片与原字符串没有任何关系 print(a[0:-1]) #尾切片是-1时 就代表字符串中的最后一个元素W fiibkdjnbviniuhuhiu #顾头不顾腚原则,最后一位元素W没有打印上 print(a[-1:0:-1]) #反向加步长,-1代表最后一位W,0代表第一位F,该命令输入后会让字符串从后向前打一遍 wuihuhuinivbnjdkbii #顾头不顾腚原则,对于命令print(a[-1:0:-1])来说,最后一位元素是F,所以没有打印上
3.首字母大写,其余字母小写
capitalize **(重要程度)
a = 'fiibkdjnbviniuhuhiuw' s = a.capitalize() print(s) Fiibkdjnbviniuhuhiuw #只有首字母大写,其余字母小写
4.居中 center(长度,'默认为空白') *(重要程度)
a = 'fiibkdjnbviniuhuhiuw' s = a.center(50,'*') print(s) ***************fiibkdjnbviniuhuhiuw***************
5.全大写:upper 全小写:lower ***(非常重要)
代表应用条件:验证码(可以不用区分大小写)
a = 'fiibkdjnbviniUHUHiuw' s = a.upper() print(s) x = s.lower() print(x) FIIBKDJNBVINIUHUHIUW fiibkdjnbviniuhuhiuw
用户登录界面后可能需要输入验证码,但为了方便用户,一般都会出现“不区分大小写”这是怎样做到的呢
code = 'xuem'.upper() #验证码发给你了,验证码为xuem。后面的”upper()“表示将字符串的字母全改为大写 a = input('请输入验证码,不区分大小写:').upper() #将输入的验证码全改为大写 if a == code: print('验证成功')
6.判断以什么内容开头: starts with
判断以什么内容结尾: ends with
***(非常重要)
a = 'aifnfnadnkjsni' print(a.startswith('a')) #当判断以a开头的时候 整体与个体的概念 "ai"对于a来说是整体,但对于整个字符串来说"ai"是一个小个体 True #这是真的 a = 'aifnfnadnkjsni' print(a.startswith('n')) #当判断以n开头的时候 False #这是假的 #ends with 以什么内容结尾也一样
还有一种用法:检测一段字符串是否存在被检测字符串内 可以切片,切片用逗号隔开
a = 'aifnfnadnkjsni' #被检测字符串 b = a.startswith('ifn',1,4) #检测字符串”ifn“ (1,4)是字符串的切片 检测1到4(ifnf)是不是以"ifn"开头 print(b,type(b))
True <class 'bool'> #这是真的
7.大小写翻转 swapcase *(重要程度)
a = 'aifnfNADnkjsni' s = a.swapcase() print(s) AIFNFnadNKJSNI
8.使每个字符串内的单词 的首字母大写 title *(重要程度)
a = 'ai fnfs#frn$kjs+ni' #字符串内有各种符号隔开的单词 s = a.title() print(s) Ai Fnfs*Frn$Kjs+Ni #每个隔开的单词首字母全部大写
9.通过元素找索引 index find 两种都可以 ***(非常重要)
# index:通过元素找索引,可切片,找不到,报错
# find:通过元素找索引,可切片,找不到,返回-1 【仅限于字符串】
a = 'fiibkdjnbviniUHUHiuw' #被检索字符串 print(a.find('a')) #检查元素”a“ print(a.find('b',4)) #检索元素”b“ (”b“,4)中4是从第四位开始检索元素”b" print(a.index('b',4)) #print(a.index('a')) #无法搜查到就会报错 -1 #find 无法检索到元素”a“ 返回”-1“ 8 #find 从第四位开始检索的”b“的位置 8
10.去除前后端的空格,换行符(\n),制表符(\t 即”Tab“键)
# strip ***(非常重要)【还可以去除你想去除的元素#只限两端,当遇到不是清除的内容时,就会停下】
a = ' fiibkdjnbviniUHUHiuw' print(a) print(a.strip()) fiibkdjnbviniUHUHiuw fiibkdjnbviniUHUHiuw
a = '\tfiibkdjnbviniUHUHiuw\n' print(a) print(a.strip()) fiibkdjnbviniUHUHiuw #前面空格是因为”\t“(相当于Tab键),后面换行是因为”\n“(换行符) fiibkdjnbviniUHUHiuw
在用户名输入姓名,密码等东西时,如果多打了个空格,就会登不进去或者报错
a = input('请输入用户名') if a == '小粉嫩': print('登录成功') else: print('登录失败') 请输入用户名 小粉嫩 #在”小粉嫩“前面加” “ 登录失败 #系统识别失败
加上".strip()"就可以解决这样的问题
a = input('请输入用户名').strip() if a == '小粉嫩'.strip(): print('登录成功') else: print('登录失败') 请输入用户名 小粉嫩 登录成功
去除元素【只能去除两端,无法去除中间部分】
s1 = s.strip('abc') #在两端去除元素“a”“b”“c”
s = 'ablexsba'
print(s1)
lexs
s = 'ableabcxsba'
s1 = s.strip('abc') #在两端去除元素“a”“b”“c”
print(s1)
leabcxs #消除了两边却没有消除中间部分
还可以单独的消除前面或后面的空白字符:
# lstrip:消除前面的空白字符
# rstrip:消除后面的空白字符
11.以什么分割,最终形成一个列表,此列表中不含有分割元素。
split str(字符串)---> list(列表) ***(非常重要)
a = 'fiib kdjn bvin iUH UHi uw' #默认以空格分割 print(a.split()) ['fiib', 'kdjn', 'bvin', 'iUH', 'UHi', 'uw']
a = ' ,fiib,kdjn,bvin,iUH,UHi,uw' print(a.split(',')) #以”,“为分割元素 [' ', 'fiib', 'kdjn', 'bvin', 'iUH', 'UHi', 'uw'] #第一个”,“前是” “,所以分割后” “就是一个列表
.split(分割元素,分割次数)
a = ' ,fiib,kdjn,bvin,iUH,UHi,uw' print(a.split(',',2)) [' ', 'fiib', 'kdjn,bvin,iUH,UHi,uw'] #分割两次形成三个列表
12.在某些特定的情况下(都是字符串)
join list(列表) ---> str(字符串)
***(非常重要)
s = ['alex'] #这里只有一个字符串 print(s,type(s)) s11 = '+'.join(s) #' '里面填什么都可以 print(s11,type(s11)) ['alex'] <class 'list'> alex <class 'str'> #因为只有一个列表所以” “无影响
s = ['5+2','4'] #有两个字符串
s11 = '*'.join(s)
print(s11)
5+2*4 <class 'str'> #两个字符串得出一个新的字符串
13. 替换 .replace (被替换词,替换词,替换次数)
name = '小粉嫩,小粉嫩ijifenf小粉嫩' print(name.replace('小粉嫩','大铁锤',2)) #替换次数不加默认为全部替换 大铁锤,大铁锤ijifenf小粉嫩
替换敏感词汇:
s = '我是坂田征四郎,我热爱学习' s = s.replace('坂田征四郎','*') #敏感词:坂田征四郎 print(s) 我是*,我热爱学习 #成功替换 s = '我是李洋,我热爱学习' s = s.replace('坂田征四郎','*') #敏感词:坂田征四郎, 字符串内并没有敏感词 print(s) 我是李洋,我热爱学习 #没有替换,也没有报警,直接打印
14.公共方法:不单单针对字符串,也可以针对数字。。。
计算字符串的长度即总个数 len(测量的字符串)
计算某些元素出现的个数,可切片 .count(搜索元素)
name= 'jdivsdjkidsnjeifsa' print(len(name)) c0 = name.count('i') print(c0) c1 = name.count('z') print(c1) 18 3 0 #字符串中没有元素“z”所以为零
切片搜索 .count('搜索元素',起始位,终止位)
name= 'jdivsdjkidsnjeifsa' c0 = name.count('i',-5,-1) #在-5到-1的切片中找i的存在 print(c0) 1 #原字符串一共有3个但在-5到-1之间就1个
15.
# 判断字符串只由字母组成 .isalpha() 得bool 真假(True,False)
# 判断字符串是由字母或数字组成组成的 .isalnum() 得bool 真假(True,False)
# 判断字符串只由数字组成 .isdigit() 得bool 真假(True,False)
msg = 'kfdhhieunjndk' print(msg.isalpha()) #判断是由字母组成 msg = 'kfdhhieunjndk123' print(msg.isalnum()) #判断是由数字或字母组成 shuzi = '1686456128' print(shuzi.isdigit()) #判断是由数字组成 True True True
16.format 格式化输出
三种方式:
1.
msg = '我叫{},今年{},爱好{}'.format('太白金星','1500','炼丹') print(msg) 我叫太白金星,今年1500,爱好炼丹
2. 最简单
msg = '我叫{0},今年{1},爱好{2},不过已经有{1}年没有{2}'.format('太白金星','1500','炼丹') print(msg) 我叫太白金星,今年1500,爱好炼丹,不过已经有1500年没有炼丹
3.
msg = '我叫{a},今年{b},爱好{c}'.format(a='太白金星',b='1500',c='炼丹') print(msg) 我叫太白金星,今年1500,爱好炼丹
17.for 循环 (有限循环)
基本结构:
for 变量 in 可迭代对象
pass(# 这里可以添加任何命令)
msg = 'kfdhhieunjndk' for i in msg: print(i) print(i+'sb') k ksb f fsb d dsb h hsb h hsb i isb e esb u usb n nsb j jsb n nsb d dsb k ksb