一、单选题
- 答案:C
- 解析:在
try
块中,a ** b
尝试对字符串'2'
和'4'
进行指数运算,这是不允许的,会引发类型错误,所以会执行except
块中的代码,打印'程序出错!'
。
- 解析:在
- 答案:A
- 解析:
enumerate
函数会将可迭代对象(这里是列表aa
)组合为索引序列,返回一个包含索引和对应元素的元组列表。所以list(enumerate(aa))
会得到[(0, '春'), (1, '夏'), (2, '秋'), (3, '冬')]
。
- 解析:
- 答案:D
- 解析:
min(s)
返回字符串s
中的最小字符'1'
,max(s)
返回字符串s
中的最大字符'9'
,min(s) + max(s)
相当于'1' + '9'
,结果为'19'
。
- 解析:
- 答案:C
- 解析:要将字符串写入文件,应该使用文件对象的
write
方法,f.write('Hello Tom!')
可以将字符串'Hello Tom!'
写入文件。A选项f.write(['Hello'], [Tom!])
的参数格式错误;B选项f.read('Hello', 'Tom!')
是用于读取文件内容,而不是写入;D选项f.read('Hello Tom!')
也是读取操作,不符合要求。
- 解析:要将字符串写入文件,应该使用文件对象的
- 答案:C
- 解析:A选项
int('16', 10)
将十进制字符串'16'
转换为十进制整数,结果为16;B选项int('110', 2)
将二进制字符串'110'
转换为十进制整数,计算结果为(1×22 + 1×21 + 0×20 = 6);C选项int('11', 16)
将十六进制字符串'11'
转换为十进制整数,计算结果为(1×161 + 1×160 = 17);D选项int('1111', 2)
将二进制字符串'1111'
转换为十进制整数,计算结果为(1×23 + 1×22 + 1×21 + 1×2^0 = 15)。所以最大的数值是C选项。
- 解析:A选项
- 答案:A
- 解析:十六进制数转换为二进制数的方法是将每一位十六进制数转换为对应的4位二进制数。十六进制数
7E
中,7
转换为二进制是0111
,E
(即14)转换为二进制是1110
,所以7E
转换为二进制数是01111110
,共7位。
- 解析:十六进制数转换为二进制数的方法是将每一位十六进制数转换为对应的4位二进制数。十六进制数
- 答案:B
- 解析:
int('13', 8)
表示将八进制字符串'13'
转换为十进制整数,计算方法为(1×81 + 3×80 = 11)。
- 解析:
- 答案:B
- 解析:A选项,程序确实是按行读取文本文件中的内容,并将每行内容作为一个元素添加到列表
res
中,功能描述正确;B选项,readlines
方法用于读取文件的所有行并返回一个包含每行内容的列表,这里用法正确,如果改成readline
只能读取一行内容,不符合程序功能需求,所以该选项说法错误;C选项,从代码中可以看出文件是直接通过文件名打开的,没有指定路径,通常情况下会在程序代码文件所在的文件夹下查找文件,所以该文本文件和程序代码文件在同一文件夹下的说法合理;D选项,'r'
模式是以只读方式打开文件,不允许修改文件内容,描述正确。
- 解析:A选项,程序确实是按行读取文本文件中的内容,并将每行内容作为一个元素添加到列表
- 答案:B
- 解析:A选项,写入文本文件的一般步骤确实是打开文件、写入内容、关闭文件,描述正确;B选项,
f.write('\n'.join(s))
会将列表s
中的元素用换行符连接后写入文件,而f.write(' '.join(s)+'\n')
会将列表s
中的元素用空格连接后再加上换行符写入文件,两者功能不同,该选项说法错误;C选项,write
方法的参数是一个字符串,writelines
方法的参数可以是字符串列表(或其他可迭代的字符串序列),描述正确;D选项,代码通过'\n'.join(s)
将列表中的诗句用换行符连接后写入文件,实现了将列表中的诗句按行写入文本文件的功能,描述正确。
- 解析:A选项,写入文本文件的一般步骤确实是打开文件、写入内容、关闭文件,描述正确;B选项,
- 答案:C
- 解析:A选项,
if…elif…else…
主要用于条件判断,而不是专门的异常处理结构;B选项,异常处理可以使程序在遇到异常时采取相应措施,避免程序因异常而突然终止,但不能保证程序在任何情况下都不会终止运行,例如遇到无法处理的严重系统错误等情况;C选项,通过异常处理语句,当程序输入错误等异常情况发生时,可以捕获异常并进行处理,让程序继续执行后续可能的操作,而不是直接崩溃,描述正确;D选项,当遇到错误语句时,程序会先尝试执行try
代码块中的语句,如果发生异常则根据异常类型判断是否与except
块匹配,若匹配则执行except
块中的语句,而不是直接执行try
代码块语句(如果错误导致try
块中的语句无法正常执行下去,则会中断try
块的执行并跳转到相应的except
块)。
- 答案:C
- 解析:
list(scores)
会将字符串scores
中的每个字符作为一个元素创建列表,因为字符串scores = "9,7,8,9,6,5"
,所以结果为['9', ',', '7', ',', '8', ',', '9', ',', '6', ',', '5']
。
- 答案:D
- 解析:A选项,
len("13" + "4") = len("134") = 3
,不大于14,结果为False
;B选项,min("banana")
返回字符串'banana'
中的最小字符'a'
,ord('a') = 97
,不小于65,结果为False
;C选项,sum([13, 14, 16]) = 43
,不等于53,结果为False
;D选项,any(["a", "b", "", "d"])
只要列表中有一个元素为True
(非空字符串在布尔上下文中为True
),则返回True
,这里列表中有非空字符串,所以结果为True
。
- 答案:C
- 解析:A选项,
bool
函数在没有参数时,返回False
,而不是出错;B选项,ascii
函数返回一个表示对象的可打印字符串,ord
函数返回字符的ASCII码值,功能不同;C选项,filter
函数用于过滤序列,根据指定的函数条件过滤掉不符合条件的元素,一般由两个参数组成,即函数和序列,描述正确;D选项,map
函数用于对可迭代对象中的每个元素应用指定的函数,而不是画地图。
- 答案:A
- 解析:
range(8)
等价于range(0, 8)
,表示生成一个从0开始(包含)到8结束(不包含)的整数序列。B选项range(1, 8)
生成的序列是从1开始到7结束;C选项range(0, 8, 2)
生成的序列是0, 2, 4, 6;D选项range(1, 9)
生成的序列是从1开始到8结束。
- 答案:D
- 解析:
map(int, ['20', '2', '3'])
会将列表中的每个字符串元素转换为整数,然后将转换后的整数分别赋值给x
、y
、z
,即x = 20
,y = 2
,z = 3
,所以x + y + z = 20 + 2 + 3 = 25
。
- 答案:A
- 解析:A选项,如果把第一个
x += 1
改成break
,那么当找到第一个满足条件的x
时就会跳出循环,程序只会输出一个结果,而不是像原程序那样不断寻找所有满足条件的数,所以该选项说法正确;B选项,括号内应填入的代码是x % 3 == 2 and x % 5 == 3 and x % 7 == 2
,用于判断x
是否满足“三三数之剩二,五五数之剩三,七七数之剩二”的条件,该选项说法正确;C选项,原程序中while x > 0
且x
在循环中不断增加,没有终止条件,所以是个死循环,该选项说法正确;D选项,由于是死循环且不断寻找满足条件的数,所以会有无穷多个输出,该选项说法正确。本题要求选择说法不正确的选项,所以答案是A。
- 答案:B
- 解析:A选项,二维数据不仅仅是由两个一维数据组成,它可以由多个一维数据组成;B选项,二维数据由多个一维数据组成,描述正确;C选项,二维数据的每一个一维数据之间可以采用多种方式分隔,不一定只能用逗号,例如在某些情况下可以用制表符等;D选项,二维数据很适合以表格的形式进行存储,这样可以清晰地表示行和列的数据关系。
- 答案:C
- 解析:
read
方法用于读取文件的全部内容并返回一个字符串;readline
方法用于读取文件的一行内容;readlines
方法用于读取文件的所有行并返回一个包含每行内容的列表,所以如果要将整个文件里的内容读取到一个列表中,应该使用readlines
方法;flush
方法用于刷新文件缓冲区,与读取文件内容到列表无关。
- 答案:C
- 解析:
abs(-1.00)
返回-1.00
的绝对值,结果为1.0(浮点数形式)。A选项-1.00
是原数,不是绝对值;B选项1是整数形式,这里结果应该是浮点数1.0;D选项1.00虽然数值正确,但通常abs
函数返回的浮点数形式为1.0。
- 答案:C
- 解析:
divmod(y, x)
返回的结果是(y // x, y % x)
,即y
除以x
的商和余数。A选项(x // y, x % y)
顺序错误;B选项(x % y, x // y)
顺序错误;D选项(y % x, y // x)
顺序错误。
- 答案:C
- 解析:
input
函数返回用户输入的内容,无论用户输入的是数字还是其他字符,都以字符串形式返回。所以输入89.5后,a
的数据类型是str
。
- 答案:A
- 解析:
range(4)
生成的序列是[0, 1, 2, 3]
,list(range(4))
将其转换为列表,结果为[0, 1, 2, 3]
。
- 答案:A
- 解析:暴力破解通过反复尝试各种可能的密码来进行破解,这种方法是列举所有可能的情况,属于枚举算法。解析算法是用数学公式或表达式来解决问题;排序算法用于对数据进行排序;对分查找算法要求数据有序,且不适合用于密码破解这种情况(因为密码空间通常很大,无法预先确定有序范围)。
- 答案:C
- 解析:冒泡排序的第一轮会比较相邻的元素,如果顺序不对则交换。原始列表
"6,1,3,2,8"
,第一轮比较过程为:比较6和1,交换得到"1,6,3,2,8"
;比较6和3,交换得到"1,3,6,2,8"
;比较6和2,交换得到"1,3,2,6,8"
;比较6和8,不交换。所以第一轮过后排序的结果是"1,3,2,6,8"
。
- 答案:C
- 解析:二进制数转换为十六进制数的方法是从右到左每4位一组,不足4位在左边补0,然后将每组二进制数转换为对应的十六进制数。二进制数
11110010
可分为1111 0010
,对应的十六进制数为F2
。
二、判断题
- 答案:正确
- 解析:这段代码的功能是不断要求用户输入一个整数,直到用户输入正确的整数为止。在
try
块中尝试将用户输入转换为整数,如果转换成功则执行else
块并结束程序,如果转换失败则执行except
块提示用户重新输入,while True
循环会一直执行直到遇到break
语句,所以代码能够正常运行。
- 解析:这段代码的功能是不断要求用户输入一个整数,直到用户输入正确的整数为止。在
- 答案:正确
- 解析:在顺序查找法中,平均查找次数的计算公式为((n + 1) / 2),其中
n
是数列中的元素个数。这是因为在最坏情况下,需要查找n
次才能找到元素(元素在最后一个位置),在最好情况下,只需要查找1次(元素在第一个位置),平均下来就是((n + 1) / 2)次。
- 解析:在顺序查找法中,平均查找次数的计算公式为((n + 1) / 2),其中
- 答案:错误
- 解析:十进制数转十六进制数后,位数不一定变少。例如十进制数10转换为十六进制是
0xA
,位数没有变化;十进制数100转换为十六进制是0x64
,位数也没有变少;只有当十进制数比较大且十六进制表示相对简洁时,位数才可能变少,但不是绝对的。
- 解析:十进制数转十六进制数后,位数不一定变少。例如十进制数10转换为十六进制是
- 答案:正确
- 解析:二进制数
1101011011
转换为十六进制数,从右到左每4位一组,可分为0011 0101 1011
,对应的十六进制数为35B
。
- 解析:二进制数
- 答案:正确
- 解析:使用
open
函数打开文件后,为了确保文件资源被正确释放,避免数据丢失或其他问题,应该在操作完成后调用close
方法关闭文件。虽然在某些情况下(如使用with
语句)可以自动管理文件的关闭,但显式调用close
方法是一种良好的编程习惯,尤其是在不使用with
语句等自动管理机制时,必须手动关闭文件。
- 解析:使用
- 答案:正确
- 解析:这段代码首先以只读方式打开
fruits.csv
文件,然后使用read
方法读取文件内容,strip
方法去除字符串两端的换行符,split
方法以逗号为分隔符将字符串分割成列表,最后关闭文件,实现了将文件中的数据读取到列表中的功能。
- 解析:这段代码首先以只读方式打开
- 答案:错误
- 解析:使用
with
语句打开文件时,当with
块结束时,文件会自动关闭,不需要显式调用f.close()
方法。所以代码中不缺少关闭文件的语句,这段代码在文件操作的资源管理方面是正确的。
- 解析:使用
- 答案:错误
- 解析:
sort
方法和sorted
函数都可以用于对列表进行排序,它们的默认排序顺序都是升序。sort
方法会直接对原列表进行排序,而sorted
函数会返回一个新的排好序的列表,原列表不变。
- 解析:
- 答案:正确
- 解析:
round
函数属于数学函数,用于对浮点数进行近似保留小数位数的操作。例如round(3.14159, 2)
会将3.14159保留两位小数,结果为3.14。
- 解析:
- 答案:正确
- 解析:
sum
函数可以对可迭代对象(如列表、元组等)中的元素进行求和操作,只要可迭代对象中的元素是数值类型(如整数、浮点数等)。例如sum([1, 2, 3])
会计算列表中元素的和为6,sum((4, 5, 6))
会计算元组中元素的和为15。
三、编程题
-
计算平均分
- 思路:首先使用
csv
模块打开score.csv
文件,读取文件中的数据(跳过标题行)。然后循环遍历每一行数据,将语文、数学、英语成绩分别转换为浮点数并累加到对应的变量中,同时记录行数。最后计算各科成绩的平均分并输出。
- 思路:首先使用
-
图书借阅管理
- 思路:首先创建一个图书管理字典
library
,并添加一些图书信息。然后获取图书管理字典的所有键(图书编号)并转换为列表blist
。接着通过二分查找算法,根据用户输入的图书名称在blist
中查找对应的图书编号。在查找过程中,不断调整查找范围(min_v
和max_v
),直到找到图书或确定图书不存在。如果找到图书且有库存,则借阅成功,库存减1;如果图书已无库存,则提示借阅失败。最后输出查找过程中使用的二分查找轮数。
- 思路:首先创建一个图书管理字典
-
身高排序
- 思路:使用冒泡排序算法对学生名单按照身高从高到低进行排序。外层循环控制排序的轮数,内层循环用于比较相邻元素的身高,如果前面的学生身高小于后面的学生身高,则交换他们的位置(包括姓名和身高信息)。最后循环输出排序后的学生名单。