备考计算机二级Python之Day3下部分

五、字符串类型的操作

(1)字符串操作符

Python提供了三个基本操作符

1、+

x+y,连接两个字符串

2、*

x*n,或n*x,复制n次字符串x

3、in

x in s,如果x是s的子串,返回True,否则返回False

"Python语言"+"程序设计"
'Python语言程序设计'

name="Python语言"+"程序设计"
name
'Python语言程序设计'

"等级考试!"*3
'等级考试!等级考试!等级考试!'

"Python" in name
True

"语言" in name
True

'Y' in name
False

(2)字符串处理函数

1、len(x)

返回字符串x的长度,也可返回其他组合数据类型的元素个数

len(x)返回字符串x的长度,以Unicode字符为计数基础,因此,中英文字符及标点字符等都是1个长度单位。

len("全国计算机等级考试Python语言科目")
19

2、str(x)

返回任意类型x所对应的字符串形式

str(1010)
'1010'

str(0x3F)
'63'

str(3.1415926)
'3.1415926'

3、chr(x)与ord(x)

chr(x)返回Unicode编码x对应的单字符

ord(x)返回单字符x表示的Unicode编码

(字符是经过编码后表示信息的基本单位,字符串是字符组成的序列,Python语言使用Unicode编码表示字符)

chr(1010)
'ϲ'

chr(10000)
'✐'

ord("和")
21644

ord("☆")
9734

4、hex(x)与oct(x)

hex(x)返回整数x对应十六进制的小写形式字符串

oct(x)返回整数x对应八进制的小写形式字符串

hex(1010)
'0x3f2'

oct(-255)
'-0o377'

(3)字符串处理方法

“方法”是程序设计中的一个专有名词,属于面向对象程序设计领域。在Python解释器内部,所有数据类型都采用面向对象方式实现,因此,大部分数据类型都有一些处理方法。

方法也是一个函数,只是调用方式不同。函数采用func(x)方式调用,而方法则采用<a>.func(x)形式调用,即A.B()形式。方法仅作用于前导对象<a>.

1、str.lower()与str.upper()

str.lower()返回字符串str的副本,全部字符小写

str.upper()返回字符串str的副本,全部字符大写

"Python".lower()
'python'

"Python".upper()
'PYTHON'

2、str.split(sep=None)

能根据sep分隔字符串str.sep不是必需的,默认采用空格分隔,sep可以是单个字符串。分割后的内容以列表类型返回。

"Python is an excellent language".split()
['Python', 'is', 'an', 'excellent', 'language']

"Python is an excellent language".split('a')
['Python is ', 'n excellent l', 'ngu', 'ge']

3、str.count(sub)

返回sub子串出现的次数

"Python is an excellent language".count('a')
3

"Python is an excellent language".count('an')
2

"Python is an excellent language".count(' ')
4

4、str.replace(old,new)

返回字符串str的副本,所有old子串被替换为new

"Python is an excellent language.".replace('a','#')
'Python is #n excellent l#ngu#ge.'

"Python is an excellent language.".replace('Python','C')
'C is an excellent language.'

可以使用replace()方式去掉字符串中特定字符或字符串

"Python is an excellent language.".replace('excellent','')#空格
'Python is an  language.'

"Python is an excellent language.".replace('a','')
'Python is n excellent lnguge.'

5、str.center(width,fillchar)

字符串居中函数,fillchar参数可选。但当width小于字符串长度时,返回str。fillchar是单个字符。

"Python".center(20,"=")
'=======Python======='

"Python".center(2,"=")
'Python'

6、str.strip(chars)

从字符串str中去掉在其左侧和右侧chars中列出的字符

"  ==Python==  ".strip(' ')
'==Python=='

"  ==Python==  ".strip(' =')
'Python'

"  ==Python==  ".strip(' =n')
'Pytho'

7、str.join(iter)

将iter变量的每个元素后增加一个str字符串

join()方法能够在一组数据中增加分隔字符。

" ".join('PYTHON')
'P Y T H O N'

",".join('12345')
'1,2,3,4,5'

",".join(['1','2','3','4','5'])
'1,2,3,4,5'

(4)字符串比较运算

有六种操作,>,        >=,        <,        <=,        ==,        !=.

两个字符串比较采用从左向右依次比较字符的方式,根据字符对应Unicode编码值大小决定字符串大小关系。第一个字符‘P’比‘p’小,之后后续字符不需要再比较了。同理,“P”>=“python”,结果也是False。

"Python">="python"
False

"P">="python"
False

"Python123"<"Python321"
True

"123"=="123"
True

六、类型判断和类型间转换

(1)类型判断:type()

