Python 字符串总结

1字符串是不可变的数据类型,我们看到的变化实质上上字符串指向了新的内存空间,原先内存空间的值并不会改变。在这里插入图片描述
2三重引号详解

作用1:三个单引号或者双引号可以注释
作用二:三个双引号可以定义多行字符串 注意隐藏的换行符
注意:Ctrl+\ 可以快速注释
在这里插入图片描述

3删除字符和字符串

字符串是不可变的,只能通过赋一个空字符串或者使用del语句来清空或者删除一个字符串

s1=" "
del s1
4字符串的基本特性

连接符(+)
重复操作符(*)
计算长度len(s1)
索引: s1[i] 获取特定偏移的元素 正向索引(0,1,2,3) 反向索引(-1,-2,-3,-4)
切片s1[i:j]:提取对应部分作为一个序列
切片的下边界默认为0,上边界默认为字符串长度
切片s1[i:j:k] k为递增步长
s1[:] 获取偏移量从0到末尾之间的元素 是有效拷贝的方法之一
s1[::-1] 是实现字符串反转的一种方法
成员操作符 in ,not in 如果在返回True 否则返回False
验证回文串 s==s[::-1]

s='abcdefgh'
s[::2]   #aceg
s[1::2]  #bdfh
s[:]    #abedefgh
s[::-1]   #hgfedcba
6string模块

string.ascii_letters(字母)
string.ascii_lowercase(小写)
string.ascii_uppercase(大写)
string.digits(数字)
string.whitespace(空格)
string.punctuation(标点符号)

#encoding=utf-8
"""
编写一个检查 Python 有效标识符的小脚本,名字是 idcheck.py。
要求:Python 标识符必须以字母或下划线开头
1). 只检查长度大于等于 2 的标识符
2). 以字母或者下划线开始
3). 后面要跟字母,下划线或者或数字
"""
# 导入string模块
import string
while True:
	#name = raw_input("请输入标识符: ")
	name = input("请输入标识符: ")
 
	if name == 'exit':
		print("欢迎下次使用表示符检测器....")
		exit(0)   # 退出程序, 0代表的是正常退出	
	# 1). 只检查长度大于等于 2 的标识
	if len(name) >= 2:
		# pass  # 占位符
		# 2). 以字母或者下划线开始
		if name[0] == '_' or  name[0] in string.ascii_letters:
			# pass  # 占位符
			# 3). 后面要跟字母,下划线或者或数字, hello@hhhh
			for item in name[1:]:
				if not (item == '_' or item in string.ascii_letters+string.digits):
					print('Error: 后面没有跟字母,下划线或者数字')
					break  # 跳出循环
			else:   # 当正常遍历字符串结束,要执行的内容
				print('OK: 正确的变量名')
				break
			
		else:
			print('Error: 没有以字母或者下划线开始')
	else:
		print('Error: 长度小于2')
 
#运行结果:
E:\software-python\Anaconda3\python.exe G:/python-westos/code_python/code-laoshi/day03_codexin/03_idcheck_标识符检测器.py
请输入标识符: 1python
Error: 没有以字母或者下划线开始
请输入标识符: _python
OK: 正确的变量名
7字符串内建方法

在这里插入图片描述

#字符串的判断:
str = "happy"
print(str.isalnum()) # 判断所有字符都是数字或者字母
print(str.isalpha()) # 判断所有字符都是字母
print(str.isdigit()) # 判断所有字符都是数字
print(str.islower()) # 判断所有字符都是小写
print(str.isupper()) # 判断所有字符都是大写
print(str.istitle()) # 判断所有单词都是首字母大写,像标题
print(str.isspace()) # 判断所有字符都是空白字符、\t、\n、\r
 
#运行结果为:
True
True
False
True
False
False
False

#字符串的转换:
str = "www.westos.com"
print(str.upper())          # 把所有字符中的小写字母转换成大写字母
print(str.lower())          # 把所有字符中的大写字母转换成小写字母
print(str.capitalize())     # 把第一个字母转化为大写字母,其余小写
print(str.title())          # 把每个单词的第一个字母转化为大写,其余小写
 
#运行结果:
WWW.WESTOS.COM
www.westos.com
Www.westos.com
Www.Westos.Com

