一. python的字符串
1. 字符串类型
字符串类型:
字符串的定义:
•第一种方式:
str1 = 'our company is westos'
•第二种方式:
str2 = "our company is westos"
•第三种方式:
str3 = """our company is westos"""
2.转义符号
一个反斜线加一个单一字符可以表示一个特殊字符,通常是不可打印的字符。
\n: 代表换行符 \": 代表双引号本身
\t: 代表tab符 \': 代表单引号本身
示例:
1.>>> say = 'hello\n python' #\n换行
>>> print(say)
hello
python
2.>>> say = '\"python\", this\'s a best language.' #\"转译双引号
>>> print(say)
"python", this's a best language.
3.>>> say = '\t\"python\", this\'s a best language.'
#\t表示一个tab符,\'转译单引号
>>> print(say)
"python", this's a best language.
3. 字符串操
字符串属于序列,序列支持的操作如下:
• 索引 切片
• 判断子串 重复
• 连接 计算长度
•成员操作符
索引:
• 索引(s[i] ):获取特定偏移的元素
• 给出一个字符串,可输出任意一个字符,如果索引为负数,就是相当于从后向前数。
索引理解:
字符串 h e l l o \n
索引 0 1 2 3 4 5
索引 -6 -5 -4 -3 -2 -1
示例:
正向索引:
name = "hellowestos"
print(name[0]) #索引第一个元素
反向索引:
name = "hellowestos"
print(name[-3]) #索引倒数第三个元素
切片:
切片S[i:j]提取对应的部分作为一个序列:
•上边界并不包含在内;
•如果没有给出切片的边界,切片的下边界默认为0,上边界为字符串的长度;
•扩展的切片S[i:j:k],其中i,j含义同上,k为递增步长;
s[:]获取从偏移量为0到末尾之间的元素,是实现有效拷贝的一种方法
示例:
name = "hellowestos"
#start:end 从start索引开始到end-1个索引结束;
print(name[0:3]) #表示切取1-3个元素;
print(name[:3]) #如果start没有, 则默认从0索引开始;
print(s[2:]) #如果end没有, 则默认到最后结束;
print(s[0:4:2]) #从0开始, 到4-1结束, 步长为2
print(s[::2]) #表示从开始到结束,步长为2;
print(name[:]) #表示所有元素,可用作copy;
print(name[::-1]) #表示反转所有元素;
print(s[-3:]) #显示最后三个字符。
重复:
print('*'*10+'学生管理系统'+'*'*10) #*10表示重复10次
连接:用+号连接
name = 'Go' #设定变量
print('hello '+'westos') #用+号连接hello和westos
print('hello %s' %(name)) #用+号连接hello和name变量
print('hello '+name) #用+号连接hello和name变量
成员操作符:判断子串
s="hello" #设定变量
print('h' in s) #h在s变量中吗=======True
print('hol' in s) #hol在s变量中吗=====False
print('hol' not in s) #hol不在s变量中吗===True
计算长度:
name = 'hellowestos'
print(len(name)) #len()表示计算字符串长度
示例:
for循环:
for i in range(10): #循环10次,默认从0开始到10-1结束
print(i,end=' ')
示例:
s = 'hello' #设定变量
for i in s: #循环,依次遍览s变量的每个元素
print(i,end='+')
回文数练习 :
题目要求:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例:
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数
方法一:
num = input('please input a num: ')
if num == num[::-1]: #如果num值等于他的反转值,则执行
print('ture')
else:
print('false')
方法二:prinr()默认返回的是bool类型:true或fals
print('true' if num == num[::-1] else "false")
4. 字符串的类型转换
str(obj) #将其他类型内容转换为字符串
int(obj) #将字符串转换为为整数
float(obj) #将字符串转换为浮点型
long(obj) #将字符串转换为长整型
5. 字符串常用操作
str.capitalize():
将字符串首字母大写,并返回新的首字母大写后的字符串;
str.center(width[,fillchar])
- 返回一个长为width的新字符串,在新字符串中原字符居中,其他
- 部分用fillchar指定的符号填充,未指定时通过空格填充;
str.count(sub[, start[, end]]) -> int
- 返回sub在str中出现的次数,如果start与end指定,则返回指定
则返回指定范围内的sub出现次数;
str.isalnum() //判断是否都是字母或数字
str.isalpha() //判断是否都是字母
str.isdigit() //判断是否都是数字
str.islower() //判断是否都是小写
str.isspace() //判断是否都是英文空格
str.istitle() //判断是不是都是标题(有大小写)
str.isupper() //判断是不是都为大写字母
示例:
判断一个字符串是否为标题:
是否为标题条件: 第一个字母大写, 其他字母小写;
name = input('输入字符:') #定义变量
方法一:
if str.isupper(name[0]) and str.islower(name[1:]):
print('是标题')
else:
print('不是标题')
方法二:
print('是标题' if str.isupper(name[0]) and str.islower(name[1:]) else '不是标题' )
示例:判断变量名合法性
1. 变量名可以由字母,数字或者下划线;
2.变量名只能以字母或者下划线开头;s[0]
3.变量名不能是python的关键字: eg: if, elif, else,
eg: while, for, break,continue,pass
要求:当用户输入一个变量名, 判断该变量名是否合法?
var = input('输入变量名: ')
# 1. 判断变量名的第一个字符是否合法? --- 是否是字母或者下划线
if var[0].isalpha() or var[0] == '_':
# 2. 除了第一个字符之外的其他字符; var[1:]
for item in var[1:]:
if not(item.isalnum() or item == '_'):
print('Error:%变量名不合法' %(var))
break
else:
print('%s变量合法' %(var))
else:
print('Error:第一个字符不合法!')
示例:while与else组合
while与else的组合:
输入用户名和密码登陆,如果错误三次将超出三次登陆机会。
trycount = 0 #刚开始尝试登陆次数等于0
while trycount < 3: #判断尝试次数小于3次是执行
name = input("username: ")
passwd = input("password: ")
trycount += 1 #输入一次用户名和密码,尝试次数将加一
if name == 'root' and passwd == 'westos':
#判断用户名和密码是否正确
print('登陆成功!') #正确则登陆成功
break #推出循环
else: #否则将错误
print('username or passwd error!!')
else: #超过三次将超过登陆机会
print('登陆超过三次机会')
示例:for与else组合
for与else的组合:
for i in range(3): #循环三次,尝试的次数
name = input('uasername:')
passwd = input('password:')
if name == 'root' and passwd == 'westos':
#判断用户名和密码是否正确
print('登陆成功!') #正确则登陆成功
break #推出循环
else: #否则将错误
print('username or passwd error!!')
else: #超过三次将超过登陆机会
print('登陆超过三次机会!!')
6. 字符串的搜索与替换
find 字符串的搜索:
s = 'hello python, ok, python is a program language.python'
print(s.find('python')) #找到子串,并返回最小的索引值;
print(s.rfind('python')) #找到子串,并返回最大的索引值;
print(len(s)) #字符串长度
执行结果:
字符串的替换:
s = 'hello python, ok, python is a program language.python'
print(s.replace('hello','westos')) #将所以有hello替换为westos
print(s.replace('python','GO')) #将所有的python替换为GO
执行结果:
7.字符串的处理:删除不必要的字符串
删除字符串中的空格:
strip: 删除字符串左边和右边的空格。(空格是广义的:\n,\t,和空格都是空格)
s = '\t\t\t hello \n\n\t'
print(s.strip())
lstrip: 删除字符串左边的空格。
s = '\t\t\t hello \n\n\t'
print(s.lstrip())
rstrip: 删除字符串右边的空格。
删除中间的空格, 通过replace间接实现删除中间的空格。
sa = "hwllo westos linux"
print(sa.replace(" ", ""))
删除字符串中所有的‘a’字符
n = 'hello apple, a phone'
print(n.replace('a',''))
执行结果:
示例:
会自动去掉输入是不小心加入的空格:
name = input("用户名:").strip()
passwd = input("密码:").strip()
if name == "root" and passwd == 'westos':
print("登陆成功!")
8. 字符串对齐
print('*'*10+'学生管理系统'+'*'*10)
#学生管理系统在中间左右各有10个*
s = '学生管理系统'
#字符串长度为30,学生管理系统在中间,其他用空格补齐
print(s.center(30))
#字符串长度30,学生管理系统在中间,其他用*补
print(s.center(30,'*'))
#字符串长度30,学生管理系统在左边,其他用*补
print(s.ljust(30,'*'))
#字符串长度30,学生管理系统在左边,其他用*补
print(s.rjust(30,'*'))
执行结果:
9.字符串统计
s = 'hello'
print(s.count('l')) #查找l出现的次数
print(s.count('llo')) #查找llo出现次数
h = 'hello python, ok, python is a program language.python'
print(h.count('python')) #查找python出现的次数
执行结果:
示例:
给定一个字符串来代表一个学生的出勤纪录,这个纪录仅包含以下三个字符:
'A' : Absent,缺勤
'L' : Late,迟到
'P' : Present,到场
如果一个学生的出勤纪录中不超过一个'A'(缺勤)并且不超过两个连续的'L'(迟到),
那么这个学生会被奖赏。
你需要根据这个学生的出勤纪录判断他是否会被奖赏。
示例 1:
输入: "PPALLP"
输出: True
示例 2:
输入: "PPALLL"
输出: False
info= input("输入出勤记录:")
print(info.count('A') <=1 and info.count('LLL') == 0)
执行结果:
10.字符串以什么开头和以什么结尾
字符串以什么开头:
url1 = 'http://www.baidu.com'
url2 = 'https://www.baidu.com'
url3 = 'ftp://www.baidu.com'
url4 = 'file://www.baidu.com'
print(url1.startswith('http://')) #USL1是否是以http://开头
print(url1.startswith('https://')) #USL1是否是以https://开头
字符串以什么结尾:
filename1 = 'hello.py'
filename2 = 'hello.sh'
filename3 = 'hello.jpg'
print(filename1.endswith('py')) #filename1是否以py结尾
print(filename1.endswith('sh')) #filename1是否以sh结尾
执行结果:
示例:
找出/var/log/目录中所有以.log结尾的文件名
import os #引用os模块
for filename in os.listdir('/var/log'):
if filename.endswith('.log'):
print(filename)
# else:
# print('%s不是以.log结尾的' %(filename))
执行结果:
11. 字符串的连接与分离
字符串的连接与分离:
判断一个IP是否合法?
IP = input('ip:')
IP_s = IP.split(".") #将IP以点进行分离
if len(IP_s) == 4: #判断IP是否为4段
for item in IP_s:
item = int(item)
if not 0 < item < 250:
print('%s不合法' %(IP))
break
else:
print('%s合法' %(IP))
else:
print('%s不合法,IP不为4段' %(IP))
执行结果:
字符串的连接与分离:字符串的计算与反转
info = '23+12+90*8'
# 计算info的结果;
print(eval(info))
字符串的反转:
s = 'this is pyhton'
print(s.split()) #将s反转
将字符串反转用+号连接起来:
s = 'this is pyhton'
new_s = s.split()
print("+".join(new_s))
字符串join的用法:
names = ['westos','hello','linux','redhat','apple']
print("Hello " + ",".join(names[:-1]) + " and " + names[-1])
12.排序:
排序:sort
查看最大,最小值是按ASCII码值排序的:
s = 'hello'
print(max(s)) #最大值
print(min(s)) #最小
print(sorted(s)) #排序,按ASCII码值从小到大排序
ord查看ASCII码值:
s = 'hello'
for i in s:
print(ord(i)) # ord查看ASCII码值
# python3中, 不支持数值类型比较大小;
x = 10
y = 12
if x > y:
print(1)
elif x < y:
print(-1)
else:
print(0)
13.枚举:
s = 'hello'
for i in enumerate(s):
print(i)
for index,value in enumerate('hello'):
print('%s->%s' %(index, value))
zip,:将第一个字符串和第二个字符串的值一一对应
s1 = 'hello'
s2 = '12345'
for i in zip(s1,s2):
print(i)
示例:求最大公约数和最小公倍数
求最大公约数和最小公倍数:
num1 = int(input("NUM1:"))
num2 = int(input("NUM2:"))
min_num = min(num1,num2)
for item in range(min_num,0,-1):
if num1 % item == 0 and num2 % item == 0:
res = item
break
print("%s和%s的最大公约数为%s" %(num1, num2, res))
print("%s和%s的最小公倍数为%d" %(num1, num2, (num1*num2)/res))
#最小公倍数=(num1*num2)/最大公约数)
示例: 统计字符串个数
s = input("输入统计的字符串:")
letter_count = space_count = num_count = other_count = 0
for item in s:
if item.isalpha():
letter_count += 1
elif item.isspace():
space_count += 1
elif item.isdigit():
num_count += 1
else:
other_count += 1
print("""
%s的统计
英文字母个数:%d
空格个数:%d
数字个数:%d
其他个数: %d
""" %(s, letter_count, space_count, num_count, other_count))