image

编辑人: 未来可期

calendar2025-06-11

message8

visits583

2023月05月Python三级理论答案及解析

一、单选题

1、请选择,下面代码运行之后的结果是?( )
a = ‘2’
b = ‘4’
try:
c = a * b
print(c)
except:
print(‘程序出错!’)
else:
print(‘程序正确!’)

A、24

B、8

C、程序出错!

D、程序正确!

解析:【喵呜刷题小喵解析】:在Python中,字符串类型(str)不支持乘法运算。在这段代码中,变量a和b都是字符串类型,因此`a * b`会引发TypeError异常。由于try块中的代码会引发异常,所以except块会被执行,输出'程序出错!'。因此,正确答案是C。

2、下面程序执行结果是?( )
a=[‘春’,‘夏’,‘秋’,‘冬’]
c=list(enumerate(a))
print(c)

A、[(0, '春'), (1, '夏'), (2, '秋'), (3, '冬')]

B、[[0, '春'], [1, '夏'], [2, '秋'], [3, '冬']]

C、[(1, '春'), (2, '夏'), (3, '秋'), (4, '冬')]

D、[[1, '春'], [2, '夏'], [3, '秋'], [4, '冬']]

解析:【喵呜刷题小喵解析】:在Python中,`enumerate()`函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。`enumerate()`函数返回一个枚举对象,其中包含了索引和数据。在给定的程序中,`enumerate(a)`会返回一个枚举对象,其中索引从0开始,对应列表`a`中的每个元素。因此,`list(enumerate(a))`会将这个枚举对象转换为一个列表,列表中的每个元素是一个元组,元组的第一个元素是索引,第二个元素是列表`a`中的元素。所以,程序执行结果应为`[(0, '春'), (1, '夏'), (2, '秋'), (3, '冬')]`,选项A正确。

3、下面程序执行结果是?( )

s=‘123456789’
print(min(s)+max(s))

A、1

B、9

C、10

D、19

解析:【喵呜刷题小喵解析】在Python中,字符串s='123456789'是一个包含数字字符的字符串。min(s)和max(s)函数会返回字符串中最小和最大的字符,而不是数字值。在这个例子中,最小字符是'1',最大字符是'9'。因此,min(s)+max(s)的结果是字符串拼接,即'19',而不是数字1或9或10。所以正确答案是D。

4、打开b.txt文件,将"Hello Tom!"写入文件,下列语句正确的是?( )

A、f.write(['Hello'],[Tom!])

B、f.read('Hello',' Tom!')

C、f.write('Hello Tom!')

D、f.read('Hello Tom!')

解析:【喵呜刷题小喵解析】在Python中,打开文件并写入内容通常使用`open()`函数,然后使用`write()`方法写入内容。选项A中的`f.write(['Hello'],[Tom!])`语法不正确,因为`write()`方法不支持这样的参数格式。选项B的`f.read('Hello',' Tom!')`也不正确,因为`read()`方法用于读取文件内容,而不是写入。选项D的`f.read('Hello Tom!')`同样不正确,因为`read()`方法不接受字符串作为参数。只有选项C的`f.write('Hello Tom!')`是正确的,因为它使用了正确的语法和方法来打开文件并写入内容。因此,正确答案是C。

5、下列数据中,最大的数值是?( )

A、int('16',10)

B、int('110',2)

C、int('11',16)

D、int('1111',2)

解析:【喵呜刷题小喵解析】首先,我们需要将每个选项中的数值转换为十进制数,以便进行比较。A. int('16',10) = 16B. int('110',2) = 2^2 + 2^1 = 4 + 2 = 6C. int('11',16) = 16^1 + 16^0 = 16 + 1 = 17D. int('1111',2) = 2^3 + 2^2 + 2^1 + 2^0 = 8 + 4 + 2 + 1 = 15因此,最大的数值是17,即选项C。

6、十六进制数7E转换为二进制数是几位数?( )

A、7

B、6

C、4

D、2

解析:【喵呜刷题小喵解析】十六进制数7E转换为二进制数,需要先将其拆分为两个十六进制数,分别是7和E。7在十六进制中对应的二进制数为0111,E在十六进制中对应的二进制数为1110。将这两个二进制数拼接起来,得到11101110,共有8位。因此,十六进制数7E转换为二进制数是8位数。

7、表达式int(‘13’,8)的返回值是?( )

A、12

B、11

C、10

D、15