案 例 3 检 测 大 写 字 母 \color{#FF3030}{案例3 检测大写字母} 3

#检测输入的单词,如果是大写或者小写或者标题,输出True,否则输出Faulse
 
word = input(">> ")
if word.isupper() or word.islower() or word.istitle():
	print(True)
else:
	print(False)
8字符串开头和结尾匹配

在这里插入图片描述

#字符串的开头和结尾匹配:
filename = "hello.log"
if filename.endswith(".log"):        #判断文件名是否以.log结尾
    print(filename)
else:
    print("error file")
 
url1 = "file:///mnt"
url2 = "file://172.25.254.250/pub/"
url3 = "http:..172.25.254.250/index.html"
 
if url1.startswith("http://"):            #判断url1是否以http://开头
    print("爬取网页......")
else:
    print("不能爬取网页")
 
#运行结果:
hello.log
不能爬取网页
9字符串的数据清洗

常用的数据清洗方法有:字符串操作正则表达式第三方库
常用数据清洗的字符串操作有截取替换查找分割

  • 截取:str[开始位置 : 结束位置 : 间隔位置] #默认开始位置为0#
  • 替换:str.replace(‘被替换的内容’,‘替换后的内容’) #replace()方法 替换字符串后仅为临时变量,需重新赋值才能保存#
  • 查找:str.find(‘要查找的内容’,[开始位置,结束位置]) #默认从0开始,返回目标第一个内容的位置,若未查找到,则返回-1#
  • 分割:str.split(‘分割符’,分割次数) #分割后,返回一个列表类型数据

注:字符串操作可以解析HTML,但纯字符串解析HTML会导致代码冗长,不便维护。字符串操作一般用于个别数据清洗,且数据具有一定的特征。
在这里插入图片描述

#用户登录系统
import getpass                        #导入getpass模块,不显示输入的密码
name = input("UserName: ").strip()            #输入用户名,并删除开头和末尾的空格
password = getpass.getpass('Password: ').strip()
 
if name == 'root' and password == 'redhat':
	print("用户%s登录成功" %(name))
else:
	print("用户%s登录失败" %(name))
 
 
#运行结果:
UserName: root
Password:
用户root登录成功
10字符串的位置定调整

在这里插入图片描述

>>> s = 'python'
>>> s.center(40)        #默认时用空格补齐
'                 python                 '
>>> s.center(40,'*')
'*****************python*****************'
>>> s.ljust(40,'-')
'python----------------------------------'
>>> s.rjust(40,'-')
'----------------------------------python'
>>> 
11字符串的搜索,统计

在这里插入图片描述

>>> s = 'hello python'
>>> s.find('l')
2
>>> s.find('w')
-1
>>> s.index('l')
2
>>> s.index('w')
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    s.index('w')
ValueError: substring not found
>>> s.count('o')
2
>>> 

注意:find和index都是索引的作用,但find在索引时,对于寻找不到的字符会报出-1 的结果,而index索引的过程中,如果 不存在,直接会报错

12字符串的分离与拼接

在这里插入图片描述

>>> phone = '132-6754-9876'
>>> phone = '132-6754-9876'
>>> phone.replace('-','')
'13267549876'
>>> phone.replace('-',' ')
'132 6754 9876'
>>> ip = '172.25.254.888'
>>> ip.split('-')
['172.25.254.888']

案例4:Ip检测器
编写一个函数来验证输入的字符串是否是有效的 IPv4 ?
1). IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 -255, 用(".")分割。 比如,172.16.253.1;
2). IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。

#ip = '172.25.254.100'
ip = input('IP: ')
# 1). 判断是否为IPv4?是否为4段?
items = ip.split('.')		# ['172', '25', '254', '100']
if len(items) == 4:
	# 2).  IPv4 地址由十进制数, 其范围为 0 - 255
	for item in items:	# item = '172', '25', '254', '100'
		#  IPv4 地址内的数不会以 0 开头。   (item.startswith('0') and len(item)!=1)
		if not(0 <= int(item) <= 255)  or  (item.startswith('0') and len(item)!=1):
			print('Error')
			break
		
	else:
		print('OK')
else:
	print('Error')
 
 
#运行结果:
IP: 172.25.254.886
Error
 
IP: 172.25.254.190
OK
 

案例5:用户输入字符串"hello xiao mi", 返回字符串信息"mi-xiao-hello"

