今日总结
一、str
1. 什么是字符串
字符是容器型数据类型;将’’、""、""""""、’’’’’’ 作为容器的标志,里面的每个符号都是字符串的元素
不可变;有序
元素:字符串的元素就是引导中的每个基本符号。元素又叫字符,字符又分普通字符和转义字符两种。
注意:""""""、’’’’’’ 作为标志才能换行
str1 = 'jl;,海事局s8*KM2323'
str2 = "jh函数23#hjj"
str3 = """ads123
sadfancs
你好
"""
str4 = '''
adafvff
还哈哈
'''
print(type(str3), type(str4)) # <class 'str'> <class 'str'>
2. 转义字符
转义字符就是在特定的字符前加\,让符号具备特殊功能或者意义
\n - 换行
\t - 水平制表符,相当于tab键
\’ - 表示一个单引号
\" - 表示一个双引号
\ \ - 表示一个反斜杠
注意:转义字符的长度是1
print('hj8;\n123')
poem = '\t床前明月光,\n\t疑似地上光。\n\t举头望明月,\n\t低头思故乡。'
print(poem)
# message = 'it's me !' # 报错!
# 方案一
message1 = "it's me !"
# 方案二
message1 = 'it\'s me!' # it's me!
print(message1)
# message2 = "I say:"how are you?"" # 报错!
# 方案一
message2 = 'I say:"how are you?'
# 方案二
message2 = "I say:\"how are you?\"" # I say:"how are you?"
print(message2)
message3 = 'abc\\n123'
print(message3) # abc\n123
file = 'C:\\name\study\\a.txt'
print(file)
3. 转义字符 - 编码字符
\u四位的十六进制数 - 表示四位的十六进制数编码值对应的字符
message = 'abc\u4f78===' print(message) # abc佸===dict(数据)将数据转换成字典
4. 字符编码
- 字符编码
计算机在存储数据的时候只能存数字(存数字的二进制补码),文本符号是不能直接报错在内存中,
为了能让计算机储存文本符号,就给每个符号对应一个固定的数字,在保存符号的时候就去保存这
个符号对应的数字。每个符号对应的数字就是这个符号的编码值。
- 编码表
记录每个符号对应的编码值的表
a. ASCII码表:
数字字符在字母的前面,编码值从字符0到字符9依次增加
所有大写字符在所有的小写字母前面;(大写字母从65开始,小写字母从97开始)
大写字符和小写字母之前游间隙
b. Unicode编码表:
Unicode是ASCII码表的扩展,包含了ASCII所有的符号
包含了所有国家所有民族的所有语言的符号(万国码)
中文范围:4e00 ~ 9fa5
1) 编码字符:\u4位的16进制编码值
print('a\u0061') # a a
c = '陶'
print('\u4e00' <= c <= '\u9fa5') # True
2) 编码相关的函数
a. chr(编码值) - 获取指定编码对应的字符
print(chr(97)) # a print(chr(0x4e00)) # 一 print(chr(0x4e01)) # 丁 for x in range(0x4e00, 0x9fa5+1): print(chr(x), end=' ') if x % 30 == 0: print()
b. ord(字符) - 获取字符编码值(字符用长度是1的字符串表示)
print(hex(ord('陶'))) # 0x9676 print(hex(ord('皞'))) # 0x769e #写一个程序将输入的小写字母字符转换成对应的大写字母 p = 'z' code = ord(p) - 32 print(chr(code)) # Z
二、相关操作
1. 查
获取字符
字符串获取字符的方法和列表获取元素的方法一样str1 = 'python' print(str1[1]) # 'y' print(str1[-1]) # 'n' # print(str1[9]) # 报错!IndexError: string index out of range str2 = 'abc\n123' print(str2[4]) # '1' print(str1[2:]) # 'thon' print(str1[1:-1:2]) # 'yh' print(str1[::-1]) # 'nohtyp for x in str1: print('x', x) for index in range(len(str1)): print(index, str1[index])
2.相关操作
1) +、*
str2 = 'abc'
str3 = 'xyz'
str4 = str3 + str2
print(str4) # 'xyzabc'
str5 = str2 + '=' + str3
print(str5) # 'abc=xyz'
print(str2*3) # 'abcabcabc'
2) ==、!=
print('abc' == 'abc') # True
print('abc' == 'bac') # False
3)>、<、>=、<=
两个字符串比较大小比较的是第一对不相等的字符的编码值的大小
判断字符是否是小写字母:'a' <= char <= 'z' 判断字符是否是大写字母:'A' <= char <= 'Z' 判断字符是否是字母:'a' <= char <= 'z' or 'A' <= char <= 'Z' 判断字符是否是数字:'0' <= char <= '9' 判断是否是中文字符:'\u4e00' <= char <= '\u9fa5'
str6 = 'abc'
str7 = 'XYZMN'
print(str6 > str7) # True
# 练习:统计字符串中数字字符的个数
str0 = 'jsj28海事局389sjj--3sskk9jj'
count = 0
for x in str0:
if '0' <= x <= '9':
count += 1
print(count)
# 练习:提取字符中所有的中文字符
# 'aj好23l-数据--2啊' -> '好数据啊'
s5 = 'aj好23l-数据--2啊'
newS5 = ''
for x in s5:
if '\u4e00' <= x <= '\u9fa5':
# print(x, end='')
newS5 += x
print(newS5) # 好数据啊
4) 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 必须是连续的才是子串
5) max、min、sorted、str、len
- max、min、sorted
- str
str(数据) - 将指定数据转换成字符串(所有类型的数据都可以转换成字符串;转换的时候直接在数据的打印值外加引号)
str(100) # '100' str([100, 200]) # '[100, 200]' str({'a': 10, 'b': 20}) # "{'a': 10, 'b': 20}"
- len
print(len('\tabc\n123')) # 8 print(len('\\tabc\n123')) # 9
3.r语法
字符串的最前面可以加r/R,能够让字符串中所有的转义字符功能消失。让字符串中每个字符转成普通字符
str1 = r'\tabc\n12\\3\'' print(str1) # '\tabc\n12\\3\''
三、内建函数
1. 字符串1.count(字符串2)
返回字符串1中字符串2出现的次数
str1 = 'how are you?i am fine, thank yuo!' print(str1.count('h')) print(str1.count(' ')) print(str1.count('you'))
2. 字符串.join(序列)
将序列中的元素用指定的字符串拼接产生一个新的字符串。(序列中的元素必须是字符串)
result = '+'.join('abc') print(result) # 'a+b+c' result = 'And'.join('hello') print(result) # 'hAndeAndlAndlAndo' result = '+'.join(['name', 'age', 'gender']) print(result) # 'name+age+gender' result = ''.join(['name', 'age', 'gender']) print(result) # 'nameagegender' result = '*'.join({'a': 10, 'b': 20, 'c': 30}) print(result) # a*b*c # 练习: # nums = [10, 20, 30, 25, 6] -> '102030256' nums = [10, 20, 30, 25, 6] # 方法一 newNum = '' for x in nums: newNum += str(x) print(newNum) # 102030256 # 方法二 newNum = ''.join([str(x)for x in nums]) print(newNum) # 102030256
3. 字符串1.split(字符串2)
将字符串1中所有字符串2作为切割点对字符串1进行切割,返回的是列表
字符串1.split(字符串2, N)
将字符串1中前N个字符串2作为切割点对字符串1进行切割,返回的是列表
str1 = 'abc+123+xyz+mn'
result = str1.split('+')
print(result) # ['abc', '123', 'xyz', 'mn']
str2 = 'sdsiwd234第三方234大怒439'
result = str2.split('234')
print(result) # ['sdsiwd', '第三方', '大怒439']
# 如果切割点在边界或连续重复,切割完成后会产生空串
str3 = '+abc+123++xyz+mn+'
result = str3.split('+')
print(result) # ['', 'abc', '123', '', 'xyz', 'mn', '']
str1 = 'abc+123+xyz+mn'
result = str1.split('+', 1)
print(result) # ['abc', '123+xyz+mn']
4. 字符串1.replace(字符串2,字符串3)
将字符串1所有的字符串2全部替换成字符串3
str1 = 'abc+123+xyz+mn' result = str1.replace('+', '-') print(result) # 'abc-123-xyz-mn'
字符串1.replace(字符串2,字符串3,N)
将字符串1前N个字符串2全部替换成字符串3
str1 = 'abc+123+xyz+mn' result = str1.replace('+', '-', 2) print(result) # 'abc-123-xyz+mn'
5. 字符串.upper()
将字符串中所有的小写字母转成大写
str3 = 'a2h2klm12+' print(str3.upper()) # 'A2H2KLM12+'
6. 字符串.zfill(N)
将原字符串转换成长度是N的新字符串,不够在原字符串前加’0’
print('abc'.zfill(5)) # 00abc
四、进制system
计算机对数字的使用主要有四种进制:二进制、八进制、十进制、和十六进制
1. 十进制
基数:0 ~ 9
进位:逢10进1
位权:10的次方数(从0开始) 123 -> 3*10**0 + 2*10**1 + 3*10**2
python表示:直接写
2. 二进制
基数:0 ~ 1
进位:逢2进1
位权:2的次方数(从0开始) 100 -> 0*2**0 + 0*2**1 + 1*2**2 == 4
1011 -> 2**0 + 2**1 + 2**3 == 11
python表示:加前缀 0b / 0B
print(0b1011) # 11
3. 八进制
基数:0 ~ 7
进位:逢8进1
位权:8的次方数(从0开始) 23 -> 3**8**0 + 2**8**1 == 19
python表示:加前缀 0o / 0O
print(0o23) # 19
4. 16进制
基数:0 ~ 9, a ~ f(A~F)
进位:逢16进1
位权:16的次方数(从0开始) af -> 15*16**0 + 10*16**1 == 175
python表示:加前缀 0x / 0X
hex(数字) - python中查看数字中对应的16进制编码值
print(0xaf) # 175
# 如果需要转换进制,可使用数字除进制,直到除尽
作业
-
输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
例如: 输入**'abcd1234 ’ ** 输出**‘bd24’**str1 = 'abcd1234' print(str1[1::2])
-
输入用户名,判断用户名是否合法(用户名长度6~10位)
legalName = input('请输入用户名:') if 6 <= len(legalName) <= 10: print('合法') else: print('不合法')
-
输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法legalName = input('请输入用户名:') for x in legalName: if not ('a' <=x<= 'z' or 'A' <=x<= 'Z' or '0' <=x<= '9'): print('不合法') break else: print('合法')
-
输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
例如: ‘abc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法legalName = input('请输入用户名:') if 'A' <= legalName[0] <= 'Z': count = 0 for x in legalName[1:]: if 'a' <= x <= 'z' or 'A' <= x <= 'Z': if '0' <= x <= '9': count += 1 else: print('不合法') break else: if count == 0: print('不合法') else: print('合法') else: print('不合法')
-
输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
例如:输入**‘abc1shj23kls99+2kkk’** 输出:'123992’# 方法一 str1 = input('请输入字符串:') str2 = '' for x in str1: if '0' <= x <= '9': str2 += x print(str2) # 方法二 str1 = input('请输入字符串:') str2 = ''.join([x for x in str1 if '0' <= x <= '9']) print(str2)
-
输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
例如: 输入**‘a2h2klm12+’ ** 输出 'A2H2KLM12+'
# upper方法: str3 = input('请输入字符串:') print(str3.upper()) # 算法方法一: str3 = input('请输入字符串:') str4 = [chr(ord(x) - 32) if 'a' <= x <= 'z' else x for x in str3] print(''.join(str4)) # 算法方法二: str3 = input('请输入字符串:') str4 = '' for x in str3: if 'a' <= x <= 'z': str4 += chr(ord(x) - 32) else: str4 += x print(str4)
-
输入一个小于1000的数字,产生对应的学号
例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**# 3 -> 003 # 23 -> 023 # 345 -> 345 # 方法一 num = input('请输入数字(0~999):') newNum = 'py1901' + '0'*(3-len(num)) + num print(newNum) # 方法二 # 字符串.zfill(N) - 将原字符串转换成长度是N的新字符串,不够在原字符串前加'0' # print('abc'.zfill(5)) # 00abc newNum = 'py1901' + 'num'.zfill(3) print(newNum)
-
输入一个字符串,统计字符串中非数字字母的字符的个数
例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**’===’** 输出:3str1 = input('请输入字符串:') count = 0 for x in str1: if not ('a'<= x <= 'z' or 'A' <= x <= 'Z' or '0' <= x <= '9'): count += 1 print(count)
-
输入字符串,将字符串的开头和结尾变成’+’,产生一个新的字符串 例如: 输入字符串**‘abc123’, 输出’+bc12+’**
str1 = input('请输入字符串:') str2 = '+' + str1[1:-1] + '+' print(str2)
-
输入字符串,获取字符串的中间字符
例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**
str1 = input('请输入字符串:')
l = len(str1)
if len(str1) % 2:
print(str1[l//2])
else:
print(str1[(l//2-1):(l//2+1)])
- 写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)
例如: 字符串1为:how are you? I’m fine, Thank you! , 字符串2为:you, 打印8
# 方法一
str1 = 'how are you? Im fine, Thank you!'
str2 = 'you'
print(str1.find(str2))
# 方法二
str1 = 'how are you? Im fine, Thank you!'
str2 = 'you'
len1 =len(str2)
for index in range(len(str1) - len1 +1):
if str1[index:index + len1] == str2:
print(index)
break
else:
print('没有该子串:', -1)
- 获取两个字符串中公共的字符
例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3
str1 = 'abc123'
str2 = 'huak3'
# 方法一:
str3 = ''.join(set(str1) & set(str2))
print(str3)
# 方法二
str3 = ''
for x in str1:
if x in str2 and x not in str3:
str3 += x
print(str3)