字符串
-
计算机常见的进制
-
十进制
""" 基数:0 ~ 9 进位:逢10进1 位权:10的次方数(从0开始) 123 -> 3*10**0 + 2*10**1 + 1*10**2 == 123 Python表示:直接写 """ print(10) print(123)
-
二进制
""" 基数:0 ~ 1 进位:逢2进1 位权:2的次方数 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 # print(0b1211101) # 报错
-
八进制
""" 基数:0 ~ 7 进位:逢8进1 位权:8的次方数 23 -> 3*8**0 + 2*8**1 == 19 Python表示:加前缀0o / 0O """ print(0o23)
-
十六进制
""" 基数:0~9,a~f(A~F) 进位:逢16进1 位权:16的次方数 Python表示:0x/0X af -> 15*16**0 + 10*16**1 == 175 hex(数字) ---- 可以获取数字的十六进制数 """ print(0xaf) # 175 print(0b1100100) # 100 print(0o144) # 100 print(0x64) # 100 print(hex(97)) #0x61
-
-
什么是字符串(
str
)""" 字符是容器型数据类型;将''、""、""""""、''''''作为容器的标志,里面的每个符号就是字符串的元素 不可变;有序 元素:字符串的元素就是引号中的每一个基本符号。元素又叫字符,字符又分为普通字符和转义字符两种。 """ str1 = 'jl;,海事局s8*KM2323👌' str2 = "jh函数23#hjj" str3 = """abc123 qwasjdf 阿斯顿发 """ str4 = ''' dkhak askdhf 双方都 ''' #以上都是字符串的表达形式
-
转义符 - - - 转义字符就是在特定的符号前加\让符号具备特殊的功能或者意义。
注意:转义字符的长度是1
-
\n
和\t
''' \n - 换行,相当于return键 \t - 水平制表符,相当于tab键 ''' #应用场景举例 poem = '\t床前明月光,\n\t疑是地上霜。\n\t举头望明月,\n\t低头思故乡。' ''' 床前明月光, 疑是地上霜。 举头望明月, 低头思故乡。 '''
-
\'
和``"`''' \' - 表示一个单引号 \" - 表示一个双引号 ''' #应用场景 # message = 'it's me!' # SyntaxError: invalid syntax # message = "it's me!" # 方案一 message = 'it\'s me!' # 方案二 print(message) # message = "I say:"how are you?"" # SyntaxError: invalid syntax # message = 'I say:"how are you?"' message = "I say:\"how are you?\"" print(message)
-
``\`
''' \\ - 表示一个反斜杠 ''' #应用场景 file = 'C:\\name\\study\\aa.txt' print(file) #C:\name\study\aa.txt
-
-
转义字符-编码字符(
\u四位的十六进制数
)#\u四位的十六进制数 - 表示四位的十六进制数编码值对应的字符 message = 'abc\u4f78=\\u==' print(message) # abc佸===
-
字符编码
-
编码字符:\u4位的16进制编码值
print('a\u0061') c = '类' print('\u4e00' <= c <= '\u9fa5') print('\u28ef\u283f')
-
编码相关的函数
-
chr(编码值)
- - - 十进制和十六进制都行 获取指定编码对应的字符, 返回的类型是 字符串print('a\u0061') c = '类' print('\u4e00' <= c <= '\u9fa5') print('\u28ef\u283f')
-
ord(字符)
- - - 获取字符编码值,(字符用长度是1的字符串表示)print(hex(ord('余'))) # 20313 0x4f59 print(hex(ord('婷'))) # 23159 0x5a77
-
hex(数字)
- - - 转换成十六进制p = 'm' code = ord(p) - 32 print(chr(code))
-
-
-
字符串的查 - - - 获取字符
字符串获取字符的方法和列表获取元素的方法一样
str1 = 'python' print(str1[1]) # 'y' print(str1[-1]) # 'n' # print(str1[7]) # 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])
-
字符串的相关操作
-
字符串的
+
,*
str2 = 'abc' str3 = 'xyz' str4 = str2 + str3 # 'abcxyz' print(str4) # 'abcxyz' str5 = str2 + '=' + str3 print(str5) # 'abc=xyz' print(str2 * 3) # 'abcabcabc'
-
字符串的 比较运算
==
,!=
,>
,<=
,>=
,<
# ==、!= print('abc' == 'abc') # True print('abc' == 'bac') # False # >、<、>=、<= # 两个字符串比较大小比较的是第一对不相等的字符的编码值的大小 """ 判断字符是否是小写字母:'a' <= char <= 'z' 判断字符是否是大写字母:'A' <= char <= 'Z' 判断字符是否是字母:'a' <= char <= 'z' or 'A' <= char <= 'Z' 判断是否是数字字符:'0' <= char <= '9' 判断是否是中文字符:'\u4e00' <= char <= '\u9fa5' """ str6 = 'abc' str7 = 'aXYZMN' 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啊' -> '好数据啊' str1 = 'aj好23l-数据--2啊' new_str = '' for x in str1: if '\u4e00' <= x <= '\u9fa5': # print(x, end='') new_str += x print(new_str) # '好数据啊'
-
字符串的
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
-
字符串的相关操作
# a. max、min、sorted # b. str # str(数据) - 将指定数据转换成字符串(所有类型的数据都可以转换成字符串;转换的时候直接在数据的打印值外面加引号) str(100) # '100' str([100, 200]) # '[100, 200]' str({'a': 10, 'b': 20}) # "{'a': 10, 'b': 20}" # c.len(字符串) - 获取字符串中字符的个数 print(len('\tabc\n123')) # 8 print(len('\\tabc\n123')) # 9
-
-
字符串中的
r
语法# 字符串的最前面加r/R,能够让字符串中所有转义字符的功能消失,字符串中的每个符号都是普通字符 str1 = r'\tabc\n12\\3\'' print(str1) # \tabc\n12\\3\' path = R'C:\uers\yuting\name\test\aa.txt' print(path)
-
字符串的相关方法
-
字符串1.count(字符串2)
- 返回字符串1中字符串2出现的次数str1 = 'how are you? i am fine, thank you!' print(str1.count('h')) # 2 print(str1.count(' ')) # 7 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] # 方法一: result = '' for x in nums: result += str(x) print(result) # 102030256 # 方法二: result = ''.join([str(x) for x in nums]) print(result) # 102030256 list1 = [23, 'name', 309.9, 'age', True, 'abc'] # 'name+age+abc' result = '+'.join([x for x in list1 if type(x) == str]) print(result) # name+age+abc
-
字符串1.split(字符串2)
- 将字符串1中所有字符串2作为切割点对字符串1进行切割,返回的是列表# 字符串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 = 'hejs123斯柯达123000' result = str2.split('123') print(result) # ['hejs', '斯柯达', '000'] # 如果切割点连续或者切割点在边界,切割完成后会产生空串 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']
-
字符串1.replace(字符串2, 字符串3)
- 将字符串1中所有的字符串2全部替换成字符串3# 字符串1.replace(字符串2, 字符串3) - 将字符串1中所有的字符串2全部替换成字符串3 # 字符串1.replace(字符串2, 字符串3, N) str1 = 'abc+123+xyz+mn' result = str1.replace('+', '-') print(result) # abc-123-xyz-mn
-
字符串.upper
— 将小写转换成大写str6 = 'a2h2klm12+' new_str = '' new_str = str6.upper() print(new_str)
6.
字符串.lower()
— 将大写转换成小写# 6.输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现) # 例如: 输入**‘a2h2klm12+’ ** 输出 'A2H2KLM12+' new_str = str1.upper() print(new_str) # A2H2KLM12+
7.
str.capitalize()
# 把第一个字母转化为大写字母,其余小写8.
str.title()
# 把每个单词的第一个字母转化为大写,其余小写9.
字符串.zfill(N)
— 将原字符串转换成长度是n的新的字符串,不够的在原字符串前加’0’# 例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’** # 3 -> 003 # 23 -> 023 # 345 -> 345 print('abc'.zfill(5)) # 00abc num = '4' new_str = 'py1901' + num.zfill(3) print(new_str)
-
-
作业
-
输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
例如: 输入**'abcd1234 ’ ** 输出**‘bd24’**
str1 = 'abcd1234' print(str1[1::2])
-
输入用户名,判断用户名是否合法(用户名长度6~10位)
username = 'sdjs2fs' if 6 <= len(username) <= 10: print('合法') else: print('不合法')
-
输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法
user_name3 = 'sdf1232' for i in user_name3: if ('a' <= i <= 'z' or 'A' <= i <= 'Z' or '0' <= i <= '9'): print('不合法') break else: print('合法')
-
输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
例如: ‘abc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法
user_name4 = 'sdf1232' if 'A' <= user_name4[0] <= 'Z': count = 0 for i in user_name4[1:]: if 'a' <= i <= 'z' or 'A' <= i <= 'Z' or '0' <= i <= '9': if '0' <= i <= '9': count += 1 else: print('不合法') break else: if count == 0: print('合法') else: print('不合法') else: print('不合法')
-
输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
例如:输入**‘abc1shj23kls99+2kkk’** 输出:'123992’
str1 = 'abc1shj23kls99+2kkk' # 方法一: new_str = '' for x in str1: if '0' <= x <= '9': new_str += x print(new_str) # 方法二: new_str = ''.join([x for x in str1 if '0' <= x <= '9']) print(new_str)
-
输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
例如: 输入**‘a2h2klm12+’ ** 输出 'A2H2KLM12+'
str1 = 'a2h2klm12+' # 方法一: new_str = '' for x in str1: if 'a' <= x <= 'z': new_str += chr(ord(x) - 32) else: new_str += x print(new_str) # A2H2KLM12+ # 方法二: new_str = ''.join([chr(ord(x) - 32) if 'a' <= x <= 'z' else x for x in str1]) print(new_str) # A2H2KLM12+ # 方法三: # 字符串.upper() - 将字符串中所有的小写字母全部转换成对应的大写字母 new_str = str1.upper() print(new_str) # A2H2KLM12+
-
输入一个小于1000的数字,产生对应的学号
例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**
# 3 -> 003 # 23 -> 023 # 345 -> 345 num = '4' # 方法一: new_str = 'py1901' + '0'*(3-len(num)) + num print(new_str) # 方法二: # 字符串.zfill(N) - 将原字符串转换成长度是N的新字符串,不够的在原字符串前加'0' print('abc'.zfill(5)) # 00abc new_str = 'py1901' + num.zfill(3) print(new_str)
-
输入一个字符串,统计字符串中非数字字母的字符的个数
例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**’===’** 输出:3
str1 = 'anc2+93-sj胡说' count = 0 for x in str1: if not ('0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z'): count += 1 print(count)
-
输入字符串,将字符串的开头和结尾变成’+’,产生一个新的字符串
例如: 输入字符串**‘abc123’, 输出’+bc12+’**
str1 = 'abc123' new_str = '+' + str1[1:-1] + '+' print(new_str)
-
输入字符串,获取字符串的中间字符
例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**
- 写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)
例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8
str1 = 'how are you? Im fine, Thank you!'
str2 = 'how'
l2 = len(str2)
for index in range(len(str1) - l2 + 1):
if str1[index: index+l2] == str2:
print(index)
break
else:
print('没有该子串:', -1)
- 获取两个字符串中公共的字符
例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3
str1 = 'abc123'
str2 = 'huak3'
# 方法一:
new_str = ''
for x in str1:
if x in str2 and x not in new_str:
new_str += x
print(new_str)
# 方法二:
new_str = ''.join(set(str1) & set(str2))
print(new_str)