解析:【喵呜刷题小喵解析】在C语言中,逗号运算符(,)用于将多个表达式组合在一起,并返回最后一个表达式的值。在这个表达式中,`int('13',8)`实际上被解释为`int((int('13'),8))`,因为C语言在解析`int('13',8)`时会首先解析逗号运算符,然后再进行类型转换。首先,`int('13')`这个表达式会尝试将字符'13'转换为一个整数。在ASCII编码中,字符'1'的值为49,字符'3'的值为51。因此,`int('13')`的值为49 + 51 = 100,即数字100。然后,逗号运算符返回其第二个操作数,即8。因此,整个表达式`int('13',8)`的返回值是8。然而,题目中的表达式可能是`int('1' + '3', 8)`,这样`'1' + '3'`会计算为4(在ASCII中,'1'是49,'3'是51,49+51=100,但是结果会被截断为单个字符,即'4'),然后`int('4', 8)`会返回8,因为逗号运算符返回其第二个操作数。所以,根据题目的实际内容,返回值应该是8,即选项B。但是,原始问题中的`int('13',8)`似乎是一个输入错误,应该是`int('1' + '3', 8)`或者其他类似的表达式。

8、有如下代码:
res = []
f = open(‘Python08.txt’,‘r’) #Python08.txt中共4行诗句
p = f.readlines()
for s in p:
res.append(s)
print(res)
f.close()
对于该段代码,说法不正确的是?( )

A、程序的功能是按行读取文本文件中的内容,并将其逐一写入列表res

B、此处readlines()用法错误,应改成readline()

C、该文本文件和程序代码文件在同一文件夹下

D、参数'r'不允许修改该文本文件

解析:【喵呜刷题小喵解析】本题主要考查文件操作和列表使用。对于给定的代码段,我们逐一分析每个选项:A. 程序的功能是按行读取文本文件中的内容,并将其逐一写入列表res。这个描述是正确的,代码确实按行读取了文件内容,并将其添加到列表res中。B. 此处readlines()用法错误,应改成readline()。这个描述是错误的。readlines()是一个正确的方法,用于读取文件的所有行并返回一个包含这些行的列表。而readline()只读取文件的一行。C. 该文本文件和程序代码文件在同一文件夹下。这个描述是否正确取决于实际文件的位置,但代码本身并没有明确说明文件的位置,所以无法从代码段中判断。D. 参数'r'不允许修改该文本文件。这个描述是正确的,'r'参数表示只读模式,所以代码不会修改文件内容。因此,不正确的说法是B。

9、有代码如下:
s=[“白日依山尽”,“黄河入海流”,“欲穷千里目”,“更上一层楼”]
f=open(‘sj.txt’,‘w’)
f.write(‘\n’.join(s))
f.close()
关于上述代码,说法不正确的是?( )

A、写入文本文件的步骤主要是打开——写入——关闭

B、f.write('\n'.join(s))与f.write(' '.join(s)+'\n')的功能是相同的

C、write()的参数是一个字符串,而writelines()的参数可以是字符串也可以是字符序列

D、该代码的功能是将列表中的诗句按行写入文本文件

解析:【喵呜刷题小喵解析】:对于选项B,`f.write('\n'.join(s))`与`f.write(' '.join(s)+'\n')`的功能并不相同。前者是将列表中的每个元素(即每句诗)通过换行符('\n')连接成一个字符串,然后写入文件;而后者是将所有诗通过空格连接成一个字符串,并在最后加上一个换行符,然后写入文件。因此,选项B的说法是不正确的。

10、编写程序代码时,我们经常会犯错,对于Python的异常处理,描述正确的是?( )

A、可以用if…elif…else…进行异常处理

B、异常处理可以弥补程序漏洞,让程序在任何情况下都不会终止运行

C、通过异常处理语句,当程序输入错误时,仍可以让程序继续运行

D、当遇到错误语句时,将执行try代码块语句

解析:【喵呜刷题小喵解析】:在Python中,异常处理是通过try、except和finally语句来完成的。if...elif...else...语句是用来进行条件判断的,不是用来进行异常处理的,因此选项A不正确。异常处理虽然可以帮助我们处理程序中的错误,但不能保证程序在任何情况下都不会终止运行,因此选项B不正确。通过异常处理语句,当程序遇到错误时,可以执行相应的异常处理代码,而不是让程序终止运行,因此选项C是正确的。try代码块语句是在try语句块中执行的代码,当遇到错误时,会跳过try代码块,执行相应的异常处理代码,而不是执行try代码块语句,因此选项D不正确。