#思路:
"""
string = "hello xiao mi"
# 1). 以空格为分隔符分割字符串
items = string.split(' ')
# 2). 对列表的所有元素通过切片的方式进行反转
items = items[::-1]
# 3). 通过join方法以'-'为连接符进行拼接
result = '-'.join(items)
print(result)
"""
 
代码:
string = input(">> ")
print('-'.join(string.split()[::-1]))
 
 
运行结果:
>> hello xiao mi
mi-xiao-hello
13其他内置方法
  • cmp() 根据字符串的 ASCII 码值进行比较(py3取消)
  • len() 返回字符串的字符数
  • max() and min() 返回最大或者最小的字符,(按照 ASCII 码值排列)
  • enumerate() 枚举对象同时列出数据和数据下标
  • zip() 将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
>>> s = 'hello'
>>> for item in enumerate(s):
   print(item)

   
(0, 'h')
(1, 'e')
(2, 'l')
(3, 'l')
(4, 'o')
>>> for index,value in enumerate(s):
   print("index=%s,value=%s" %(index,value))

   
index=0,value=h
index=1,value=e
index=2,value=l
index=3,value=l
index=4,value=o
>>> for a,b,c in zip('abc','123','ABC'):
   print(a,b,c)

   
a 1 A
b 2 B
c 3 C
>>> 
14实战练习

(1)检测大写字母 detect-capital
在这里插入图片描述

#代码:
word = input(">> ")
if word.isupper() or word.islower() or word.istitle():
	print(True)
else:
	print(False)
 
#结果:
>> USA
True
 
>> FlaG
False

(2)学生出勤记录 student-attendance-record
在这里插入图片描述

#代码如下:
""
学生出勤记录:
难点:不超过两个连续的L,可以转换为LLL出现的次数小于1即可

"""
records = input(">>> ")
print(records.count('A') <= 1 and records.count('LLL') < 1)
#结果:
>>> PPALLP
True
>>> PPALLL
False

(3)机器人能否返回原点 robot-return-to-origin
在这里插入图片描述

"""
机器人能否返回原点
分析:要使得机器人回到远点,则必须相反动作的次数相同即可,即moves.count('L')=moves.count('R')并且
moves.count('U')=moves.count('D')
"""
moves = input(">> ")
print(moves.count('L') == moves.count('R') and moves.count('U') == moves.count('D'))
 
 
结果:
>> UD
True
>> LL
False

(5)小学生计算能力测试系统(综合)
设计一个程序,用来实现帮助小学生进行算术运算练习,它具有以下功能:
提供基本算术运算 (加减乘)的题目,每道题中的操作数是随机产生的,
练习者根据显示的题目输入自己的答案,程 序自动判断输入的答案是否正确并显示出相应的信息。
最后显示正确率。

import random            #导入随机模块
start = input("输入测试数字的大小范围(start,默认是0) >> ")
end = input("输入测试数字的大小范围(end,默认是0) >>")
count = input("输入测试题目数量(默认为10) >>")

#1).给定start.end.count默认值
start = 0 if not start else int(start)
end = 10 if not end else int(end)
count = 10 if not count else int (count)
input("任意键进入测试......")

#print(start.end.count)

#4)显示正确率
right_count = 0
#3).循环count次出count道题目
print("小学生计算能力测试系统".center(50,'*'))
for item in range(count):
   #2).每道题中的随机数是随机产生的,练习者根据现实的题目输入自己的答案
   num1 = random.randint(start,end)
   num2 = random.randint(start,end)
   operator = random.choice('+-')

   #print (num1,num2,operator)

   user_result = int(input('%s %s %s ='%(num1,operator,num2)))
   right_result = eval("%s%s%s" %(num1,operator,num2))
   if user_result == right_result:
       print("回答正确")
       right_count +=1
   else:
       print("回答错误")
print("正确率: %.2f %%"%((right_count / count)*100))


#测试:
输入测试数字的大小范围(start,默认是0) >> 100
输入测试数字的大小范围(end,默认是0) >>100
输入测试题目数量(默认为10) >>5
任意键进入测试......
*******************小学生计算能力测试系统********************
100 - 100 =0
回答正确
100 + 100 =200
回答正确
100 - 100 =0
回答正确
100 - 100 =0
回答正确
100 + 100 =100
回答错误
正确率: 80.00 %

参考自https://blog.csdn.net/daidadeguaiguai/article/details/103342790

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chde2Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值