Day 字符串综合用法
字符编码
-
二极管,导通来控制电路,只有0和1两种状态,计算机存储数据只能存储数字的二进制补码
-
计算机存储非数字数据时,将其数字化后再进行存储,每个字符对应一个数字,对应数字编码
-
ASCLL编码表就是128个字符,A - 65 ,a - 97 ,0 - 48,采用10进制进行标记,包括数字,字母和常见的英文输入法下的符号
-
Unicode编码表是对ASCLL编码表的拓展,包含了世界上所有的国家,所有的民族的语言符号,前128个字符和ASCLL表一样.中文编码范围是:4e00~9fa5(20000多个),一般采用十六进制进行标记,一般范围为 0000 - ffff,或者 0000 - FFFF
-
chr(编码值) - 获取编码值对应的字符
print(chr(0x4e00)) # "一" print(chr(0x9fa5)) #"龥" print(chr(0x0045)) #"E"
-
ord(字符) - 获取指定字符对应的编码值,返回的是十进制
print(ord("龥")) # '40869' print(ord("一")) # '19968'
-
hex(字符十进制) - 将字符十进制转换成十六进制
print(hex(40869)) #0x9fa5 print(hex(19968)) #0x4e00
-
在ASCLL码中大小写差值为32,编码字符:\ u 4位的16进制编码值
str2 = "\u0061,u0x6797" #在字符串中,可以用\n加4位数的16进制编码值,来打印的是对应字符 print(str2)
字符串查寻
-
转义字符的长度为1
str1 = "\thello \nworld! \u9fa5" print(len(str1)) # 16
-
字符串获取字符的方法和列表获取元素的方法一样
字符串相关操作
-
加法即拼接
str1 = "hello" str2 = "你好" print(str1 + " " + str2) #hello 你好
-
字符串乘法
str4 = "a" print(str4 * 4) #aaaa
-
字符串比较
print("abc" == "bca") # False # 比较第一个不相等的元素的大小,比较的是编码值大小 # 数字 < 大写 < 小写 < 中文 #是否是汉字: " \u4e00" 和 "\u9fa5"
-
in 和 not in 判断字符串1是否是字符串2的子串
print("a" in 'abc') print("ab" in "abc") print("ac" in "abc") print(10 in [10, 20, 30]) print([10, 20] in [10, 20, 30]) # 列表中的元素 """ True True False True False """
-
max() min() sorted() 对字符串进行操作时,都和编码值有关
-
len() 统计字符串长度 , str() 强制转换
-
eval() ,评估函数,可以去掉字符串的引号,变成实际元素数据类型
a = eval("100") b = eval("abc") # 去掉之后还是字符串,所以评估不合格,会报错,除非前面存在abc的变量 b1 = eval("10+20") print(b1)
字符串相关方法
-
字符串1.join(字符串2) - 将序列中的元素,用指定字符串连接成一个新的字符串
list1 = ["小明","账单"] result = "+".join(list1) print(result) #小明+账单 result = "and".join(list1) #返回的是一个新字符串 print(result) #小明and账单
-
字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数
-
字符串1.split(字符串2,N) - 将字符串1以字符串2为切割点切割,N可以表示切割多少次
msg = " how are you , i an fine ,thank you! and you" result = msg.split("you") # 返回值是列表,切割点会消失 print(result)
-
字符串1.replace(字符串2,字符串3,N) - 将字符串1中的字符串2,替换成字符串3,N表示替换次数
msg = " how are you , i an fine ,thank you! and you" result = msg.replace("you","him") print(result) # how are him , i an fine ,thank him! and him
-
字符串.strip() 去点字符串前后的空白,中间加入参数,或者字符串,可以去掉前后重复出现的字符串
-
isupper(),islower(),isdigit(),分别判断字符串是否全部是纯大写,小写和数字,必须是全部
char = "s" if char.isupper() or char.islower(): #判断是否是字母 print("True") else: print("False")
-
upper(),将字符串中的小写字母全部转换成大写字母
-
lower(),将字符串中的大写字母全部转换成小写字母
格式字符串
- 以%为标志额格式字符串
"""
语法: 包含格式占位符的字符串 %(数据1,数据2,数据3,,,,,,)
后面括号中的数据必须和前面字符串中的占位符一一对应
最核心的是,格式占位符有哪些
常见的格式占位符
%s - 可以给任何类型的数据占位
%d - 任何数字占位 ,浮点数会自动转换成整数,再拼接字符串
%f - 可以给任何数字占位,浮点数占位符,默认保存6位小数
%.Nf - 可以控制浮点数小数点后的位数,保留多少位小数,有一个小数点
原来是多少位,就拼多少位,用%s可以实现
"""
- 以f+字符串的格式字符串
# f - string
"""
在引号的前面加f,就可以用大括号中加入变量,来传入数据
"""
msg = f"{name}今年{age}岁了!"
print(msg)
- 控制数字显示形式
a = 10.23
b = 3254.215
print(f"{a:.2f} + {b :.2f} = {a + b :.0f}")
# { 表达式 :.2f} 控制保留多少位小数
# { 表达式 :.N%} 显示百分号,N控制需小数位数
c = 0.98
print(f"及格率:{c:.0%}") #表示98%
# 标准的金额拼接,无法控制逗号的隔开位置
d = 10000000
print(f"${d:,.2f}") # $10,000,000.00 ,2表示小数点控制位数
作业 一
-
输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
例如: 输入’abcd1234 ’ 输出’bd24’
str1 = "输入一个字符串,打印所有奇数位上的字符" print([str1[i] for i in range(len(str1)) if i % 2 != 0])
-
输入用户名,判断用户名是否合法(用户名长度6~10位)
usr_name = input("请输入你的用户名:") print(["合法" if 6 <= len(usr_name) <= 10 else "不合法"])
-
输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法
usr_name = input("请输入你的用户名:") print(["合法" if ("a" <= usr_name <= "z" or "0" <= usr_name <= "9") else "不合法"])
-
输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
例如:输入**‘abc1shj23kls99+2kkk’** 输出:‘123992’
str1 = input("请输入一个字符串:") new_str= "" for i in str1: if "0" <= i <= "9": new_str += i print(new_str)
-
输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
例如: 输入**‘a2h2klm12+’ ** 输出 ‘A2H2KLM12+’
str1 = input("请输入一个字符串:") new_str = str1.upper() print(new_str)
str1 = input("请输入一个字符串:") # new_str = str1.upper() # print(new_str) new_str ="" for i in str1: if "a" <= i <= "z": i = i.upper() new_str += i print(new_str)
-
输入一个小于1000的数字,产生对应的学号
例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**
str1 = input("请输入您的代号(1000以内):") str2 = "py1901000" while True: if 0 <= int(str1) <= 9: result = str2[:-1] + str1 print("您的学号是:", result) break elif 9 <= int(str1) <= 1000: result = str2[:-len(str1)] +str1 print("您的学号是:", result) break else: str1 = input("输入错误,请重新输入您的代号(1000以内):")
-
输入一个字符串,统计字符串中非数字字母的字符的个数
例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**‘===’** 输出:3
str1 = input("请输入一个字符串:") # isdigit() 判断是否全是数字字符 count = 0 for i in str1: if not (i.isdigit() or i.isupper() or i.islower()): count += 1 print(f"不是数字字母字符一共有:{count}个")
-
输入字符串,将字符串的开头和结尾变成’+',产生一个新的字符串
例如: 输入字符串**‘abc123’, 输出’+bc12+'**
str1 = input("请输入一个字符串:") str2 = str1[1:-1] result = "+" + str2 + "+" print(result)
-
输入字符串,获取字符串的中间字符
例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**
str1 = input("请输入一个字符串:") if len(str1) % 2 == 0: result = str1[len(str1) // 2 - 1] + str1[len(str1) // 2] print(f"中间字符为:{result}") else: result = str1[(len(str1) - 1) // 2] print(f"中间字符为:{result}")
-
写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)
例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8
str1 = "how are you? Im fine, Thank you!" str2 = "you" if str2 in str1: for i in range(len(str1)): if str1[i] == str2[0] and str1[i+1] == str2[1] and str1[i+2] == str2[2]: print(i) break else: print("字符串1不包含字符串2")
-
获取两个字符串中公共的字符
例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3
str1 = "abc123" str2 = "huak3" str3 ="" for i in str1: if i in str2: str3 += i print(f"公共字符是:{str3}")
-
输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
例如: ‘abc’ — 不合法 ‘Mabc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法
usr_name = input("请输入你的用户名:") for i in range(10): # print(i) if str(i) in usr_name: result = True break else: result =False # print(result) print(["合法" if ((usr_name.isupper or usr_name.islower()) and result and usr_name[0].isupper()) else "不合法"])
作业 二
-
编写一个程序,交换指定字典的key和value。
#例如:dict1={'a':1, 'b':2, 'c':3} --> dict1={1:'a', 2:'b', 3:'c'} dict1 = {'a': 1, 'b': 2, 'c': 3} list1 = list(dict1.keys()) list2 =list(dict1.values()) print(list1) print(list2) dict1.clear() for i in range(len(list1)): dict1[list2[i]] = list1[i] print(dict1)
-
编写一个程序,提取指定字符串中所有的字母,然后拼接在一起产生一个新的字符串
#例如: 传入'12a&bc12d-+' --> 'abcd' str1 = '12a&bc12d-+' str2 = "" for i in str1: if i.isupper() or i.islower() : str2 += i print(str2)
-
写一个自己的capitalize函数,能够将指定字符串的首字母变成大写字母
#例如: 'abc' -> 'Abc' '12asd' --> '12asd' str1 = "1cn" print(str[str1[0].upper() + str1[1:] if str1[0].isupper() or str1[0].islower() else str1 ])
-
写程序实现endswith的功能,判断一个字符串是否已指定的字符串结束
""" 例如: 字符串1:'abc231ab' 字符串2:'ab' 函数结果为: True 字符串1:'abc231ab' 字符串2:'ab1' 函数结果为: False """ str1 = 'abc231ab' str2 = 'aCb' print([True if str2 == str1[-len(str2):] else False])
-
写程序实现isdigit的功能,判断一个字符串是否是纯数字字符串
""" 例如: '1234921' 结果: True '23函数' 结果: False 'a2390' 结果: False """ str1 = '1234a921' flag = True for i in str1: if not ("0" <= i <= "9"): flag = False break print([True if flag else False])
-
写程序实现upper的功能,将一个字符串中所有的小写字母变成大写字母
""" 例如: 'abH23好rp1' 结果: 'ABH23好RP1' """ str1 = 'abH23好rp1' str2 = "" for i in str1: if i.islower(): result = i.upper() str2 += result else: str2 += i print(str2)
-
写程序获取指定序列中元素的最大值。如果序列是字典,取字典值的最大值
""" 例如: 序列:[-7, -12, -1, -9] 结果: -1 序列:'abcdpzasdz' 结果: 'z' 序列:{'小明':90, '张三': 76, '路飞':30, '小花': 98} 结果: 98 """ st =[-7, -12, -1, -9] if type(st) == dict: print("序列最大值为:",max(st.values())) else: print("序列最大值为:",max(st))
-
写程序实现replace函数的功能,将指定字符串中指定的旧字符串转换成指定的新字符串
""" 例如: 原字符串: 'how are you? and you?' 旧字符串: 'you' 新字符串:'me' 结果: 'how are me? and me?' """ str1 = 'how are you? and you?' str2 = 'you' str3 = 'me' str4 = "" count = 0 while True: if str1[count] == str2[0] and str1[count + 1] == str2[1] and str1[count + 2] == str2[2]: str4 += str3 count += 3 else: str4 += str1[count] count += 1 if count == len(str1): break print(str4)
-
写程序实现split的功能,将字符串中指定子串作为切割点对字符串进行切割
""" 例如:原字符串: 'how are you? and you?' 切割点: 'you' 结果: ['how are ', '? and ', '?'] """ list1 = [] str1 = 'how are you? and you?' str2 = 'you' str3 = "" count = 0 while True: if str1[count] == str2[0] and str1[count + 1] == str2[1] and str1[count + 2] == str2[2]: list1.append(str3) count += 3 str3 = "" else: str3 += str1[count] print(str3) count += 1 if count == len(str1): list1.append(str3) break print(list1)
-
用思维导图(xmind)总结四大容器:列表、字典、元组、集合
-