一、选择题

1.访问字符串中的部分字符的操作称为(    A  )。p89

A.分片           B.合并           C.索引            D.赋值


对分片的总结:

大致就是用这样一个格式,s是字符串

s[i:j:k]

该式表示从下标i开始,步长为k,到下标为j结束,但不包括下标为j的字符

例1:

s1="Hello World"
s2='Hello World'

print(s1[0:5:2])
print(s2[0:5:2])

由该例可知,字符串可以用单引号也可以用双引号

例2:

s="Hello"
print(s[0:4:2])
print(s[0:5:2])

 Hello中o的下标是4,在第二行的输出中并没有输出,因为第二行中下标是从0开始,到3结束,步长是2

例3:输出整个字符串

s="Hello"

print(s[:])
print(s[::])
print(s[::-1])

length=len(s)

print(s[0:length:1])

我们可以省略i,j,k。

当i,j,k都省略时,就是输出整个字符串。 

省略i,j,但是给k赋值-1时,就是倒序输出字符串。

当然,我们也可以给i,j,k赋值,但是我们需要知道字符串的长度。但是最后一行这里为什么输出了所有字符呢?因为Hello这个字符串的长度是5,所以length就是5,Hello的最后一个字符o的下标是4,所以输出全部字符。

例4: 这两个的结果是不同的

s="Hello"
print(s[:-1])
print(s[::-1])

第二行的-1是j,i是默认值0。也就是输出字符串除了最后一个字符的所有字符

第三行的-1是k,i默认是-1。倒序输出字符串

总结:

i的默认值是0或-1;省略j的话,就是从当前i的位置,到最后一个字符结束;k的默认值是1


2.下列关于字符串的描述错误的是(  B    )。

A.字符串s的首字符是s[0]

B.在字符串中,同一个字母的大小是等价的。

C.字符串中的字符都是以某种二进制编码的方式进行存储和处理的

D.字符串也能进行关系比较操作

s1="Hello"
s2='hello'
print(s1>s2)

3.执行下列语句后的显示结果是(   A   )。

world="world"

print("hello"+world)

A.helloworld                     B."hello"world

C.hello world                    D."hello"+world

总结:字符串的连接

1.“+”号连接

就像本题一样,将两个字符串用加号连接,那么我们会得到一个连接起来的字符串

a="hello"
b='world'
print(a+b)

 但是,我们不能将一个数字,也就是int类型的与字符串用+号连接:

a="hello"
print(a+8)

我们要用str()函数或者repr()函数去将数值型数据转化为字符串,再进行连接:

a="hello"
b=8
c=11
print(a+str(b))
print(a+repr(c))

 

2.重复连接,也就是*符号的使用 

a="li hua/"
print(a*3)
print(2*a)

a*=4
print(a)

b='123'
b+="456"
print(b)

 3.join()函数  p96 

注意:join()函数里面要放的是序列,用[ ]阔起来

print(''.join(["li"," ","hua"]))  #''中没有空格
print("".join(["li"," ","hua"]))

print("*".join(["1","2","3"]))

 由此可见,s.join(sep)中的s是用来连接sep序列中的元素的

4.格式化操作符连接

详细可以看这个 -->Python数据的输出

print("{1:s}{2:s}{0:s}".format("66","12"," "))

4.下列表达式中,有3个表达式的值相同,另一个不相同,与其他3个表达式不同的是(  C    )。

A."ABC"+"DEF"              B.''.join(("ABC","DEF"))    p96

C."ABC"-"DEF"               D.'ABCDEF'*1

print("ABC"+"DEF")
print('ABCDEF'*1)
print(''.join(("ABC","DEF")))

 选项C:

 没有重载减号

5.设s="Python Programming",那么print(s[-5:])的结果是(    A  )。

A.mming            B.Python         C.mmin             D.Pytho

从下标为-5的字符开始,到字符串最后一个字符

6.设s="Happy New Year",则s[3:8]的值为(   B   )。

A.'ppy Ne'            B.'py Ne'       C.'ppy N'     D.'py New'

不包括下标为8的字符

7.将字符串中全部字母转换为大写字母的字符串方法是(   D   )。p94

A.swapcase        字母大小写互换

B.capitalize         首字母大写,其余小写

C.uppercase         

D.upper             全部大写   (lower    全部小写)

(title   首字母大写,其余不变)

A:

s1="abcdef"
s2='aFCec'
print(s1.swapcase())
print(s2.swapcase())

