Python 内置数据结构字符串
Posted 123坤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 内置数据结构字符串相关的知识,希望对你有一定的参考价值。
Python 内置数据结构字符串
1. 字符串的创建和赋值
字符串或串(Strinfg) 是有数字、字母、下划线组成的遗传字符。Python 里面最常见的类型。可以简单的通过在引号间(单引号、双引号和三引号)包含字符的方式创建它。
字符串 str:单引号,双引号,三引号引起来的字符信息;
第一种方式:单引号
s1 = 'hello'
第二种方式:双引号
s2 = "world"
第三种方式:三引号
三引号第一个作用是:进行多行注释;
第二个作用是:定义多行字符串。
s3 = """
***学生管理系统***
"""
转移符号:一个反斜杠加一个单一字符可以表示一个特殊字符,通常是不可打印的字符。
字符串是不可变的,只能通过一个空字符串或者使用del语句来清空或者删除一个字符串但是没有必要显示的删除字符串。第一这个字符串的代码结束时会自动释放这些字符串。
2. 字符串的基本特性
- 连接操作符合重复操作符:
name = 'westos'
print('hello ' + name)
print('hello' + str(1)) # 字符串只能和字符串相连接
print("*" * 10 + '学生管理系统' + '*' * 10)
- 成员操作符:
s = 'hello westos'
print('westos' in s) # True
print('westos' not in s) # False
- 正向索引和反向索引
正向索引:从左往右数,第一个索引为0;
反向索引:从右往左数。
s = 'WESTOS'
print(s[0]) # 'W'
print(s[3]) # 'T'
print(s[-2]) # 'O'
- 切片
"""
回顾:
range(3):[0, 1, 2]
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]) # 拿出字符串的前5个字符
print(s[1:]) # 'ello westos'
print(s[2:]) # 'llo westos'
print(s[:]) # 拷贝字符串
print(s[::-1]) #倒叙输出
- 可迭代对象/ for循环
s = 'westos'
count = 0
for item in s:
count += 1
print(f"第count个字符:item")
**练习:**用户输入一个字符串,判断该字符串是否为回文字符串。
eg:“aba” 是回文字符串,’abba’也是回文字符串,“abc"不是回文字符串。
s = input("请输入字符串:")
s1 = s[::-1]
if s == s1:
print(f'输入的字符串s为回文字符串')
else:
print(f'输入的字符串s不是回文字符串')
另一种写法:
s = input('输入字符串:')
result = "是回文字符串" if s == s[::-1] else "不是回文字符串"
print(s + result)
3. 字符串内建方法
字符串的创建和转换:
-
类型的判断
s = ‘HelloWESTOS’
print(s.isalnum()) #Ture #是否为数字或字母
print(s.isdigit()) #False #是否为数字
print(s.isupper()) #False #是否为大写字母 -
类型的转换
print(‘hello’.upper()) #转换为大写
print(‘HellO’.lower()) #转换为小写
print(‘HellO WOrld’.title()) # 转换成标题
print(‘HellO WOrld’.capitalize()) #转换成首字母大写,其他字母小写
print(‘HellO WOrld’.swapcase()) #大小写反转
**练习:**需求: 用户输入Y或者y 符继续执行
yum install httpd
安装httpd服务;
choice = input('是否继续安装程序(y|Y):')
if choice.lower() == 'y':
print("正在安装程序......")
- 字符串开头和结尾的判断
以什么开头startswitch
,比如在爬取一定的数据时;
url = 'ftp://www.baidu.com'
if url.startswith('http'):
# 具体实现爬虫,可以看request模块。
print(f'url是一个正确的网址,可以爬取网站的代码')
以什么结尾endswith
,常用来判断文件的类型
filename = 'hello.png'
if filename.endswith('.png'):
print(f'filename 是图片文件')
elif filename.endswith('mp3'):
print(f'filename 是音乐文件')
else:
print(f'filename是未知文件')
pycharm
常用快捷键:
如何查看方法的源代码和解释说明:ctrl 键按住,鼠标移动到想要查看方法的位置,点击即可进入源码及方法说明。
- 字符串的数据清洗
数据清洗的思路:
lstrip: 删除字符串左边的空格(指广义的空格:\\n,\\t,'')
rstrip: 删除字符串右边的空格(指广义的空格:\\n,\\t,'')
strip: 删除字符串左边和右边的空格(指广义的空格:\\n,\\t,'')
replace: 替换字符,删除中间的空格,将空格置换为空。replace(" ","")
删除字符串的空格时,默认删除的是所有空格。如:\\n
换行符,\\t
制表符以及真正的空格。
s1 = ' he llo '
print(s1.strip()) #删除字符串左边和右边的空格
print(s1.lstrip()) #删除字符串左边的空格
print(s1.rstrip())
print(s1.replace(" ",""))
- 字符串的位置调整
s = '学生管理系统'
print(s.center(50,"*")) #字符串居中也长度为指定宽度
print(s.center(50,"-"))
print(s.ljust(50,"-")) #字符串左对齐且长度为指定宽度
print(s.rjust(50,"-")) #字符串右对齐且长度为指定宽度
- 字符串的搜索和统计
find
如果找到子串,则返回字串开始的索引位置。否则返回-1
index
如果找到子串,则返回子串开始的索引位置。否则报错(抛出异常)
count
用来统计子串所在字符串的数量,可以用 dir(s)加变量名来查询用法。
s = "hello westos"
print(s.find('llo'))
print(s.index('llo'))
print(s.find('xxx'))
# print(s.index('xxx')) #找不到返回异常
print(s.count('xxx'))
print(s.count('l'))
print(s.count('o'))
dir(s)
可以看到有哪些方法.
- 字符串的分离和拼接
**如:**判断IP地址的合法性, 将ip的每一位数字拿出,判断每位数字是否在0-255之间。
IP = '172.25.254.100'
print(IP.split('.')) #切割['172', '25', '254', '100']
ip = ['172', '25', '254', '100']
# 需求: 将四个数字用‘-’拼接起来
print('-'.join(ip)) #172-25-254-100 #拼接
- 其他内置方法
len() 返回字符串的字符数;
max() and min() 返回最大或者最小的字符,(按照 ASCII 码值排列);
enumerate() 枚举对象同时列出数据和数据下标
zip() 将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
s = 'hello'
print(len(s))
print(max(s))
print(min(s))
print(max(s) and min(s)) #最大或者最小的
for i,v in enumerate(s):
print(str(i) + "--->" + v)
s1 = 'abc'
s2 = '123'
for i in zip(s1,s2):
print(i)
4. String 模块
- random 随机数
import random #导入模块
a = random.choice("0123456789") #随机生成一个数
b = random.randint(10,80) #在给定的范围内生成一个整数
print(a)
print(b)
- string
import string
a = string.digits #生成所有数字0-9
b = string.ascii_letters #生成所有字母,从a-z和A-Z
print(a)
print(b)
两者结合生成随机数和随机字母;
import random
import string
a = random.sample(string.ascii_letters,4)
b = random.sample(string.digits,2)
print(a)
print(b)
如现在需要来生成100个验证码,每个验证码由2个数字和4个字母组成;
import random
import string
# print(string.ascii_letters)
# print(string.digits)
# s = random.sample(string.ascii_letters,4)
# w = random.sample(string.digits,2)
for i in range(100):
# x = "".join(random.sample(string.ascii_letters,4)) #将其拼接起来
# y = "".join(random.sample(string.digits,2))
print("".join(random.sample(string.ascii_letters,4)) + "".join(random.sample(string.digits,2)))
5. 练习
**练习1 :**小学生计算能力测试系统
设计一个程序,用来实现帮助小学生进行算术运算练习,它具有以下功能:提供基本算术运算(加减乘)的题目,每道题中的操作数是随机产生的,练习者根据显示的题目输入自己的答案,
程序自动判断输入的答案是否正确并显示出相应的信息。最后显示正确率。
思路:
运行程序, 输入测试数字的大小范围
输入测试题目数量
任意键进入测试
系统进行测试并判断对错
系统根据得分情况进行总结,退出程序.
import random
# 1+2=?
# 3*6=?
count = int(input("test numbers: "))
right_count = 0
for i in range(count):
num1 = random.randint(1,10)
num2 = random.randint(1,10)
symbol = random.choice(["+","-","*"])
result = eval(f'num1symbolnum2') #此函数为算法函数
#if symbol == "+":
# result = num1 + num2
#elif symbol == "-":
# result = num1 - num2
#elif symbol == "*":
# result = num1 * num2
question = f"num1 symbol num2 = ?"
print(question)
user_answer = int(input("Answer:"))
if user_answer == result:
print("Right")
right_count += 1
else:
print("Error")
print("Right percent: %.2f%%" %(right_count/count*100))
练习2 :
编写一个函数来验证输入的字符串是否是有效的 IPv4 ?
1). IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,
其范围为 0 - 255, 用(".")分割。
比如,172.16.253.1;
2). IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。
IP= input("Please input IPV4:")
flag=True
ipnum = IP.split(".")
if IP.count('.')==3 and len(ipnum) ==4:
if ipnum[0].isdigit() and int(ipnum[0]) <=255 and int(ipnum[0]) >=1:
for i in range(1,4):
if not ipnum[i].isdigit():
flage=False
break
elif not 0<= int(ipnum[i]) <=255:
flag=False
break
else:
flag=True
else:
flag=False
else:
flag=False
if flag==True:
print("IPV4")
else:
print("Neither")
练习3:
在二维平面上,有一个机器人从原点(0,0)开始,给出它移动顺序,判断这个机器人在完成移动后是否在(0,0)处结束
移动顺序由字符串表示,字符 move[i] 表示第 i 次移动。机器人的有效动作有 R(右)、L(左)、U(上)、D(下)。如果机器人在完成所有动作后返回原点,则返回true,否则false
注:机器人“面朝”的方向无关紧要。“R”始终使机器人向右移动一次,“L”始终是向左移动等。此外,假设每次移动机器人的移动幅度相同。
orientation = input("上(U),下(D),左(L),右(R) :")
U=1
D=1
R=1
L=1
for i in orientation:
if i == "U":
U+=1
elif i == "D":
D+=1
elif i == "R":
R+=1
elif i == "L":
L+=1
else:
print("请输入正确的方向!!")
print("True" if U==D and R==L else "False")
以上是关于Python 内置数据结构字符串的主要内容,如果未能解决你的问题,请参考以下文章
请编写一个Python函数check_huiwen(s),判断非空字符串s是不是广义回文字符串?
Python 使用列表的sort()进行多级排序实例演示,list的sort()排序方法使用详解,python3中sort()的cmp自定义排序方法,sort()的逆序倒叙排序方法