-
1.字符串定义
- 三种表示方式:单引号(‘’),双引号(" "),三引号(‘’‘ ’‘’)
-
三引号可以多行,单引号和双引号多行需要使用() r_single = 'text' r2_double = "dewdwdw dwqdwqdwqdwqdwedwqwdwqdwqdwq" \ "(抽取当前我带我去到我的期望的期望的味道我确定我的dwqdwqdqw)" r3_triple = ''' 大的期望的期望的味道我的的期望的期望但我确定我去到我 的氛围欺负我确定期望的期望的期望的当前我带我去但我确定期望 '''
-
- 创建空字符串,str1 = " "
- 创建非空字符串,三种方式如下:
- str1 = "Hello,Python"
- str2 = str(obj) obj可以是任何数据类型
- str3 = str(obj,'utf-8')
2.字符格式化方式
-
方式一:%占位符
- 语法:%[+][-][0][m][.n]type
- type为字符串
-
场景1 :无format,单个变量 name = "Mona" print("我的名字是%s"%name) 场景2: format .n取变量前n个字符 name = "Python" print("前3个字符是%.3s"%name) # 前3个字符是Pyt
-
- type为整数
-
场景1: 无format,多个变量 i = 1 j = 2 print("%d*%d=%d"%(i,j,i*j)) # 1*2=2 场景2: 对齐宽度m,不足补0 a = 123 print("宽度是5的数是%05d"%a) # 宽度是5的数是00123
-
- type为浮点数
-
场景1: 无format a = 1 print("这个数是%f"%a) # 这个数是1.000000 场景2: 保留小数点后n位 a = 1 print("这个数是%.2f"%a) # 这个数是1.00
-
-
方式二:string.format(变量1,,,,) Python2.7-3.5版本
- string的语法:{[index][:[[filter]align][sign][#][m][,][.n][type]]}
- 无参数
-
1.参数和引用个数一致即按照顺序输出 a = 1 name = "Mona" print("{}号队员的名字是{}".format(a, name))
-
- 有参数
-
1.参数个数不足: print(“{0}{1}{0}”.format(1,2)) # 121 2.参数顺序更换: print(“{2}{1}{0}”.format(1,2,3)) #321 3.参数是**kwargs print( “{name}{age}{sex}”.format(name=“小明”,age=18,sex=‘man’) ) 4.参数是元组 t= ("Mona","John") print("{0[0]}的朋友是{0[1]}".format(t)) 5.参数是字典 d = {‘name’:’w,’age’:18} print(“{0[‘name‘}{0[‘age’}“.format(d))
-
-
方式三(推荐):F-String Python3.5以上
-
-
语法:{content:format}
-
content填入变量
-
例1: name = "python" age = 27 work = 3 print(f"这位菜鸟的名字是{name},年龄是{age},已经工作了{work}还是一无所获") 最终输出结果: print(f"这位菜鸟的名字是{name},年龄是{age},已经工作了{work}还是一无所获") ------------------------------------------------------------------------ 例2: list1 = [10, 'hello', 27] for i, j in enumerate(list1): print(f"列表第{i+1}个元素的值是:{j}") 最终输出结果是: 列表第1个元素的值是:10 列表第2个元素的值是:hello 列表第3个元素的值是:27
-
-
content填入函数
-
str1 = "hello,python" print(f"字符串是{str1.upper()}") # 字符串是HELLO,PYTHON
-
-
content填入表达式
-
print(f"最终加和是:{12*5+10}") # 最终加和是:70
-
-
content引号,大括号,反斜杠
- 大括号内的引号和括号外的引号符不可冲突
-
方式1: print(f"字符串是:{'hello'}") 方式2: print(f'字符串是:{"hello"}') 方式3: print(f"""字符串是:{"I'm happy"}""") 方式4: print(f'''字符串是:{"I'm happy"}''')
-
-
content大括号还需要展示大括号
- 大括号内的引号和括号外的引号符不可冲突
-
print(f'''{{5}}字符串是:{"I'm happy"}''')
最终输出结果是:
{5}字符串是:I'm happy
-
content大括号内不可使用转义字符,括号外可使用
例1: 括号外使用\,展示后面符号本身的意义
print(f'''he\'ll be happy,{"and I'm happy"}''')
最终输出结果是:
he'll be happy,and I'm happy
--------------------------------------------------------------
例2: \b退格
print(f'''he\'ll be happy\b{"I'm happy"}''')
最终输出结果是:
he'll be happI'm happy
---------------------------------------------------------------
例3: \n换行
print(f'''he is happy\n{"I'm happy"}''')
最终输出结果是:
he is happy
I'm happy
--------------------------------------------------------------
例4: \r换行符,光标回退开始位置
print(f'''he is happy\r{"I'm happy"}''')
最终输出结果是:
I'm happy
-
format自定义格式{[index][:[[filter]align][sign][#][m][千位分隔符][.n][type]]}
- 对齐align
- 宽度m
- 符号
- 补零
- 精度[.n]
-
对于浮点数,保留小数点后2位 a = 12.0 print(f"{a:.2f}") # 12.00
-
- 千位分隔符
- 前提:需要和格式类型搭配使用
- 分隔符1: , 仅适用于float,complex, 十进制
-
1. 和十进制数搭配使用 def add_commas(number): return f"{number:,d}" # 78,934,654,383 number = 78934654383 # 调用函数 print(add_commas(number)) 2. 和浮点数搭配使用,只分隔小数位前的数位 def add_commas(number): return f"{number:,f}" # 78,934,654.383000 number = 78934654.383 # 调用函数 print(add_commas(number))
-
- 分隔符2: _
4.字符串的操作方法
-
增
-
删
-
rstrip([character])
- 默认将字符串右边的空白字符去除
-
lstrip([character])
- 默认将字符串左边的空白字符去除
-
strip([character])
-
默认将字符串两端的空白字符(包括空格,\n,\t等)去除
- 参数character代表删除指定的字符
-
场景1: 指定删除给定的字符 str = "[hello,world]" print(str.strip('[]')) # hello,world
-
-
-
-
改
-
replace(old,new[,count]), 生成新的字符串
- 指定替换原有的字符或者子串的次数,会生成新的字符串
-
场景1: 未指定count默认替换全部符合条件的 (1)替换str1中的字符串hello为hdm str1 = "hello,world! hello,python hello guys" res = str1.replace("hello", "hdm") print(res) # hdm,world! hdm,python hdm guys 场景2: 指定count,仅替换前count个 str1 = "hello,world! hello,python hello guys" res = str1.replace("hello", "hdm", 2) print(res) # hdm,world! hdm,python hello guys 特殊场景1: 替换值不存在,原字符串输出 str1 = "hello,world!" res = str2.replace("Python","hh") print(res) # hello,world! 特殊场景2: 大小写敏感 str1 = "hello,world!" res = str1.replace("Hello","hh") print(res) # hello,world! 特殊场景3: count超过可替换的字符串,不报错 str1 = "hello,world!" res = str1.replace("hello", "hh", 2) print(res) # hh,world!
-
split([sep[,maxsplit]])
- 作用:从左到右按照指定分隔符划分原字符串,生成一个包含被分割子串的列表
- 参数sep是分隔符,默认是空格
- 参数maxsplit代表的是拆分次数
-
str = " I like python " one = str.split(' ') # 空字符串,长度为多个空格字符个数 print(one) # ['', 'I', 'like', 'python', ''] two = str.split() # 空格 print(two) # ['I', 'like', 'python'] str1 = "dabcdabcd" lst = str1.split("d") print(lst) # ['', 'abc', 'abc', ''] print(len(lst)) # 4
-
- 参数maxsplit最大分割次数,默认全部分割
-
场景1: 未指定分隔符和分割次数 str1 = "I love Python" res = str1.split() print(res) # ['I', 'love', 'Python'] 实际例子:控制台一次性按照空格分隔输入多个数据,想要针对输入的数据输出的时候也是多个数据 s = input("请输入数字:").split() print(s) 控制台输入: 请输入数字:1 2 3 4 5 输出: ['1', '2', '3', '4', '5'] -------------------------------------------------------- 场景2: 指定最大分割次数 str1 = "I love Python" res = str1.split("", 1) print(res) # ['I', 'love Python'] --------------------------------------------------------- 场景3: 指定分割符,不输出分割符 s1 = "abcde" print(s1.split('c')) # ['ab', 'de']
-
translate()和maketrans(intab,outtab)两者需要搭配使用
- 前者是参数table给出的表(包含 256 个字符)转换字符串的字符
- 调用方式:字符串.translate(翻译table[,过滤字符])
- 后者是创建字符映射的转换表
- 调用方式: str.maketrans(intab,outtab)
- 前者是参数table给出的表(包含 256 个字符)转换字符串的字符
-
upper()
- 将字符串全部转换为大写
-
str1 = "hello python" str2 = str1.upper() print(str2) # HELLO PYTHON
-
lower()
- 将字符串全部转换为小写
-
str1 = "HELLO PYTHON" str2 = str1.lower() print(str2) # hello python
-
- 将字符串全部转换为小写
-
join(iterable)
- 根据指定分隔符将序列所有元素是字符串的合并,返回一个新的字符串
-
str1 = 'hello' str2 = ','.join(str1) print(str2) # h,e,l,l,o
-
title()
-
将字符串中的每个单词的首字母转换为大写字母,其余字母转为小写
-
str1 = "hello world" print(str1.title()) # Hello World
-
-
-
capitalize()
- 将字符串的第一个字符转换为大写字母,其余字母转为小写
-
ord(),chr()
- ord()是将将字符转换为整数值(ASCII)
- chr()是将1个范围在range(256)的整数转换为字符值
-
题目1: 替换单词字母(输入单词不包括z/Z)
def shift_char(word):
str = ""
for i in word:
将当前字母替换为下一个字母
j = i.replace(i,chr(ord(i)+1))
str += j
return str
# 获取单词
word = “moon”
# 调用函数
print(shift_char(word))
题目2: 加密a-z变为d-c
def encode(string):
new_str = ""
for char in string:
if char.isalpha():
if char != 'z':
new_str += chr(ord(char) + 3)
else:
new_str += "c"
else:
new_str += char
return new_str
str = "hello,world!"
print(f"{str}的加密是{encode(str)}") # hello,world!的加密是khoor,zruog!
- swapcase()
- 对字符串的字母进行大小写交换,生成新的字符串
-
def swap_case(s): s = s.swapcase() return s if __name__ == '__main__': s = input() # I love Python result = swap_case(s) print(result) # i LOVE pYTHON
- 扩展: 不使用swapcase()进行大小写转换
-
str1 = "HelloPython" new_str = "" for i in str1: if i.islower(): new_str += i.upper() else: new_str += i.lower() print(new_str)
-
-
查
-
isalpha()
- 判断字符串中所有字符是否都是字母,返回bool值
-
str1 = "HelloWorld" print(str1.isalpha()) # True str2 = "Hello World" print(str2.isalpha()) # False
-
isdigit()
- 判断字符串中所有字符是否都是数字,返回bool值
-
题目一: 判断连续三位是数字/字母(不区分大小写) def identi(str): if len(str) <3: return None else: for i in range(len(str)-2): if str[i:i+3].isdigit(): return f"{str}包含了连续3位数字" elif str[i:i+3].isalpha(): return f"{str}包含了连续3位字母" print(f"{str}密码安全") print(identi("a1A3zbc"))
-
isalnum()
- 判断字符串是否仅有字母+数字
-
endswith(string,start_index,end_index)
- 判断指定字符串是是否以某个字符串结尾
- 无起始索引则默认从指定字符串的开头和结束
def ends_with(string1, string2): if string1.endswith(string2): return True else: return False # 获取输入字符串 string1 = "dragon" string2 = "on" # 调用函数 print(ends_with(string1, string2)) # True
-
istitle()
-
-
-
-
检查字符串是否符合标题文本的格式即每个单词的首字母都大写
-
-
-
def is_title(sentence): if sentence.istitle(): return True else: return False # 从用户处获取输入 input_sentence = “The Quick Brown Fox” # 调用函数 print(is_title(input_sentence))
-
isupper(),islower()
-
检查字符是否是大写字母/小写字母
-
str = "Hello,World" count = 0 for i in str: if i.isupper(): count += 1 print(f"大写字母的数量是:{count}")
-
-
index(substring[,start,end])
- 可以和有序序列使用,不可在条件语句中使用
- 查询子串所在的起始索引,如不存在,则抛valueError
-
str = "Hello" print(str.index("wor")) # ValueError: substring not found
-
find(substring[,start,end])
- 只可与字符串使用;可在条件语句(if...else)中使用
- 查询子串(区分大小写)所在的起始索引,如不存在,则返回-1
-
-
场景1: 查询子串出现在字符串的次数 def sub_string(string, substring): count = 0 while True: index = string.find(substring) if index != -1: count += 1 else: break string = string[index+len(substring):] return count string = input() substring = input() print(sub_string(string, substring))
-
5. 其他
-
函数input()
- 控制台输入数据,返回的是string类型
例1: 输入无提示
s1 = input()
例2: 输入有提示
s1 = input("请输入内容:")
-
函数eval()
- 将字符串当成表达式去处理,返回计算结果(只可处理表达式)
- 常用于:将字符串转换为数据本身,常和input()搭配
-
a = input("请输入列表:") # [1,2,3,4,5] print(type(a)) # <class 'str'> print(type(eval(a))) <class 'list'>
-
- 错误使用场景:
-
场景1: str = eval(input()) print(str) 输入字符串 Hello, my name is john ^ SyntaxError: invalid syntax 原因:本身字符串里面无表达式且非其他数据类型 场景2: a = 10 b = 10 print(eval("a += b")) # SyntaxError: invalid syntax 原因:eval仅可处理表达式,上述场景里面是赋值语句
-
6.应用题
题目一: 查看密码安全等级
# 分数与密码安全等级的字典并输出
# 题目:密码长度10位以及以上,可以为数字,大小写字母,标点符号,有其中一项则加1分
# 安全等级:弱,较弱,中,较强,强
import string
n_dict = {1: "弱", 2: "较弱", 3: "中", 4: "较强", 5: "强"}
def passwd(n_str):
score = 0
num = []
upper_lett = []
lower_lett = []
ch = []
sum = [num,upper_lett,lower_lett,ch]
if len(n_str) >= 10:
score += 1
for char in n_str:
if char.isdigit():
num.append(char)
elif char.isalpha():
if char.islower():
lower_lett.append(char)
else:
upper_lett.append(char)
elif char in "+-*/_&%^@":
ch.append(char)
else:
continue
for i in sum:
if len(i) != 0:
score += 1
if score not in n_dict:
return "未知"
else:
return f"密码的分数是{score},对应的密码安全等级是{n_dict[score]}"
print(passwd("900507Ha")) # 中
题目二: 批量替换字符
题目:替换str1的字符i,l,p为char1的value:I,L,P
str1 = "i love python"
char1 = {"i":"I","l":"L","p":"P"}
方法一: 使用replace直接替换str1:
for key, value in char1.items():
str1 = str1.replace(key,value)
print(str1)
方法二: 暴力for循环,拼接新字符串
str2 = ""
for i in str1:
if i in char1:
str2 += char1[i]
else:
str2 += I
方法三:translate()和maketrans()
str1 = str1.translate(str.maketrans(char1))
print(str1)