B:

s1="abcdef"
s2='aFCec'
print(s1.capitalize())
print(s2.capitalize())

C:

import string
print(string.ascii_uppercase)
print(string.ascii_lowercase)

D:

s1="abcdef"
s2='aFCec'
print(s1.upper())
print(s2.upper())

8.下列表达式中,能用于判断字符串s1是否属于字符串s(即s1是否s的子串)的是(  D )。p95

①s1 in s;p93②s.find(s1)>0;③s.index(s1)>0;④s.rfind(s1);⑤s.rindex(s1)>0

A.①         B.①②        C.①②③         D.①②③④⑤

s="hello world"
s1='hello'
print(s1 in s)
print(s.find(s1))
print(s.index(s1))
print(s.rfind(s1))
print(s.rindex(s1))

A:

s.find(substr,[start,[end]])

返回s中出现substr的第一个字符的编号,上例中s1的第一个字符在s的下标为0初出现第一次,所以输出0.如果s中没有substr,那么返回-1。start与end就是在s[start,end]中查找。同样的,和range函数一样,不包括end下标的字符。

s="hello world"
s1='world'
s2="abc"
s3="hello"
print(s.find(s1))
print(s.find(s2))
print(s.find(s3,0,4))
print(s.find(s3,0,5))

B:

 s.index(substr,[start,[end]])

与find函数相同,不过没找到时,会返回一个运行时错误

s="hello world"
s3="hello"
print(s.index(s3,0,4))

s.rfind(substr,[start,[end]])

 s.rindex(substr,[start,[end]])

这两个和上面两个差不多,不同之处在于这两个返回的是最后一个substr出现的首字母编号

s="hello world hello"
s1="hello"
print(s.rfind(s1))
print(s.rindex(s1))

9.re.findall('to','Tom likes to play football too.',re.I)的值是(  A   )。  p103

A.['To', 'to', 'to']            B.['to', 'to', 'to']

C.['To', 'to']                  D.['to', 'to']

re.findall(pattern,string[,flag])

它返回string中所有与pattern匹配的全部字符串,返回形式为列表,如果pattern中含有分组,返回分组的匹配结果。如果有pattern中有多个分组,则返回元组列表。

本例中,pattern是'to',因为最后的flag是 re.I (忽略大小写    p101),所以我们在string中就要匹配‘to’或者‘To’。

import re
print(re.findall('to','Tom likes to play football too.',re.I))

10.下列程序执行后,得到的输出结果是(   C   )。p102

import re

p=re.compile(r'\bb\w*\b')

str="Boys may be able to get a better idea."

print(p.sub('**',str,1))

代码也可以是这样的:(两个代码输出是一样的)

import re

str="Boys may be able to get a better idea."

print(re.sub(r'\bb\w*\b','**',str))

A.** may be able to get a better idea.

B.Boys may be able to get a ** idea.

C.Boys may ** able to get a better idea.

D.Boys may ** able to get a ** idea.


本例用到的函数:

re.sub(pattern,repl,string[,count,flag])

re.sub()函数的作用是在string中寻找所有的pattern字符串,然后用repl替换,如果没找到,则原样输出string。count的作用是替换count个符合正则表达式的表达式,如果不写count则全部替换(如果理解count的话接着往下看)

本例中,我们是先用compile()函数生成了正则表达式对象,然后对象调方法,这样在sub()函数中就不用写pattern了

p=re.compile(pattern[,flag])

p.sub(repl,string[,count,flag])

然后在正则表达式中r的作用:p102 

因为\n我们表示一个换行符,如果我们要表示\,我们就需要写为\\。在正则表达式中,\b表示匹配单词头或单词尾,如果我们不加r的话,我们要表示\b就需要写为\\b;加了r的话,我们要表示\b写为\b即可。


对本题的解释:

p=re.compile(r'\bb\w*\b')

这段代码的作用就是生成一个正则表达式对象,这里面的正则表达式是r'\bb\w*\b'。我们一个一个分析:

r的作用上面有介绍;

\b的作用是匹配单词头或单词尾,这里是单词头;

\b与\w中间的b的作用是匹配字母b;

\w是匹配任意字母,数字,下划线;

*的作用是匹配位于*之前的0个或n个字符。*是对前面的\w起作用的,所以\w*的作用就是匹配0个或n个字母,数字,下划线;

\b的作用是匹配单词头或单词尾,这里是单词尾。

