1. 字符串的创建和赋值
1.1 创建
str1 = 'westos'
str2 = "westos"
str3 = """ westos """
1.2 转义字符
- 转义字符:一个反斜线加一个单一字符,可以表示一个特殊字符,通常是不可打印的字符
- 特殊记忆:换行符
\n
、制表符\t
、斜线\\
>>> s = "hello westos"
>>> s
'hello westos'
>>>
>>> s = "hello\nwestos"
>>> print(s)
hello
westos
>>>
>>> s = "hello\twestos"
>>> print(s)
hello westos
1.3 三重引号详解
-
作用一:进行多行注释
-
作用二:定义多行字符串
为避免使用转义字符\n
,通常会用在定义SQL语句的表达式中没有变量的时候使用。
1.4 字符串的删除
2. 字符串的基本特性
2.1 连接操作符和重复操作符
- 连接操作符:从原有字符串获得一个新的字符串
# 1. 连接操作符和重复操作符
name = 'westos'
print( 'hello' + ' ' + name ) #连接操作符
print( name + str(1) )
注意点:当字符串连接别的数据时,一定要注意数据类型的转换
- 重复操作符:创建一个包含了原有字符串的多个拷贝的新串
print( '*' * 20 + '学生管理系统' + '*' * 20 ) # 重复操作符
补充知识:格式化代码符合PEP8编码风格,Ctrl + Alt + L
2.2 成员操作符
# 2. 成员操作符
s = 'hello westos'
print( "o" in s ) #True
print( "o" not in s ) #False
2.3 正向索引和反向索引
- 索引:获取特定偏移的元素
- 索引的分类:正向索引,反向索引
字符串、列表和元组的共同特性
# 3. 正向索引和反向索引
s = 'westos'
print(s[0]) # w
print(s[3]) # t
print(s[-1]) # s
print(s[-3]) # t
2.4 切片
# 4. 切片
"""
回顾:
range(3): [0, 1, 2]
range(1, 4): [1, 2, 3]
range(1, 6, 2): [1, 3, 5]
切片:切除一部分的内容
s[ start : end : step ]
s[ : end : ]
s[ start : : ]
总结:
s[ :n ] : 拿出前n个元素
s[ n: ] : 除了前n个元素,其他元素保留
s[ : ] : 从头开始访问,一直到字符串结束的位置
s[ ::-1]: 倒序输出
"""
s = 'hello westos'
print(s[1:3]) # el
print(s[:3]) # hel
print(s[:5]) # hello 拿出字符串的前5个字符
print(s[1:]) # ello westos 除了第1个元素,其余元素保留
print(s[2:]) # llo westos
print(s[:]) # hello westos
print(s[::-1]) # sotsew olleh
2.5 可迭代for循环访问
# 5. for循环访问
s = "westos"
count = 0
for item in s:
count += 1
print(f"第{count}个字符串是{item}")
"""
第1个字符串是w
第2个字符串是e
第3个字符串是s
第4个字符串是t
第5个字符串是o
第6个字符串是s
"""
练习:用户输入一个字符串,判断该字符串是否为回文字符串
eg:" aba" 是回文字符串,"abba"也是回文字符串,"abc"不是回文字符串。
- 方法一:
# 需求:用户输入一个字符串,判断该字符串是否为回文字符串
# eg:" aba" 是回文字符串,"abba"也是回文字符串,"abc"不是回文字符串。
str = input("输入字符串:")
if str == str[::-1]:
print(f"{str}是回文字符串")
else:
print(f"{str}不是回文字符串")
"""
输入字符串:abc
abc不是回文字符串
"""
- 方法二:
# 需求:用户输入一个字符串,判断该字符串是否为回文字符串
# eg:" aba" 是回文字符串,"abba"也是回文字符串,"abc"不是回文字符串。
# 三元运算符解决
str = input("输入字符串:")
result = "是回文字符串" if str == str[::-1] else "不是回文字符串"
print(f"{str}{result}")
"""
输入字符串:abc
abc不是回文字符串
"""
3. 字符串的内建方法
3.1 字符串的判断与转换
- 字符串的判断
# 1. 字符串的判断
s = 'hello WESTOS'
print(s.isalnum()) # False,因为里面有空格
print(s.isalpha()) # False
print(s.isascii()) # True
print(s.isdigit()) # False
print(s.islower()) # False
print(s.isspace()) # False,并不全是空格
print(s.istitle()) # False,Hello Westos
print(s.isupper()) # False
- 字符串的类型转换
# 2. 字符串的类型转换
print('hello'.upper()) # HELLO
print('heLLO'.lower()) # hello
print('hello'.title()) # Hello
print('hello world'.capitalize()) # Hello world
print('hello world'.swapcase()) # HELLO WORLD
练习:用户输入Y或者 y,都继续执行程序
# 需求: 用户输入Y或者y,都继续执行程序
# yum install httpd
choice = input("是否继续安装程序:")
if choice.lower() == 'y' or choice.upper() == 'Y' :
print("正在安装程序......")
3.2 字符串的开头和结尾匹配
- 字符串的开头匹配
# 1. 字符串的开头匹配
# startswith
url = 'http://www.baidu.com'
if url.startswith('http'):
# 具体实现爬虫,感兴趣的话可以查看request模块。
print(f"{url}是一个正确的网站,可以爬取网站的代码。")
- 字符串的末尾匹配
# 2. 字符串的末尾匹配
# endswith
# 需求:判断文件的类型
filename = 'hello.png'
if filename.endswith('.png'):
print(f"{filename}是图片文件")
elif filename.endswith('.txt'):
print(f"{filename}是文本文件")
elif filename.endswith('.mp3'):
print(f"{filename}是音乐文件")
else:
print(f"{filename}是未知文件")
注意点:
3.3 字符串的数据清洗
>>> " hello ".strip
<built-in method strip of str object at 0x0000021F03216630>
>>> " hello ".strip()
'hello'
>>> " hello ".lstrip()
'hello '
>>> " hello ".rstrip()
' hello'
>>> " hel lo ".replace(" ", "")
'hel\t\tlo'
3.4 字符串的位置调整
>>> "学生管理系统".center(50)
' 学生管理系统 '
>>> "学生管理系统".center(50, "*")
'**********************学生管理系统**********************'
>>> "学生管理系统".center(50, "-")
'----------------------学生管理系统----------------------'
>>> "学生管理系统".ljust(50, "-")
'学生管理系统--------------------------------------------'
>>> "学生管理系统".rjust(50, "-")
'--------------------------------------------学生管理系统'
3.5 字符串的搜索和统计
- find 如果找到子串,则返回子串开始的索引位置。否则,返回 -1。
index 如果找到子串,则返回子串开始的索引位置。否则,抛出异常。
# 字符串的搜索和统计
s = 'hello westos'
print(s.find("llo")) # 2
print(s.index("llo")) # 2
print(s.find("xxx")) # -1
#print(s.index("xxx")) # 抛出异常
# ValueError: substring not found
"""
find 如果找到子串,则返回子串开始的索引位置。否则,返回 -1。
index 如果找到子串,则返回子串开始的索引位置。否则,抛出异常。
"""
print(s.count("xxx")) # 0
print(s.count("l")) # 2
print(s.count("o")) # 2
3.6 查看字符串的所有方法
3.7 字符串的分离和拼接
- 分离
# 1. 字符串的分离
item = IP.split('.')
print(item) # [ '172', '25', '254', '100' ]
- 拼接
# 2. 字符串的拼接
print("-".join(item)) # 172-25-254-100
练习:判断IP的合法性,将IP的每一位数字拿出,判断每位数字是否在 0~255 之间
# 需求:判断IP的合法性,
# 将IP的每一位数字拿出,判断每位数字是否在 0~255 之间
IP = input("输入IP地址:")
item = IP.split('.')
print(item) # [ '172', '25', '254', '100' ]
for num in item:
num_int = int(num)
if 0 <= num_int <= 255:
print(f"{num}是合法的。")
else:
print(f"{num}不是合法的。")
print(f"{IP}不是合法的IPv4地址。")
exit()
print(f"{IP}是合法的IPv4地址。")
3.8 其他内置方法
4. 扩展:string模块
4.1 string模块的应用
# 回顾:
# random模块
import random
print( random.choice("0123456789") )
print( random.choice("0123456789") + random.choice("abcdefghijklmnopqrstuvwxyz") )
# string模块
import string
print(string.digits) # 0123456789
print(string.ascii_letters) # abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
print( random.sample(string.digits, 4) ) # 随机产生4个数字
print( random.sample(string.ascii_letters, 4)) # 随机产生4个字符
print( "".join(random.sample( string.ascii_letters, 4 )) ) # 设定字符之间的联系
# 需求: 生成由2个数字和2个字符组成的验证码
print( "".join( random.sample( string.digits, 2 ) ) + "".join( random.sample( string.ascii_letters, 4 ) ) )
4.2 练习:生成100个验证码,每个验证码由2个数字和4个字母组成
# 需求:生成100个验证码,每个验证码由2个数字和4个字母组成
import random
import string
for i in range(1, 101):
print( "".join( random.sample( string.digits, 2 ) ) + "".join( random.sample( string.ascii_letters, 4 ) ) )