11、若scores=“9,7,8,9,6,5”,则list(scores)的结果是?( )

A、[9,7,8,9,6,5]

B、['9','7','8','9','6','5']

C、['9', ',', '7', ',', '8', ',', '9', ',', '6', ',', '5']

D、9,7,8,9,6,5

解析:【喵呜刷题小喵解析】题目中的`scores`是一个字符串,值为`"9,7,8,9,6,5"`。当我们使用`list(scores)`时,实际上是将这个字符串按照逗号`,`进行分割,得到一个列表。因此,`list(scores)`的结果是`['9', ',', '7', ',', '8', ',', '9', ',', '6', ',', '5']`,而不是`[9,7,8,9,6,5]`,因为字符串中的逗号也被分割出来了。所以,正确答案是C。

12、下列表达式的结果为True的是?( )

A、len("13"+"4")>14

B、ord(min("banana"))<65

C、sum([13,14,16])==53

D、any(["a","b","","d"])

解析:【喵呜刷题小喵解析】A. `len("13"+"4") > 14`这个表达式计算的是字符串"13"+"4"的长度,即"134"的长度,长度是3。因此,3不大于14,表达式为False。B. `ord(min("banana")) < 65``min("banana")`会返回"banana"中最小的字符,即"a"。`ord("a")`的值为97,显然97不小于65,因此表达式为False。C. `sum([13,14,16]) == 53`这个表达式计算的是列表[13,14,16]的和,即43。因此,43不等于53,表达式为False。D. `any(["a","b","","d"])``any()`函数会检查列表中的任何元素是否为True。在这个列表中,"a"、"b"、"d"都是非空字符串,因此至少有一个元素为True,表达式为True。

13、下列有关于函数的说法,正确的是?( )

A、bool( )函数是一个类型转换函数,用于将给定参数转换为布尔类型,若没有参数,则出错

B、ascii()函数和ord()函数功能都是返回一个数值类型的数据

C、filter()函数用于过滤序列,过滤不符合条件的元素,一般由两个参数组成,即函数和序列

D、map()函数主要用于画地图

解析:【喵呜刷题小喵解析】A项,bool()函数是一个类型转换函数,用于将给定参数转换为布尔类型,若参数为假值(如None、0、空字符串、空列表等),则返回False,否则返回True。但是,题目中说“若没有参数,则出错”是不准确的,因为bool()函数在没有参数时返回False。B项,ascii()函数用于返回字符串的ASCII码表示,返回一个字符串。ord()函数用于返回字符的ASCII码值,返回一个整数。两者功能并不相同,因此B项是错误的。C项,filter()函数用于过滤序列,过滤不符合条件的元素,一般由两个参数组成,即函数和序列。这是正确的描述。D项,map()函数主要用于对序列的每个元素应用一个函数,并返回一个新的序列。题目中说“主要用于画地图”是不准确的,因此D项是错误的。综上所述,正确答案是C。

14、下列表达中,和range(8)的结果相同的是?( )

A、range(0,8)

B、range(1,8)

C、range(0,8,2)

D、range(1,9)

解析:【喵呜刷题小喵解析】在Python中,`range()`函数用于生成一个整数序列。`range(8)`会生成从0开始到7(不包括8)的整数序列,即`[0, 1, 2, 3, 4, 5, 6, 7]`。选项A:`range(0,8)`同样会生成从0开始到7的整数序列,与`range(8)`的结果相同。选项B:`range(1,8)`会生成从1开始到7的整数序列,即`[1, 2, 3, 4, 5, 6, 7]`,与`range(8)`的结果不同。选项C:`range(0,8,2)`会生成从0开始,步长为2的整数序列,即`[0, 2, 4, 6]`,与`range(8)`的结果不同。选项D:`range(1,9)`会生成从1开始到8的整数序列,即`[1, 2, 3, 4, 5, 6, 7, 8]`,与`range(8)`的结果不同。因此,与`range(8)`的结果相同的是`range(0,8)`,即选项A。

15、已知x,y,z=map(int,[‘20’,‘2’,‘3’]),则表达式x+y+z的结果是?( )

A、程序出错

B、2023

C、21

D、25