type(x)函数对变量x进行类型判断,适用于任何数据类型。

type(10.10)
<class 'float'>

type(1010)
<class 'int'>

type('10.10')
<class 'str'>

type([1,0,1,0])
<class 'list'>

type(‘10.10’)的输出不是字符串“<class 'str'>” ,而是一种内部类型表示,不能采用字符串比较方式进行类型判断。

如果需要在条件判断中使用变量类型作为条件,可以使用type()函数进行直接比较。

n=eval(input('请输入一个数字'))
if type(n)==type(123):
    print("输入的数字是整数")
elif type(n)==type(11.3):
    print("输入的数字是浮点数")
else :
    print("无法判断输出类型")

(2)数值与字符串类型转换

通过内置的数字类型转换函数可以显式地在数字类型之间进行转换。

函数

描述

int(x)将x转换为整数,x可以是浮点数或字符串
float(x)

将x转换为浮点数,x可以是整数或浮点数

str(x)将x转换为字符串,x可以是整数或浮点数

浮点数转换为整数类型时,小数部分会被舍弃掉(不使用四舍五入)。整数转换成浮点数类型时,会额外增加小数部分。二进制、八进制、十六进制整数转换为字符串类型时统一表示为十进制字符串形式。

int(10.01)
10
int("10")
10
float("123.456")
123.456
str(10.01)
'10.01'
str(0x11)
'17'
 

七、实例解析--凯撒密码

它采用了替换方法将信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即循环右移3位。

C=(P+3) mod 26
p=(c-3) mod 26

(1)英文加密

凯撒密码的加密算法程序首先接收用户输入文本,然后对字母a--z和字母A--Z按照密码算法进行转换,同时输出。其他非英文字母部分直接输出。

#CaesarEncode.py
ptxt=input("请输入明文文本:")
for p in ptxt:
    if "a" <= p <= "z":
        print(chr(ord("a")+(ord(p)-ord("a")+3)%26),end='')
    elif "A"<= p <="Z":
        print(chr(ord("A")+(ord(p)-ord("A")+3)%26),end='')
    else:
        print(p,end='')

得到

请输入明文文本:This is an excellent Python book.
Wklv lv dq hafhoohqw Sbwkrq errn.
凯撒密码的解密算法程序首先接收用户加密文本,然后对字母a--z和字母A--Z按照密码算法进行反向转换,同时输出。其他非英文字母部分直接输出。

#CaesarDecode.py
etxt=input("请输入加密文本:")
for p in etxt:
    if "a" <= p <= "z":
        print(chr(ord("a")+(ord(p)-ord("a")-3)%26),end='')
    elif "A"<= p <="Z":
        print(chr(ord("A")+(ord(p)-ord("A")-3)%26),end='')
    else:
        print(p,end='')

得到

请输入加密文本:Wklv lv dq hafhoohqw Sbwkrq errn.
This is an excellent Python book.

(2)改进后,左移13位,加密即解密

d={}
for c in (65,97):
    for i in range(26):
        d[chr(i+c)]=chr((i+13)%26+c)
print("".join([d.get(c,c) for c in s]))

(3)中文加密

基本汉字的Unicode编码范围是0x4E00~0x9FA5,共20902字。可以采用简化的Unicode码左移3位实现加密。字母仍然按照凯撒密码方式加密。

#CaesarChineseEncode.py
ptxt=input("请输入明文文本:")
for p in ptxt:
    if "a" <= p <= "z":
        print(chr(ord("a")+(ord(p)-ord("a")-3)%26),end='')
    elif "A"<= p <="Z":
        print(chr(ord("A")+(ord(p)-ord("A")-3)%26),end='')
    elif 0x4E00 <=ord(p)<=0x9FA5:
        print(chr(ord(p)+3),end='')
    else:
        print(p,end='')

得到

请输入明文文本:这是一个用Python进行凯撒密码加密的实例。
远昲七中甫Mvqelk连衏凲撕寉砄劣寉皇审侎。

同时可以采用简化的Unicode码右移3位方式实现解密。

#CaesarChineseDecode.py
ptxt=input("请输入加密后文本:")
for p in ptxt:
    if "a" <= p <= "z":
        print(chr(ord("a")+(ord(p)-ord("a")+3)%26),end='')
    elif "A"<= p <="Z":
        print(chr(ord("A")+(ord(p)-ord("A")+3)%26),end='')
    elif 0x4E00 <=ord(p)<= 0x9FA5:
        print(chr(ord(p)-3),end='')
    else:
        print(p,end='')

得到

请输入加密后文本:远昲七中甫Mvqelk连衏凲撕寉砄劣寉皇审侎。
这是一个用Python进行凯撒密码加密的实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值