Python程序设计之字符串

1.字符串
①编码格式
UTF-8是国际通用的编码,以一个字节表示英语字符(兼容ASCII),以三个字节表示中文及其他语言,对所有国家需要使用的字符进行了编码。
GB2312/GBK是我国制定的中文编码标准,使用一个字节表示英语,两个字节表示中文。
CP936是微软公司在GBK基础上开发的编码方式。
Unicode是不同编码风格之间相互转换的基础。
可以用显式声明编码格式:

#coding=utf-8
#coding:GBK
#-*-coding:utf-8-*-
#Python3.x默认编码为UTF-8

②Python版本对中文的支持不同
Python2.x对中文支持不够,因此需要在不同编码之间转换;Python3.x完全支持中文,包括变量。

③字符串属于不可变序列类型,使用单引号、双引号、三单引号或三双引号作为界定符,并且不同界定符之间可以相互嵌套。字符串可以有常见的序列通用方法(包括比较,计算长度,元素访问,分片)以及特有的操作(格式化操作,字符串查找,字符串替换等),但字符串属于不可变序列,即不能修改原有字符串,但是可以通过replace()、translate()方法来修改字符串(变成新的字符串)然后赋值给变量。
a)字符串驻留机制:
短字符串有驻留机制,长字符串不符合

a='1234'
b='1234'
id(a)==id(b)	#True
a=a*50
b=b*50
id(a)==id(b)	#False

在Python2.x中字符串有str和unicode两种格式,其基类都是basestring,在Python3.x中只有str类型,字符串对象不再支持decode()方法

#Python 2.x中字符串
type('中国')
<type 'str'>
type('中国'.decode('gbk'))
<type 'unicode'>

#Python 3.x中字符
type('中国')
<type 'str'>
type('中国'.encode('gbk'))
<class 'bytes'>

④字符串格式化
格式:

'% [-] [+] [0] [m] [.n] 格式字符'% x
#第一个%:格式标志,表示格式开始
#第一个中括号:指定左对齐输出
#第二个中括号:对正数加+号
#第三个中括号:指定空位填0
#第四个中括号:指定最小宽度
#第五个中括号:指定精度
#格式字符:指定类型,见下表
#第二个%号:格式运算符
#x:带转换的表达式

#格式字符有
%s	#字符串(采用str()的显示)
%r	#字符串(采用rper()的显示)
%c	#表示单个字符
%%	#表示%
%d/%i/%o/%x	#分别表示十进制数/十进制整数/八进制整数/十六进制整数
%e/%E		#分别表示基底为e/E的指数
%f/%F		#表示浮点是
%g/%G		#分别表示基底为e/E的指数或浮点数(根据显示长度选择)



#例子:
x=1235
so="%o"%x	#将x转换为八进制数
>>>"2323"

"%s"%65		#作用类似于str()
>>>65

'%d,%c'%(65,65)	#使用元组对字符串进行格式化,按位置对应
>>>'65,A'

建议使用format()函数来进行字符串的格式化,该方法不仅使用位置进行格式化,还支持使用与位置无关的参数名字来进行格式化,并且支持序列解包格式化字符串

print("The number {0:,} in hex is: {0:#x}, the number {1} in oct is {1:#o}".format(5555,55))
>>>The number	5,555 in hex is: ox15b3,the number 55 in oct is 0o67

⑤字符串常用方法:

s='1,2,3'
#查找
s.find('1')	#返回第一次出现的位置
s.find('1',0,2)	#指定范围查找
s.rfind('2')	#倒叙查找
s.index('2')	#返回首次出现位置
s.count('1')	#统计字符串出现次数
#分割
s1=s.split(",")	#使用‘,’分隔开字符串
>>>s1
>>>['1','2','3']
>s2=s.partition(',')	#用来指定字符串为分隔符将元字符划分为3部分
>>>s2
>>>('1',',','2,3')
#split()和rsplit()函数可以指定最大分割次数
#连接
s3=['1','2','3']
sep=","
s=sep.join(s3)	#'+'也可以实现字符串连接,但效率较低
>>>s
>>>"1,2,3"
#字符转换
upper()	#全部字母大写
lower()	#全部字母小写
capitalize()	#首个单词字母大写
title()	#单词首字母大写
swapcase()	#与title()相反
replace(n,m)	#n表示原来字符串,m表示替换字符串
maketrans()/translate()	#前者用来生成字符替换表,后者实现替换
table=''.maketrans("abcd","1234")	#将abcd对应转换为1234
s="abcd56"
s.translate(table)
>>>"123456"
#删除
strip()	#删除空白字符
strip("a")	#删除指定字符
rstrip("a")	#删除字符串右端指定字符
rstrip("a")	#删除字符串左端指定字符
#将字符串转换为表达式求值
eval("3+4")
>>>7
#in 关键字 返回True 或者False
startswith()/endswith()	#分别判断字符串开始字符和结束字符是否为指定字符
#判定字符类型
isalnum()	#判断是否为数字
isalpha()	#判断是否为字母
isdigit()	#判断是否为数字字符
isspace()	#判断是否为空格
isupper()	#判断是否为大写
islower()	#判断是否为小写
#修改字符串样式
center(n,'m')	#n表示设置新字符串长度,m表示填充字符,m可以省略,默认为空格
ljust()	#居左
rjust()	#居右

⑥字符串常量

import string
string.digits	#数字
string.punctuation	#标点符号
string.letters	#英文字母
string.printtable	#可打印字符
string.uppercase/string.lowercase	#大写字母/小写字母

#随机密码生成案例
import string
x=string.digits+string.ascii_letters+string.punctuation
import random
''.join(random.choice(x) for i in range(8))
''.join(random.sample(x,8))
#random库
getrandbits()	#指生成定二进制数的随机整数
randrange()	#指定随机范围的随机数
randint()	#指定类型的随机数
sample()	#指定数量且不重复的随机数
betavariate()	#返回[0,1]区间符合beta分布
gammavarrate()	#返回gamma分布
guass()		#返回guass分布

⑦可变字符串
可以使用io.StringIO或array模块实现原地修改字符串

import io
s="Hello"
sio=io.toStringIO(s)
sio.getvalue()
>>>"Hello"
sio.seek(2)
>>>2
>>>sio.write("N")
>>>sio.getvalue()
>>>HeNlo	#方法一

import array
a=array.array('u',s)
print(a,end='')
>>>array('u','Hello')
a[0]='y'
print(a)
>>>array('u','yello')#方法二

⑧字符串应用案例

#1实现字符串加密(通过异或算法)
def crypt(source,key):
	from itertools import cycle
	result=''
	temp=cycle(key)
	for ch in source:
		result=result+chr(ord(ch)^ord(next(temp)))
	return result
source='He'
key='She'
print('Before Encrypted:'+source)
encrypted=crypt(source,key)
print('After Encryped:'+encryped)
decryped=crypt(encrypted,key)
print('After Decrypted:'+decrypted)	

Python选择结构与循环结构参看文章:
https://blog.csdn.net/qxyloveyy/article/details/104447365

你可能感兴趣的:(Python,program,design)