字符串
引号内的任何数据,必须使用单引号、双引号括起来
str1 = 'www.woodprogramming.com'
str2 = "wood编程"
print(str1)
print(str2)
如果字符串内容本身包含引号,此时就需要进行特殊处理
(1)巧用不同引号。假如字符串内容中包含单引号,则可用双引号将字符串括起来
str3 = 'I'm a coder'
str3 = "I'm a coder"
(2)转义字符。使用反斜线(\)将字符串中的特殊字符进行转义。
str5 = '"we are scared,Let\'s hide in the shade",says the bird'
字符串内容较长,也可用转义字符(\)把一个字符串写成两行。
字符串常用符号
取值顺序:
2种取值顺序:
从左到右索引默认0开始的,最大范围是字符串长度少1
从右到左索引默认-1开始的,最大范围是字符串开头
+:字符串拼接
(1)两个数值型,表示加法;(2)字符串和数值型,表示拼接,则将数值型强制转换成字符串使用函数str
num_str1= 5 + 6
print(num_str1)
str1="H"
str2="ello"
print(str2 + str1)
s1="hello"
p = 99
print(s1 + str(p))
*:字符串复制
str1='hello'
print(str1*3)
[]: 字符串切片
- 结果为空值;例如:str1[10:]---------->返回空值;
- 超过字符串最大索引,会抛出异常(索引越界)
- 语法:[初始索引:结束索引:间隔的值]
- 注意:
- 1.字符串的索引是从0开始;获取字符串中某个字符可通过索引进行获取;
- 2.截取的切片是左闭右开区间;
- 3.不声明初始索引表示默认从0截取;不声明结束索引则表示截取字符串末尾
- 4.如果间隔值是负数,则表示先将字符串进行反转后间隔取值;字符串的反转
str1="hello"
print(str1[1])
print(str1[2:])
print(str1[:2])
print(str1[:3:3])
print(str1[1:4:2])
print(str1[-4:-2])
print(str1[::-1])
思考题:str1="hello",实现切片操作,如果切片的初始索引超过字符串的最大索引值的话则结果是?
字符串的常用操作方法
3.1 数据清洗
a=" hello world "
print(a)
print(a.strip()) #去除首尾空格
print(a.lstrip()) #去除首空格
print(a.rstrip()) #去除尾空格
print(a.replace(' ','')) #删除空格,replace(old,new,count),count参数表示的是可选参数,不声明则表示将所有的旧字符串全部替换;声明表示替换的次数
3.2 字符串的类型判断
#字符串类型判断
s="Hello 2021 World " ##False
print(s.isalnum()) #判断所有字符都是数字或者字母
print(s.isalpha()) #判断所有字符都是字母
print(s.isdigit()) #判断所有字符都是数字
print(s.islower()) #判断所有字符都是小写
print(s.isupper()) #判断所有字符都是大写
print(s.istitle()) #判断所有字符都是空白字符
3.3 字符串类型的转换
s="hEllo wOrld "
print(s.capitalize()) #首字母大写,其余全部小写
print(s.upper()) #全转换成大写
print(s.lower()) #全转换成小写
print(s.title()) #标题首字大写
3.4 判断字符串的开头的和结尾
#判断字符串的开头的和结尾
s="hello world "
print(s.startswith("hel")) #判断是否以目标字符开头
print(s.startswith("^ld")) #判断是否不以目标字符开头
print(s.endswith("ld ")) #判断是否以目标字符结尾
#判断文件的类型
name="file.txt"
if name.endswith(".doc"):
print(f"{name}是doc类型的文件")
elif name.endswith(".txt"):
print(f"{name}是txt类型的文件")
else:
print(f"{name}是其他类型的文件")
3.5 字符串位置的调整
a="hello world"
print(a.center(20,"*"))
print(a.ljust(20,"*"))
print(a.rjust(20,"*"))
3.6 字符串的搜索和统计
##find():如果找到子串, 则返回子串开始的索引位置。 否则返回-1
a="hello world abcab"
print(a.find("llo"))
print(a.find("le"))
##count():返回字串出现的次数
print(a.count("ab"))
print(a.count("le"))
##index():如果找到子串,则返回子串开始的索引位置。否则报错(抛出异常)
print(a.index("llo"))
##index()的使用
print(a.index("le"))
3.7 字符串的分离和拼接
(1)字符串的分离
split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
语法: s.split(str="", num=string.count(str))
## str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等
## num -- 分割次数。默认为 -1, 即分隔所有
a="hello world abcab"
print(a.split(" "))
print(a.split(" ",1))
print(a.split(" ",2))
(2)字符串的拼接
join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串
“连接符”.join(列表或元组或字符串或字典)
返回的是一个使用连接符进行拼接的字符串
如果对象是列表,元组,就是以一个下标元素为单位进行拼接
如果对象是字典,就是以一个键为单位进行拼接
如果对象是字符串,就是一个单词元素为单位进行拼接
##列表
a=['hello', 'world', 'abcab']
print("**".join(a))
##字典
b={'a1':123,'a2':456,'a3':789}
print("*".join(b))
##字符串
c="hello"
print("*".join(c))
4 随机生成数字和字母
4.1 随机生成数字-Random模块
import random
print(random.random())##随机输出[0,1]的浮点数
print(random.randint(0,9)) ##随机输出[0,9]之间的整数
print(random.uniform(2,5)) ##随机输出[2,5]之间的浮点数
print(random.choice("12345678")) ##随机输出字符串中的单个字符
print(random.choice([1,4,5,6])) ##输出列表中的随机项
print(random.choice((1,2,6))) ##输出元组中的随即项
print(random.sample('1233',3)) #多用于截取列表的指定长度的随机数,但是不会改变列表本身的排序
print(random.sample([1,2,5,7],3))
4.2 随机生成字符-String模块
import string
print(string.digits) #生成所有数字0-9
print(string.ascii_letters) #生成所有字母从a-z和A-Z
print(string.ascii_lowercase) #生成小写字母:a-z
print(string.ascii_uppercase) #生成大写字母:A-Z
4.3 随机生成数字和字母的组合
import random,string
print(random.sample(string.ascii_letters,4))
print("".join(random.sample(string.ascii_letters,4)))
print("".join(random.sample(string.digits,2))+"".join(random.sample(string.ascii_letters,2)))
生成十个验证码包含两个数字两个字母
#生成十个验证码包含两个数字两个字母
import random,string
for i in range(10):
print("".join((random.sample(string.digits,2))+(random.sample(string.ascii_letters,2))))
#print("".join(random.sample(string.ascii_letters, 2)) + "".join(random.sample(string.digits, 2)))
5 测试题
(1)小学生计算能力测试(10以内的运算)
设计用来实现帮助小学生进行算术运算练习。功能: 提供基本算术运算(加减乘)的题目,每道题中的操作数是随机产生的, 练习者根据显示的题目输入自己的答案,程序自动判断输入的答案是否正确 并显示出相应的信息。最后显示正确率。
import random,string
count=0
for i in range(10):
num1=random.randint(0,9)
num2=random.randint(0,9)
symbol=random.choice('+-*') ##随机生成运算符号
print(f"{num1}{symbol}{num2}=?") ##打印题目
right=eval(f"{num1} {symbol} {num2}") ##正确的结果
answer=int(input("请输入答案:"))
if answer==right: ##判断结果是否正确
print("正确")
count+=1
else:
print("错误")
print("共答对%d道题,正确率是%.2f%%" %(count,count/10*100))
(2)回文串判断
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,将空字符串定义为有效的回文串。
import string
a='A man, a plan, a canal: Panama'
for i in a:
if i not in string.ascii_letters:
a=a.replace(i,"")
else:
continue
print("true" if a[:].lower()==a[::-1].lower() else "false")
1
(3)编写一个函数来验证输入的字符串是否是有效的 IPv4
IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255,用(".")分割,比如,172.16.253.1;IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的
ip = input("请输入IP地址:")
items = ip.split('.')
if len(items) != 4:
print("不合法的IP地址")
else:
for i in range(len(items)):
if int(items[i]) > 255 or items[i].startswith('0'):
print("不合法的IP地址")
exit()
else:
continue
print("合法的IP地址")
(4)机器人移动
a=input("输入动作[R]右 [L]左 [D]下 [U]上:")
r=l=d=u=0
for i in a:
if i=="R":
r+=1
elif i=="L":
l+=1
elif i=="D":
d+=1
elif i=="U":
u+=1
else:
print("请输入正确的字符!")
exit()
print(" true " if r==l and u==d else "false")
字符串格式符操作
通过字符串进行调用format方法,format中传入的参数即通过{索引}进行获取,其索引0对应的是format传入的第一个参数;如:
#字符串格式符操作
str1="hello"
str2="world"
print("{0}{1}".format(str1,str2))
%d、%i:表示的是十进制数占位
%f:表示的是浮点数的占位
number=1
print("%03d"%number)
number1=1.222222
print("%.2f"%number1)
print("%%d%d"%number)