3.4 字符串及相关操作
字符串是Python中最常用的数据类型,属于序列类型。Python的很多特殊应用都依赖于字符串。
1.字符串和字符串变量
我们可以使用一对单引号“"”或双引号“""”来创建字符串。
存储字符串的变量,被称为字符串变量。字符串变量也是对象,对象都有方法(函数),因此,一个变量成为字符串变量就会拥有相关字符串处理的方法。例如,示例3-28。
var1='Hello' var2='World' var3=var1+var2 #var3的值为HelloWorld var4=var1[0] #var4的值H print('var1=', var1) print('var2=', var2) print('var3=', var3) print('var4=', var4)
程序运行结果:
var1= Hello var2= World var3= HelloWorld var4= H
下面我们学习有关字符串的处理。
2.字符串处理
字符串处理函数或方法的种类及意义见表3-14。
表3-14 字符串处理函数或方法
续表
示例3-29:将任何格式的中国股市的股票代码转换为聚宽股票代码格式。
相关知识:中国股市的股票代码是6位数字,中国股市分为上海证券市场和深圳证券市场,它们有不同的证券品种,如表3-15和表3-16所示。表3-17所示的是全国中小企业股份转让系统品种。
表3-15 上海证券市场的交易品种
表3-16 深圳证券市场的交易品种
表3-17 全国中小企业股份转让系统品种
聚宽证券代码标准格式(表3-18),仅适用于A股市场股票代码和基金代码,不含债券。
表3-18 聚宽证券代码标准格式
解题思路:
(1)首先,我们只考虑A股、B股、中小板、创业板及基金。其次,要考虑到输入股票代码的各种格式,如’000001', 'SZ000001', '000001SZ', '000001.sz', '000001.XSHE', '88’等。我们利用函数从各种字符串中提取出0~9的数字,并合成只有数字构成的新字符串。
(2)使用zfill()方法把只含数字的字符串变为长度为6的新字符串,前面补0。
(3)分析股票代码所处的市场,然后增加对应市场的后缀。
下面给出程序代码示例3-29。
#ston()函数提取字符串中的数字,并返回 #自定义函数概念和用法后面对应的章节会涉及 def ston(string): s1='' for s in string: if s.isdecimal(): s1=s1+s return s1 #聚宽股票代码转换 def jqsn(s): s=s.strip() s=ston(s) if(len(s)<6 and len(s)>0): s=s.zfill(6)+'.XSHE' if len(s)==6: if s[0:1]=='6' or s[0:1]=='9' or s[0:1]=='5': s=s+'.XSHG' else: s=s+'.XSHE' return s print('sz1 ==>', jqsn('sz1')) print('1.sz ==>', jqsn('1.sz')) print('400011 ==>', jqsn('400011')) print('SH600011 ==>', jqsn('SH600011')) print('900011.sh ==>', jqsn('900011.sh')) print('500011.XSHG ==>', jqsn('500011.XSHG'))
程序运行结果:
sz1 ==> 000001.XSHE 1.sz ==> 000001.XSHE 400011 ==> 400011.XSHE SH600011 ==> 600011.XSHG 900011.sh ==> 900011.XSHG 500011.XSHG ==> 500011.XSHG
3.字符串运算
下面介绍字符串常见的运算方法。
(1)使用加号“+”可以将两个字符串连接到一起,成为一个新的字符串。例如:
tring='abcd'+'efg' #结果为’abcdefg'
(2)使用乘号“*”可以将一个字符串的内容复制数次,成为一个新的字符串。例如:
s='#'*3+'Python'+'#'*3 #结果为’###Python###'
示例3-30:隐藏电话号码中第4位到第7位的数字,换为星号“*”。
tela = '18578755056' telb = tela[:3]+'*'*4+tela[7:] print(telb)
程序运行结果:
185****5056
(3)使用大于“>”、大于等于“>=”、等于“==”、小于“<”、小于等于“<=”等逻辑运算符比较2个字符串的大小。例如示例3-31。
a='abc'<='aaa' #结果False name='Tom' #给name变量赋值’Tom' b=name=='Tom' #判断name是否为’Tom',结果为True print('a=', a) print('b=', b)
程序运行结果:
a= False b= True
(4)使用“in”或“not in”关键字测试某个字符串是否存在于另一个字符串内。例如示例3-32:
x='ab' in 'abc' #结果为True print('x= ', x) a='2abcd' #给变量a赋值’2abcd' f=lambda x:x[0] in '0123456789' #匿名函数f,判断字符串首字母是否为数字 y=f(a) #返回结果为True print('y= ', y)
程序运行结果:
x= True y= True
示例3-33:输入用户名和密码,判断用户名是否为administrator,密码是否为admin888。如果正确则显示信息“欢迎管理员登录!”,如果错误则显示“用户名或密码错误!”。用户名从第一个字母开始能连续输入5个字符及以上就算正确。判断完,程序结束。
解题思路:这是一个普通用户登录的程序段,可以使用连等于符号(==)来比较。由于用户名比较长,要求从第一个字母开始能够连续输入5个及以上字符,所以我们使用rfind()方法来处理,示例3-33程序代码如下。
name=input(’请输入用户名:') password=input(’请输入密码:') if password=='admin888' and 'administrator'.rfind(name)==0 and len (name)>=5: print(’欢迎管理员登录!') else: print(’用户名或密码错误!')
程序运行结果:
请输入用户名:admin 请输入密码:admin888 欢迎管理员登录! 请输入用户名:admi 请输入密码:asmin888 用户名或密码错误!
4.字符串格式化
Python 3的字符串格式化有两种方法:%格式符方法和format方法。
1)%格式符方法
字符串格式控制:
%[(name)][flags][width].[precision]typecode
其中,参数的含义见表3-19。
表3-19 字符串格式控制的参数
表3-19中为typecode格式组成,Python 3字符串的格式类型见表3-20。
表3-20 Python 3字符串的格式类型
示例3-34是关于Python 3字符串的格式类型的示例。
a=50 print(’变量a的ASCII码%%c: %c'%a) s='Hello World ! ' print("The length of %s is %d" %(s, len(s))) b=-10.8 print('b=-10.8') print("变量b的值为%%d: %d"% b) print("变量b的值为%%f: %f"% b) print("变量b的值为%%u: %u"% b) c=10/3000 print('c=10/3000') print("变量c的值为%%f: %f"% c) print("变量c的值为%%e: %e"% c) print("变量c的值为%%g: %g"% c) d=-2304123 print('d=-2304123') print("变量d的值为%%u: %u"% d) print("变量d的值为%%o: %o"% d) print("变量d的值为%%x: %x"% d) print("变量d的值为%%X: %X"% d)
程序运行结果:
变量a的ASCII码%c: 2 The length of Hello World ! is 13 b=-10.8 变量b的值为%d: -10 变量b的值为%f: -10.800000 变量b的值为%u: -10 c=10/3000 变量c的值为%f: 0.003333 变量c的值为%e: 3.333333e-03 变量c的值为%g: 0.00333333 d=-2304123 变量d的值为%u: -2304123 变量d的值为%o: -10624173 变量d的值为%x: -23287b 变量d的值为%X: -23287B
示例3-35:
a=’股票代码: %d 股票名称: %s 股票价格: %.2f元’ b=(600519, ’贵州茅台’,551.65) c=a%b print(c) e ='★'*5+ '%(string)+20s★★★★★'%{'string':’书山有路勤为径’} print(e) f ='★'*5+ '%(string)-20s★★★★★'%{'string':’书中自有黄金屋’} print(f)
程序运行结果:
股票代码:600519 股票名称:贵州茅台 股票价格:551.65 元 ★★★★★ 书山有路勤为径★★★★★ ★★★★★书中自有黄金屋 ★★★★★
2)format方法
语法格式:
<{模板字符串}>.format(<参数表>)
在调用format()方法后会按模板字符串返回一个新的字符串。
模板字符串格式:{i: <格式控制模板>},其中,i是参数表中第i个参数,参数从0开始编号。
格式控制模板:
[[fill]align][sign][#][0][width][, ][.precision][type]
格式控制模板主要包括“[fill][align][sign][width][.precision][type]”六个字段,这些字段都是可选的,也可以组合使用。模板参数说明见表3-21。
表3-21 format方式的控制模板参数说明
见示例3-36:
#默认数据顺序{} aa=’股票代码: {} 股票名称: {} 股票价格: {} 元’.format(600519, ’贵州茅台’, 551.65) print(aa) #指定数据顺序{i} bb=’股票代码: {2} 股票名称: {0} 股票价格: {1} 元’.format(’贵州茅台’, 551.65,600519) print(bb) cc='PI={0:.2f}'.format(3.1415926) print(cc)
程序运行结果:
股票代码:600519 股票名称:贵州茅台 股票价格:551.65 元 股票代码:600519 股票名称:贵州茅台 股票价格:551.65 元 PI=3.14