Str字符串
含义:
‘’’
字符串是容器型数据类型:将’’ 、""、""""""、’’’’’‘作为容器的标志,里面的每个符号就是字符串的元素.单个单引号或者单个双引号的字符串不能换行
不可变:不能增删改,只能产生新的字符串。
有序;有下标
元素:字符串的元素就是引号中的每一个基本符号,元素又叫字符,字符又分为普通字符和转移字符两种
‘’’
2.转义字符
‘’’
转义字符就是再特定的符号前加\让符号具备特殊的功能或者意义
\n - 换行,相当于Enther
\t - 水平制表符,相当于按tab
’ - 表示一个单引号
" - 表示一个双引号
\ - 表示一个反斜杠\
注意:转移字符的长度是1
‘’’
3.特殊的转义字符 - 编码字符
\u四位的十六进制数 - 表示4位的16进制数编码值对应的字符
message = ‘abc\u4e10—’
print(message) # abc丐—
4.字符编码
‘’’
1)字符编码
计算机再存储数据的时候只能存数字(存数字的二进制补码),文本符号是不能直接保存在内存中的。为了能够让计算机存储文本符号,
就给每个符号对应一个固定的数字,在保存符号的时候就去保存这个符号对应的数字,每个符号对应的数字就是这个符号的编码值。
2)编码表 - 记录每个符号对应的编码值的表
a:ASCll码表:
数字字符在字母前面,编码值从字符0- 字符9一次增加;
所有大写字母在小写字母前面:
大写字母和小写字母之间有间歇;
b:unicode编码表:
unicode编码表是ASCll码表的扩展,包含了ASCll码表码表中所有的符号
中文范围4E00-9FA5(16进制)
包含了所有国家所有民族的所有语言的符号(万国码)
‘’’
1.查 - 获取字符
字符串获取字符的方法和列表获取元素的方法一样
str1 = ‘home’
print(str1[1]) # 0
2.相关操作
1)+、*
2)== 、!=(两个字符串之间必须顺序元素一样才相等)
<、 >、 >=、 <=
两个字符串比较大小,比较第一对不相等字符的编码值大小,小写字母在大写字母后面。
‘’’
判断字符是否是小写字母:‘a’ <= char <= ‘z’
判断字符是否是大写字母:‘A’ <= char <= ‘Z’
判断字符是否是字母:‘a’ <= char <= ‘z’ or ‘A’ <= char <= ‘Z’
判断是否是数学字符:‘0’ <= char <= ‘9’
判断是否是中文字符:’\u4e00’ <= char <=’\u9fa5’
‘’’
str1 = ‘abc’
str2 = ‘XYZMN’
print(str1 > str2) # True
练习:统计字符串中数字字符的个数
str0 = ‘jsj28海事局389sjj–3sskk9jj’
count = 0
for x in str0:
if ‘0’ <= x <= ‘9’:
count+=1
print(count)
练习:提取字符中所有的中文字符
str2 = ‘aj好23l-数据–2啊’
new_str = ‘’ # 创建一个空字符串,把满足条件的加进去。利于保存起来
for x in str2:
if ‘\u4e00’ <= x <=’\u9fa5’:
new_str += x
print(new_str)
3)in 和 not in
字符 in 字符串 - 判断字符串中是否存在指定的字符
字符串1 in 字符串2 - 判断字符串2中是否存在字符串1(判断字符串1是否是字符串2的字串)
print(‘a’ in ‘abc’) # True
print(‘ab’ in ‘abc’) # True
print(‘ac’ in ‘abc’) # False 位置必须一样
4)
a.max、 min 、sorted
b.str
str(数据) - 将指定数据转换成字符串(所有类型的数据都可以转换成字符串,除此之外所有类型都能转的就是布尔值)
转换的时候直接在数据的打印值外面加引号
str(100) # 100
str([100, 200]) #’[100, 200]’
c.len - 获取字符串中字符的个数
3.r语法 - 让字符串中所有转义字符消失
字符串的最前面加R/r,能够让字符串中所有转移字符的功能小时,字符串中的每个符号都是普通字符
str = r’abc\n123’
1.字符串1.count(字符串2) - 返回字符串1中字符串2出现的次数
str1 = ‘how are you? i am fine,thank you’
print(str1.count(‘h’)) # 2
print(str1.count('you ')) # 2
2.字符串.join(序列) - 将序列中的元素用指定的字符串拼接产生一个新的字符串。(序列中的元素必须是字符串)
result = ‘+’.join(‘abc’)
print(result) # a+b+c
result = ‘And’.join(‘hello’) # hAndeAndlAndlAndo
print(result)
练习:将字符串无缝拼接在一个
num = [10, 20, 30 , 25, 6]
方法1:
result = ‘’
for x in num:
result += str(x)
print(result)
方法二:
result = ‘’.join([str(x)for x in num])
print(result)
3.字符串1.split(字符串2) - 将字符串1中所有字符串2作为切割点对字符串1进行切割,返回的是列表
str = ‘abc+123+xyz+mn’
result = str.split(’+’) # [abc, 123, xyz, mn]
str1 = ‘+abc+123+xyz++mn’ # 当切割点出现在边界,或者重复。会出现一个空串
result = str1.split(’+’)
print(result) # [’’, ‘abc’, ‘123’, ‘xyz’, ‘’, ‘mn’]
字符串1.split(字符串,N) - 将字符串1中前N个作为切割点
4.字符串1.replace(字符串2,字符串3) - 将字符串1中所有的字符串2全部替换成字符串3
str3 = ‘abc+123+xyz+mn’
result = str3.replace(’+’, ‘-’,1) # 将字符串中的+换成+ 后面控制次数
print(result)
进制数
计算机对于数学的使用主要4中进制:二进制、八进制、十进制和十六进制
1.十进制
‘’’
基数:0 ~ 9
进位:逢10进1
位权:10的次方数(从0开始) 123 ->310**0+2101+110**2
python表示:直接写
‘’’
2.二进制
‘’’
基数:0 ~ 1
进位:逢2进1
位权:2的次方数 100 - > 02**0+021+1*22 ==4
python表示:加前缀0b/0B
‘’’
3.八进制数
‘’’
基数:0 ~ 7
进位:逢8进1
位权:8的次方数
python表示:加前缀0o/0O
‘’’
4.16进制数
‘’’
基数:0 ~ 9,a~f
进位:逢16进1
位权:16的次方数
python表示:加前缀0x/0X
hex(97) # 查看进制数
‘’’
1)编码字符:\u4位的16进制编码值
2)编码相关的函数
a.chr(编码值) - 获取编码指定的字符
print(chr())
for x in range(0x4e00, 0x9fa5+1):
print(chr(x),end=’ ')
if x % 30 == 0:
print()
b.ord(字符) - 获取字符编码值 (字符用长度是1的字符串表示)
print(ord(‘佩’)) # 20329
print(hex(ord(‘佩’))) # 0x4f69
p = ‘z’
code = ord§ - 32
print(chr(code)) # 小写z换大写Z
作业
-
输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
例如: 输入**'abcd1234 ’ ** 输出**‘bd24’**
str ='abcd1234' print(str[1::2])
-
输入用户名,判断用户名是否合法(用户名长度6~10位)
name = str(input('请输入用户名:')) if 6 < len(name) <= 10: print('合法') else: print('不合法')
-
输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法
name = str(input('请输入用户名:')) for x in name: if 'a' <= x <= 'z' or 'A' <= x <= 'Z' or '0' <= x <= '9' : pass else: print('不合法') break else: print('合法')
-
输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
例如: ‘abc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法
name = str(input('请输入用户名:')) for x in name: if ('a' <= x <= 'z' or 'A' <= x <= 'Z'or '0' <= x <= '9' ) and 'A' <= name[0] <= 'Z': pass else: print('不合法') break else: print('合法')
-
输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
例如:输入**‘abc1shj23kls99+2kkk’** 输出:'123992’
str = 'abc1shj23kls99+2kkk' new_str = '' for x in str: if '0' <= x <= '9': new_str += x print(new_str)
-
输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
例如: 输入**‘a2h2klm12+’ ** 输出 'A2H2KLM12+'
1. str = 'a2h2klm12+' print(str.upper() ) 2.
-
输入一个小于1000的数字,产生对应的学号
例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**
Student = input('请输入1000以内学号:') l = len(Student) if l == 1: print('py190100'+Student) elif l == 2: print('py19010'+Student) elif l == 3: print('py1901'+Student) else: print('不符合规定,请重新输入:')
-
输入一个字符串,统计字符串中非数字字母的字符的个数
例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**’===’** 输出:3
str1 = str(input('请随意输入:')) count = 0 for x in str1: if 'a' <= x <= 'z' or 'A' <= x <= 'Z' or '0' <= x <= '9': pass else: count += 1 print(count)
-
输入字符串,将字符串的开头和结尾变成’+’,产生一个新的字符串
例如: 输入字符串**‘abc123’, 输出’+bc12+’**
str1 = str(input('请输入:')) print('+'+str1[1:-1]+'+')
-
输入字符串,获取字符串的中间字符
例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**
str = input('请输入字符串:')
l = len(str)
if l % 2:
print(str[l//2])
else:
print(str[l//2-1:l//2+1])
- 写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)
例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8
- 获取两个字符串中公共的字符
例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3
str = input('请输入字符串:')
str1 = input('请输入字符串:')
l = set(str)
h = set(str1)
print('公告字符有:', l & h)