解析:【喵呜刷题小喵解析】:根据题目中的描述,`x,y,z=map(int,[‘20’,‘2’,‘3’])`,我们需要先理解`map`函数和`int`函数的作用。`map`函数用于将一个函数应用于一个序列(或其他可迭代对象)的每个元素,并返回一个新的序列,包含应用函数后的结果。`int`函数用于将字符串转换为整数。在Python中,字符串不能直接用于`map`函数和`int`函数,因为`map`函数的第一个参数是一个函数,而`int`是一个内建函数,不能直接作为参数使用。同时,字符串`‘20’`并不是有效的Python字符串,应该是`'20'`。如果题目中的代码是`x,y,z=map(int,[20,2,3])`,那么`map`函数将`int`函数应用于列表`[20,2,3]`的每个元素,得到一个新的列表`[20,2,3]`。然后,`x,y,z`分别被赋值为这个新列表的前三个元素,即`x=20, y=2, z=3`。最后,表达式`x+y+z`的结果是`20+2+3=25`,所以正确答案是D选项。

16、《孙子算经》是我国古代重要的数学著作,其中有一题:"今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?"小王同学用Python编写了如下程序:
x=1
while x>0:
if not ( ):
x+=1
else:
print(x)
x+=1
关于上述程序,下列说法不正确的是?( )

A、把第一个x+=1改成break,则程序输出一个结果

B、括号内应填入的代码是x%3==2 and x%5==3 and x%7==2

C、该程序是个死循环

D、该程序将有无穷多个输出

解析:【喵呜刷题小喵解析】根据题目描述,我们需要找到一个数,这个数除以3余2,除以5余3,除以7余2。因此,括号内应填入的代码是`x%3==2 and x%5==3 and x%7==2`。程序从小数1开始,逐个检查每个数是否满足条件,如果找到满足条件的数,就输出这个数并退出循环。如果第一个`x+=1`改成`break`,那么程序在找到满足条件的数后就会立即退出循环,只输出一个结果。因此,选项A“把第一个x+=1改成break,则程序输出一个结果”是正确的。选项B括号内应填入的代码是`x%3==2 and x%5==3 and x%7==2`是正确的,但题目问的是关于上述程序的不正确说法,因此选项B不正确。选项C“该程序是个死循环”不正确,因为程序在找到满足条件的数后会退出循环。选项D“该程序将有无穷多个输出”也不正确,因为程序在找到满足条件的数后就会退出循环,只输出一个结果。因此,选项C和D都是不正确的说法。

17、下列关于二维数据的描述,正确的是?( )

A、二维数据就是由两个一维数据组成

B、二维数据由多个一维数据组成

C、二维数据的每一个一维数据之间,只能采用逗号进行分隔

D、二维数据不适合以表格的形式进行存储

解析:【喵呜刷题小喵解析】:二维数据是由多个一维数据组成的,而不是由两个一维数据组成,因此选项A错误。二维数据的每一个一维数据之间,可以采用逗号、空格、换行符等多种方式进行分隔,因此选项C错误。二维数据非常适合以表格的形式进行存储,因此选项D错误。因此,选项B“二维数据由多个一维数据组成”是正确的描述。

18、使用open函数打开某个CSV格式文件后,如果要将整个文件里的内容读取到一个列表中,需要使用以下文件对象的哪个函数?( )

A、read()

B、readline()

C、readlines()

D、flush()

解析:【喵呜刷题小喵解析】要读取整个文件的内容到一个列表中,需要使用文件对象的readlines()函数。这个函数会读取文件的所有行,并将它们作为一个列表返回。read()函数会读取整个文件的内容作为一个字符串返回,readline()函数只会读取文件的第一行,flush()函数通常用于强制写入缓冲的数据到文件中,而不是用于读取文件内容。因此,正确答案是C。

19、

abs()是Python的内置函数,执行abs(-1.00)语句返回的结果是?( )

A、-1.00

B、1

C、1.0

D、1.00

解析:【喵呜刷题小喵解析】在Python中,abs()函数用于返回数字的绝对值。对于负数,abs()函数会返回其正数形式。因此,执行abs(-1.00)语句返回的结果是1.0。所以,正确答案是C。

20、divmod()是Python的内置函数。对应变量x和y,divmod(y,x)返回的结果是?( )

