一、字符串
1.字符串的格式化
python将若干值插入带有“%”标记的字符串中,从而动态地输出字符串。字符串地格式化语法如下所示。
"%s"%str1
"%s %s"%(str1,str2)
第一行代码使用一个值格式化字符串。第二行代码使用多个值格式化字符串,用于替换的值组成一个元组。
2.字符串常用的操作函数
2.1 find()函数返回指定子串第一次在字符串中出现的位置,找不到返回-1(从左向右找)
#取文件名后缀
file_name = "osjcdos.txt.exe"
#从左开始找.的位置
print(file_name.find("."))
print(file_name[7:])
#从右开始找.的位置
print(file_name.rfind("."))
print(file_name[11:])
2.2 index()函数在找到子串位置时与find()函数返回值一致,但是当找不到时程序会抛出异常(从左向右找)
2.3 rfind()函数返回指定子串第一次在字符串中出现的位置,找不到返回-1(从右向左找)
2.4 rindex()函数在找到子串位置时与find()函数返回值一致,但是当找不到时程序会抛出异常(从右向左找)
2.5 count()函数返回字符串中指定子串参数的个数
#count()函数返回字符串中指定子串参数的个数
name = "nnjkdnjpyjksjdopy"
name.count("py")
name.count("py",1,len(name))#从字符串位置1到末尾找子串的个数
2.6 replace(a,b,c)函数将字符串中的子串a替换为子串b,最多替换c次
#replace(a,b,c)函数将字符串中的子串a替换为子串b,最多替换c次
name = "hello,hihihihihi"
print(name.replace("hi","Hi"))
print(name.replace("hi","Hi",2))
#split()函数
name = "hini josd sod dsnfo"
print(name.split(" "))#以空格切割,即遇到空格就切割,并将其结果保存在列表里,返回值为列表
2.7 caplitalize()函数将字符串第一个字符大写
#caplitalize()函数将字符串第一个字符大写
name = "aadjflsjd"
name.capitalize()
2.8 tilted()函数把字符串每个单词的首字母大写
2.9 startswith(a)函数检查是否以a开头,是则返回true,否则返回false
2.10 endswith(b)函数检查字符串是否以b开头,是则返回true,否则返回false
2.11 lower()函数返回小写
2.12 upper()函数返回大写
2.13 rjust(width)函数返回源字符串右对齐,并使用空格填充至长度width的新字符串
2.14 ljust(width)函数返回源字符串左对齐,并使用空格填充至长度width的新字符串
2.15 center(width)函数返回源字符串居中对齐,并使用空格填充至长度width的新字符串
2.16 lstrip()函数删除字符串左边的空白字符
2.17 rstrip()函数删除字符串结尾的空白字符
2.18 strip()函数删除字符串两端的空白字符
2.19 partition(str)函数把字符串以str分割成三部分,str前、str、str后,返回值为元组,
2.20 rpartition(str)函数只不过从右开始
2.21 splitlins()函数按照行分割,返回一个包含各行作为元素的列表
2.22 isalpha()如果字符串所有字符都是字母,则返回True,否则返回False
2.23 isdigit()函数如果字符串中只包含数字则返回True,否则返回False
2.24 isalnum()函数如果字符串所有字符都是字母或数字则返回True,否则返回False
2.25 isspace()函数如果只包含空格则返回True,否则返回False
2.26 join(str)函数字符串中每个字符后面插入str,构造出一个新的字符串
3.for循环
for循环用于遍历一个集合,依次访问集合中的每一项,for循环的格式如下所示:
for 变量 in 集合:
...
else:
...
for循环的执行过程:每次循环从集合中取出一个值,并把该值赋值给变量。集合可以是元组、列表、字典等数据结构。其中else子句可以省略。
for…in…循环通常与range()函数一起使用,range()函数返回一个列表,for…in…遍历列表中的元素,range()函数的声明如下:
class range(object):
range(stop)
range(start,stop[,step])
range()返回一个对象,列表的元素值由三个参数决定;参数start表示列表开始的值,默认为0;参数stop表示列表结束的值,该参数不能缺少;参数step表示步长,每次递增或递减的值,默认为1。
4.练习
练习1(查找用户输入的姓名是否在花名册内):
#判断用户输入的名字是否在花名册内
names =["jikun","guoxiyang","lijiaqi","lijiahao","lianzhengtao","cuixudong"]
name = input("请输入你要查找的姓名:")
flag = 0#利用flag变量标志循环内的条件语句是否执行了
for i in names:
if(i == name):
flag = 1
break#如果一旦找到结果,即可立即跳出循环,提升效率
if(flag == 1):
print("找到你的名字啦!")
else:
print("没找到你的名字!")
names.append(name)#没有找到就将姓名添加进列表里
print(names)
#第二种方法,用in和not in
if name in names:
print("找到了")
else:
print("没找到")
练习2(将15名老师随机分配在3个办公室内):
#导入random模块
import random
#练习:将15名老师随机分配在3个办公室内
#定义有15位老师的列表
teachers = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o"]
#输出老师人数
print("总共有%d名老师"%len(teachers))
#定义办公室列表
rooms = [[],[],[]]
#遍历老师列表
for teacher in teachers:
i = random.randint(0,2)#在遍历过程中,每次依靠randint()函数随机生成0-2之间的数代表不同的办公室
rooms[i].append(teacher)# 然后将遍历到的老师加入到相应的办公室列表中去
i = 1
for room in rooms:
t_num = len(room)#统计每个办公室中的人数
print("\n办公室%d有%d人"%(i,t_num))
for person in room:
print(person,end=" ")
print()
i += 1
练习3(字符串练习):
#append()函数向列表尾部添加元素,如果添加的元素是个列表,则原列表变为嵌套列表
a = ["sd","sda","sda"]
b = ["aaa","xsx"]
a.append(b)
print(a)
print(a[3][0])#取b中的aaa元素为这种表示方法
print(a[0][1])#取a中sd元素中的d为这种表示方法
#insert(index,obj)函数将元素obj插入index下标之前
#extend(obj)函数将obj列表元素加入原列表之后融合为一个列表
#del()根据下表删除
#pop()删除最后一个元素
#remove()根据元素的值删除
list = ["ads","sdfsa","sdfwer","dsfafeff"]
del(list[0])
print(list)
list.pop()
print(list)
list.remove("sdfwer")
print(list)
练习4(实现花名册系统的增删改查):
#花名册系统
names = ["jikun","guoxiyang","lijiaqi","lijiahao","lianzhengtao","cuixudong"]
#系统提示
while(True):
print("="*30)
print("1:添加一个新名字")
print("2:删除一个名字")
print("3:修改一个名字")
print("4:查询一个名字")
print("0:退出系统")
print("="*30)
#获取操作数字
op = input("请输入你要进行的操作:")
#根据用户选择进行功能调用
flag = 0
if(op == "1"):
name = input("请输入要添加的名字:")
names.append(name)
elif(op == "2"):
name = input("请输入要删除的名字:")
names.remove(name)
elif(op == "3"):
name = input("请输入要修改的名字:")
name_new = input("请输入修改后的名字:")
for i in names:
if( i == name):
break
i = name_new
elif(op == "4"):
name = input("请输入要查询的名字:")
for i in names:
if (i == name):
flag = 1
break
if(flag == 1):
print("找到了")
elif(op == "0"):
exit(0)
练习5(字符串的切片练习):
#切片概念
name = "abcdef"
#字符串下标从0开始,可以之间通过下标获取指定值
print(name[0])
print(name[1])
#通过name[a;b]获取字符串从起始位置a到终止位置b之前一位的子串
print(name[0:2])#取0-1子串
print(name[:])#取整个字符串
print(name[0:])#取整个字符串
print(name[:2])#取0-1子串
print(name[0:len(name)])#取整个字符串
#通过name[a:b:c]获取字符串从起始位置a到终止位置b之前一位的步长为c的子串
print(name[0:len(name):2])#取从0开始步长为2的子串
#通过name[-1]可以获取到字符串的最后一位
print(name[-1])
#逆置字符串
print(name[0:len(name):-1])
练习6(列表的排序和逆置):
#sort()对列表进行排序
#sort()函数将list列表按特定顺序重新排序,默认由小到大,参数reverse=True可改为倒序,由大到小
num = [2,4,34,54,7,32,76,223,32]
#列表的sort函数对列表元素进行排序后将结果直接覆盖原列表,所以在输出只需输出原列表名就可以,将list.sort()赋值给别的列表无效,始终为空列表
num.sort()
print(num)
num.sort(reverse=True)
print(num)
#reverse()函数逆置列表元素
num = ["2","32","5","234"]
num.remove()
print(num)
练习7(将一个字符串以空格或\t切片并返回倒数第二个切片):
str = "noido jsdjl sdnlkd sdnks osdj \tsdo"
str_split = str.split()#要用split()的无参形式,可对连续空格或者\t进行忽略
print(str_split[-2])