所以,这个正则表达式的作用就是匹配以b开头的单词

str="Boys may be able to get a better idea."

print(p.sub('**',str,1))

这段代码中的sub()函数,repl是‘**’,也就是我们在str中找到的符合正则表达式的单词,用**替换。后面的1就是count=1,意思是我们在str中从前往后只找一个符合的单词进行替换。如果不写count的话,就全部替换:

import re

p=re.compile(r'\bb\w*\b')

str="Boys may be able to get a better idea."

print(p.sub('**',str))   #这里没有写count

二、填空题

1."4"+"5"的值是    '45'    。

2.字符串s中最后一个字符的位置是   len(s)-1 或-1    。

3.设s='abcdefg',则s[3]的值是  'd'  ,s[3:5]的值是   'de'  ,s[:5]的值是   'abcde'   ,s[3:]的值是    'defg'    ,s[::2]的值是   'aceg'     ,s[::-1]的值是   'gfedcba'     ,s[-2:-5]的值是    '' (空字符串) 。

4.'Python Program'.count('P')的值是     2   。p95

count函数:计算substr在s中出现的次数

s.count(substr,[start,[end]])

5.'AsDf888'.isalpha()的值是    False    。

s.isalpha()判断是否全是字母

6.下面语句的执行结果是     ['A', 'A', 'A']   。

s='A'

print(3*s.split())

这里是s先spilt,再*3。

s="A"
print(3*s.split())
print((3*s).split())

 

7.已知s1='red hat',print(s1.upper())的结果是   RED HAT    ,s1.swapcase()的结果是   'RED HAT'    ,s1.title()的结果是  'Red Hat' ,s1.replace('hat','cat')的结果是 'red cat'    。

8.设s='a,b,c',s2=('x','y','z'),s3=':',则s.split(',')的值为  ['a', 'b', 'c']  ,s.rsplit(',',1)的值为   ['a ,b', 'c']    ,s.partition(',')的值为   ('a', ',', 'b,c') ,s.rpartition(',')的值为  ('a,b', ',', 'c')    ,s3.join('abc')的值为  'a:b:c' ,s3.join(s2)的值为 'x:y:z'     。

9.re.sub('hard','easy','Python is hard to learn.')的值是   'Python is easy to learn.'   。

10.下列程序执行后,得到的输出结果是    ['An', 'elite', 'university']  。

import re

str="An elite university devoted to computer software"

print(re.findall(r'\b[aeiouAEIOU]\w+?\b',str))

+ :匹配+前的一个或多个字符

?:匹配?前的0个或1个字符

三、问答题

1.什么叫字符串?有哪些常用的字符编码方案?

字符集(Charset):是一个系统支持的所有抽象字符的集合。

字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

字符编码(Character Encoding):是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。即在符号集合与数字系统之间建立对应关系,它是信息处理的一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达信息。而以计算机为基础的信息处理系统则是利用元件(硬件)不同状态的组合来存储和处理信息的。元件不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码。

常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。

2.数字字符和数字值(如'5'和5)有何不同?如何转换?

'5'是字符变量,5是数字字符。

m=5
print("m is "+str(type(m)))
n='5'
print("n is "+str(type(n)))

p=str(m)
print("p is "+str(type(p)))

q=int(n)
print("q is "+str(type(q)))

3.为什么print('I like Python'* 5)可以正常执行,而print('I like Python'+5)却运行时出错?

在 Python 中不能把两个完全不同的东西加在一起,比如说数字和文本,正是这个原因, >>>print('I like Python ' + 5) 才会报错。 不过乘以一个整数 来翻倍就具有一定的意义了,前边的例子就是将 "I like python.com" 这个字符串打印五次。

print('I like Python'* 5)

4.写出表达式。

(1)利用各种方法判断字符变量c是否为字母(不区分大小写字母)。

c.isalpha()或c.lower()<='z' and c.lower()>='a'或c.upper()<='Z' and c.upper()>='A'或c<='Z' and c >='A'or c<='z'and c >='a'

(2)利用各种方法判断字符变量c是否为大写字母。

c.isupper()或者c<='Z' and c>='A'

(3)利用各种方法判断字符变量c是否为小写字母。

c.islower()或者c<='z' and c>='a'

(4)利用各种方法判断字符变量c是否为数字字符。

 c.isdigit()或c<='9' and c>='O'

5.re.match("back","text.back")与re.search("back","text.back")的执行结果有何不同?

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