A、(x//y, x%y)

B、(x%y, x//y)

C、(y//x, y%x)

D、(y%x,y//x)

解析:【喵呜刷题小喵解析】在Python中,`divmod()`函数接受两个参数,返回的是一个包含两个元素的元组,第一个元素是第一个参数除以第二个参数的商,第二个元素是第一个参数除以第二个参数的余数。因此,对于`divmod(y,x)`,返回的结果是`(y//x, y%x)`,即选项C。

21、在交互式编程环境下执行a = input(“请输入考试成绩:”)语句后,通过数字键盘输入数值89.5。输入完成后,查看变量a的数据类型,会是下列哪一种?( )

A、float

B、int

C、str

D、bool

解析:【喵呜刷题小喵解析】在交互式编程环境下,`input()`函数会将输入的内容转化为字符串类型。无论用户输入的是数字、字母还是其他字符,`input()`函数都会将其转化为字符串。因此,当执行`a = input("请输入考试成绩:")`语句后,通过数字键盘输入数值89.5,输入完成后,查看变量a的数据类型,会是字符串类型,即选项C。

22、执行print(list(range(4)))语句后,显示的结果是?( )

A、[0,1,2,3]

B、[1,2,3,4]

C、[0,0,0,0]

D、['' ,'' ,'' ,'' ]

解析:【喵呜刷题小喵解析】在Python中,`range(4)`函数会生成一个从0开始到3结束的整数序列,即[0, 1, 2, 3]。然后,`list()`函数将这个序列转化为列表。因此,执行`print(list(range(4)))`语句后,显示的结果是[0, 1, 2, 3],即选项A。

23、暴力破解是一种常见的网络攻击行为,它采用反复试错的方法去尝试破解用户的密码。这种黑客工具主要使用以下哪种算法进行设计?( )

A、枚举算法

B、解析算法

C、排序算法

D、对分查找算法

解析:【喵呜刷题小喵解析】:暴力破解是一种反复试错的方法去尝试破解用户的密码。而枚举算法是一种通过列举所有可能的情况来寻找解决方案的方法。在暴力破解中,黑客工具会尝试所有可能的密码组合,直到找到正确的密码,这与枚举算法的原理相似。解析算法、排序算法和对分查找算法都不是暴力破解所使用的主要算法。因此,正确答案是C,即排序算法。

24、

对一组数据"6,1,3,2,8"进行排序,按从小到大的顺序进行排列,使用冒泡算法进行编程,则第一轮过后,排序的结果是?( )

A、1,6,3,2,8

B、1,3,6,2,8

C、1,3,2,6,8

D、1,2,3,6,8

解析:【喵呜刷题小喵解析】冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。本题中,对一组数据"6,1,3,2,8"进行排序,按从小到大的顺序进行排列,使用冒泡算法进行编程,则第一轮过后,最大的数6会"冒泡"到最右边,排序的结果为"1,3,2,8,6",所以答案是C。

25、二进制数11110010转换为十六进制数是?( )

A、1502

B、152

C、F2

D、F02

解析:【喵呜刷题小喵解析】:二进制数11110010转换为十六进制数,首先将其分为4位一组,即1111 0010,然后分别转换为十六进制数。1111对应十六进制数F,0010对应十六进制数2,所以二进制数11110010转换为十六进制数是F2。因此,正确答案为C。

二、判断题

26、下列这段代码能够正常运行。对吗?( )while True :    a = input('请输入一个整数,若不是整数将会让你重新输入:  ' )    try:        b = int(a)    except:        print('你输入的不是整数!将返回重输。')    else:        print('你输入的是整数,程序结束。')        break

A 正确

B 错误

解析:【喵呜刷题小喵解析】:这段代码试图实现一个循环,要求用户输入一个整数。如果用户输入的不是整数,程序会提示用户重新输入。如果用户输入的是整数,程序会打印提示并结束。但是,这段代码中存在一些语法错误和逻辑问题。首先,代码中的注释和提示使用的是非标准的HTML标签,这些标签不会被Python解释器识别,所以它们并不会影响代码的执行,但是会导致代码的可读性变差。其次,代码中的`while True`将创建一个无限循环,这个循环会一直运行,直到被内部的`break`语句中断。但是,`break`语句是在`else`块中的,而`try/except/else`语句中的`else`块只在`try`块没有抛出异常时执行。由于`try`块中的`int(a)`会尝试将用户输入转换为整数,如果用户输入的不是整数,`int(a)`会抛出一个异常,导致`try`块执行失败,因此`else`块不会执行,`break`语句也不会被执行,程序将继续无限循环下去。因此,这段代码无法正常运行。所以,题目的陈述“下列这段代码能够正常运行”是错误的。因此,答案选择A是错误的。

27、一组有n个元素的数列,如采用顺序查找法找到数列中的某一个元素,平均查找次数为 (n+1)/2 次。( )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在顺序查找法中,我们从头开始查找,依次检查每一个元素,直到找到目标元素或者遍历完整个数列。对于含有n个元素的数列,最坏情况下需要查找n次(即当目标元素不在数列中时),而最好情况下只需要查找1次(即当目标元素在数列的第一个位置时)。因此,平均查找次数为(n+1)/2次。这是因为,从数列的第一个元素到最后一个元素,每个元素被查找的概率都是相同的,所以平均每次查找都会遍历数列的一半。因此,题目中的说法是正确的。

28、十进制数转十六进制数以后,位数一定变少了。( )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在十进制数转换为十六进制数的过程中,位数不一定会变少。这是因为转换的过程取决于十进制数的具体数值。如果十进制数很大,转换为十六进制数后,位数可能会增加。因此,说“十进制数转十六进制数以后,位数一定变少了”是不准确的,所以答案是B,即错误。

29、二进制数1101011011转换成十六进制数是35B。( )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:为了将二进制数转换为十六进制数,每4位二进制数对应1位十六进制数。对于二进制数1101011011,我们将其每4位进行划分,得到1101,0110,11。对应的十六进制数分别是D,6,3。因此,二进制数1101011011对应的十六进制数是363,而不是35B。所以,题目中的说法是错误的。

30、使用open()方法一定要保证关闭文件对象,即调用close()方法。( )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在Python中,使用`open()`方法打开文件后,确实需要确保在不再需要文件时关闭它,以防止资源泄漏。这是通过调用文件对象的`close()`方法来实现的。因此,该判断题是正确的。如果不关闭文件,可能会导致其他问题,如文件锁定、资源占用等。所以,使用`open()`方法打开文件后,一定要记得调用`close()`方法关闭文件。

31、file=open('fruits.csv','r')name=file.read().strip('\n').split(',')file.close()上述代码的功能是读取文件中的数据到列表。( )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:这段Python代码尝试从'fruits.csv'文件中读取数据。首先,使用`open`函数打开文件,模式为'r'表示只读。然后,`read()`函数读取文件的内容,`.strip('\n')`会去掉读取到的字符串末尾的换行符。接着,`split(',')`将字符串按逗号分割,得到一个列表。最后,`file.close()`关闭文件。这段代码的目的是读取文件中的数据,并将数据以列表的形式存储。所以,题目的描述是正确的,答案为A。然而,这段代码存在一个小错误,`file.close()`应该放在`split(',')`之前,因为`file`对象在`split(',')`之后就已经被用完了,再调用`file.close()`可能会引发错误。正确的代码应该是:```pythonfile = open('fruits.csv', 'r')name = file.read().strip('\n').split(',')file.close()```或者更简洁的方式:```pythonwith open('fruits.csv', 'r') as file:name = file.read().strip('\n').split(',')```使用`with`语句可以确保文件在操作完成后被正确关闭,即使在读取文件时发生错误也是如此。

32、a=['shanghai','beijing','tianjin','chongqing','hangzhou']with open ('city.csv','w')as f:f.write(','.join(a)+'\n')本段代码最后还缺少一条'f.close()'语句以关闭文件。( )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:这段Python代码是用来将一个字符串列表写入一个名为"city.csv"的文件。在这个过程中,已经使用了`with open`语句来打开文件,这种用法会自动处理文件的关闭,所以在代码的最后不需要再添加`f.close()`语句来关闭文件。因此,题目的陈述是错误的,答案选择B。

33、sort()与sorted()函数的区别在于前者默认是升序,后者默认是降序。( )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在Python中,`sort()`和`sorted()`函数都用于排序,但它们的行为和用途是不同的。`sort()`是列表的一个方法,它会直接修改原列表,使其按照升序排列,且没有返回值。而`sorted()`是一个内置函数,它会返回一个新的已排序的列表,原列表不会被修改。两者默认都是升序排序,没有降序排序的选项。因此,题目中的说法是错误的。

34、round()函数属于数学函数,可用于近似保留小数位数。( )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:round()函数是数学中的一个常用函数,它的主要作用是对数字进行四舍五入。这个函数可以指定保留的小数位数,从而实现近似计算。因此,round()函数确实可以用于近似保留小数位数,所以题目中的陈述是正确的。

35、sum()函数不仅可以对列表数据进行求和,也可以对元组数据进行求和。( )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:`sum()`函数在Python中用于计算序列(如列表或元组)中所有元素的和。因此,它不仅可以对列表数据进行求和,也可以对元组数据进行求和。所以,题目的说法是正确的。

三、编程题

36、某班级期中考试成绩汇总在文件"score.csv"中,包含了语文、数学、英语三科的分数,数据内容如下图显示:undefined

小明编写了如下程序,读取成绩文件中的数据,并分别计算语文、数学、英语三科成绩的平均分,请你补全代码。

import csv

ChineseNum=0

MathNum=0

EnglishNum=0

num=0

with open(‘/data/score.csv’,encoding=‘utf-8’) as csv_file:

row = csv.reader(csv_file, delimiter=‘,’)

next(row) # 读取首行

for r in row:

ChineseNum += float(++++)

MathNum += float(++++ )

EnglishNum += float(++++ )

num += ++++

print(“语文平均成绩是:%.2f”%(ChineseNum/num))

print(“数学平均成绩是:%.2f”%(MathNum/num))

print(“英语平均成绩是:%.2f”%(EnglishNum/num))

参考答案:

参考程序: import csv ChineseNum=0 MathNum=0 EnglishNum=0 num=0 with open(‘/data/score.csv’,encoding=‘utf-8’) as csv_file: row = csv.reader(csv_file, delimiter=‘,’) next(row) # 读取首行 for r in row: ChineseNum += float(r[0] ) MathNum += float**(** r[1] ) EnglishNum += float(r[2] ) num += 1 print(“语文平均成绩是:%.2f”%(ChineseNum/num)) print(“数学平均成绩是:%.2f”%(MathNum/num)) print(“英语平均成绩是:%.2f”%(EnglishNum/num))

解析:【喵呜刷题小喵解析】本题需要补全小明编写的程序,计算语文、数学、英语三科成绩的平均分。首先,我们打开文件"score.csv",然后使用csv.reader读取数据。由于题目中给出了数据内容,我们可以直接看到,每行数据包含了三个字段,分别是语文、数学、英语的分数,用逗号分隔。接着,我们初始化四个变量,ChineseNum、MathNum、EnglishNum和num,分别用来累加语文、数学、英语三科的分数和计算总人数。在循环中,我们使用r[0]、r[1]和r[2]分别获取每行数据的三个字段,即语文、数学、英语的分数,然后将它们分别累加到ChineseNum、MathNum和EnglishNum中。同时,我们将num加1,表示已经处理了一个学生的数据。最后,我们输出三科成绩的平均分,使用ChineseNum/num、MathNum/num和EnglishNum/num分别计算语文、数学、英语的平均分,并使用字符串格式化输出。

37、

新学期到了,学校接收了一批捐赠的图书,小明编写了一个简单的程序用来管理图书,并支持借阅功能。为了提高查找图书的效率,小明使用了二分查找法来设计图书借阅功能。以下是小明编写的图书借阅管理程序,请你补全代码。 library=dict() #用字典生成一个图书管理数据结构(字典的键为编号,字典的值为[‘书名’,本数]) #书籍入库 nums=len(library) #先计算图书编号总数 library[nums+1]=[‘红楼梦’,5] #在编号总数的基础上继续添加新书:library[新编号]=[‘书名’,本数] library[nums+2]=[‘西游记’,10] library[nums+3]=[‘水浒传’,5] library[nums+4]=[‘三国演义’,10] print(library) blist=list(library.keys()) #按书名借阅: bookname=input(‘请输入借阅图书名称:’) min_v = blist[0] max_v = blist[-1] turns=0 while min_v <= ++++: turns += 1 cur = (min_v + max_v)++++ print(cur) if library[cur][0] == ++++ : if library[cur][1] > 0: library[cur][1] -= ++++ print(‘《%s》借阅成功!’%bookname) else: print(‘抱歉,您选择的书籍已被借完!’) break elif blist[cur-1] > cur: min_v = ++++ else: max_v = ++++ print(“经过%d轮二分查找,完成图书的搜索。”%turns)

参考答案:

参考程序:

学校图书管理系统

library=dict() #用字典生成一个图书管理数据结构(字典的键为编号,字典的值为[‘书名’,本数])

书籍入库

nums=len(library) #先计算图书编号总数 library[nums+1]=[‘红楼梦’,5] #在编号总数的基础上继续添加新书:library[新编号]=[‘书名’,本数] library[nums+2]=[‘西游记’,10] library[nums+3]=[‘水浒传’,5] library[nums+4]=[‘三国演义’,10] print(library)

blist=list(library.keys())

按书名借阅:

bookname=input(‘请输入借阅图书名称:’)

min_v = blist[0] max_v = blist[-1] turns=0

while min_v <= max_v: turns += 1 cur = (min_v + max_v) **//**2 print(cur) if library[cur][0]==bookname: if library[cur][1] > 0: library[cur][1] -= 1 print(‘《%s》借阅成功!’%bookname) else: print(‘抱歉,您选择的书籍已被借完!’) break elif blist[cur -1] > cur: min_v = cur +1 else: max_v =cur -1 print(“经过%d轮二分查找,完成图书的搜索。”%turns)

解析:【喵呜刷题小喵解析】:该题目要求补全小明编写的图书借阅管理程序。小明使用二分查找法来查找图书,并实现了借阅功能。首先,小明创建了一个字典`library`来存储图书信息,字典的键为图书编号,值为一个包含书名和数量的列表。然后,小明定义了一个列表`blist`,用于存储图书编号。接下来,小明使用二分查找法来查找图书。在循环中,首先计算中间值`cur`,然后判断中间值对应的书名是否等于输入的书名。如果相等,再判断该书的数量是否大于0,如果大于0,则借阅成功,并更新书的数量;否则,提示该书已被借完。如果不相等,则根据中间值的位置来更新查找范围。最后,输出经过多少轮二分查找完成图书的搜索。注意,题目中的代码存在一些问题,例如,在`while`循环的条件中,应该使用`max_v`而不是`++①++`,`cur`的计算中应该使用`//`而不是`++②++`,`bookname`的比较中应该使用`bookname`而不是`++③++`,更新书的数量时应该使用`1`而不是`++④++`,更新查找范围时应该使用`cur + 1`和`cur - 1`而不是`++⑤++`和`++⑥++`。

38、

某班"天天向上"小组共有6个同学,姓名和身高数据分别存放在列表a中,编写程序实现小组同学按身高从高到低输出名单,运行结果如图所示: undefined 程序代码如下,请在划线处补充完整: a=[[“李洪全”,135],[“王倩倩”,154],[“吴乐天”,148],[“周立新”,165],[“鲁正”,158],[“杨颖颖”,150]] for i in range(1,len(a)): for j in range(0,++++): if a[j][1]++++ a[j+1][1]: a[j],a[j+1]=a[j+1],a[j] print(“小组名单是:”) for i in range(len(a)): print(++++ )

参考答案:

参考程序:

a=[[“李洪全”,135],[“王倩倩”,154],[“吴乐天”,148],[“周立新”,165],[“鲁正”,158],[“杨颖颖”,150]]

for i in range(1,len(a)):

for j in range(0, len(a)-i):

if a[j][1] < a[j+1][1]:

a[j],a[j+1]=a[j+1],a[j]

print(“小组名单是:”)

for i in range(len(a)):

print(a[i][0])

本题考查冒泡排序算法。从外循环看,6个元素排5趟,应该能全部排整齐。内循环每趟主要从第一个元素开始,相邻元素两两相比,i=1时,j最终取到4,i=2时,j最终取到3,i=3时,j最终取到2,i=2时,j最终取到1,i=1时,j最终取到0,由于range()的终值是取不到的,故第一空应填len(a)-i;根据题目从高到低的要求,若前一个数小于后一个数,则应将其往后移,故第二空应为"<";由输出结果观察可知,只需要输出排序后列表中的姓名部分,故第三空应填a[i][0]。

解析:【喵呜刷题小喵解析】本题考查冒泡排序算法。首先,我们需要理解题目中的列表a,它包含了6个同学的信息,每个同学的信息是一个包含姓名和身高的列表。为了按照身高从高到低输出名单,我们可以使用冒泡排序算法。冒泡排序的基本思想是:通过相邻元素两两比较和交换,使得每一趟排序后,最大的元素被“冒泡”到正确的位置。在程序中,外层循环控制排序的趟数,内层循环控制每趟排序中相邻元素的比较和交换。对于第一空,由于range()的终值是取不到的,所以第一空应填len(a)-i。对于第二空,根据题目从高到低的要求,若前一个数小于后一个数,则应将其往后移,所以第二空应为"<"。对于第三空,由输出结果观察可知,只需要输出排序后列表中的姓名部分,所以第三空应填a[i][0]。

喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:2023月05月Python三级理论答案及解析

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share