问题描述:
python计算机二级选择题汇总14(易混淆)
问题解答:
有些函数比如ls.remove()、sorted( )返回值是新的一个列表还是旧的列表,需要搞清楚。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
问题描述:
4、I/O方式中的程序查询方式是指()。
A.在程序执行前系统首先检查该程序运行中所需要的I/O设备是否准备好
B.当CPU需要执行I/O操作时,程序将主动查间I/O设备是否准备好
C.用程序启动I/O设备
D.用程序检查系统中I/O设备的好坏
问题解答:
在I/O方式中,程序查询方式的具体含义是:当CPU需要执行I/O操作时,程序将主动查询I/O设备是否准备好。如果设备已经准备好,CPU会执行I/O操作;如果设备还未准备好,CPU会持续查询并等待设备准备好后再执行I/O操作。
对照给出的选项:
A. 在程序执行前系统首先检查该程序运行中所需要的I/O设备是否准备好 - 这并不是程序查询方式的定义。
B. 当CPU需要执行I/O操作时,程序将主动查询I/O设备是否准备好 - 这正是程序查询方式的定义。
C. 用程序启动I/O设备 - 这并不准确描述程序查询方式的核心。
D. 用程序检查系统中I/O设备的好坏 - 这同样不是程序查询方式的定义。
因此,这道题的答案是B选项:当CPU需要执行I/O操作时,程序将主动查询I/O设备是否准备好。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6、I/O方式中的程序中断方式是指()。
A.当出现异常情况时,计算机将停机
B.当出现异常情况时,计算机将启动I/O设备
C当出现异常情况时,CPU暂时停止当前程序的运行,转向执行相应的服务程序
D.当出现异常情况时,CPU将终止当前程序的运行
在I/O方式中,程序中断方式的具体含义是:当出现异常情况或者特殊情况时,CPU暂时停止当前程序的运行,转而执行对这些异常情况或者特殊情况进行处理的程序,处理结束之后再返回到现行程序的断点处继续运行。
对照给出的选项:
A. 当出现异常情况时,计算机将停机 - 这并不准确描述程序中断方式。
B. 当出现异常情况时,计算机将启动I/O设备 - 这并不是程序中断方式的定义。
C. 当出现异常情况时,CPU暂时停止当前程序的运行,转向执行相应的服务程序 - 这正是程序中断方式的定义。
D. 当出现异常情况时,CPU将终止当前程序的运行 - 这与程序中断方式略有不同,因为中断后CPU会返回到原程序的断点处继续运行。
因此,这道题的答案是C选项:当出现异常情况时,CPU暂时停止当前程序的运行,转向执行相应的服务程序。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
8、下列叙述中正确的是()。
A进程一旦创建,即进入就绪状态
B.进程一旦进入运行状态,就会一直运行下去直到终止
C处于阻塞状态的进程,当阻塞原因解除后即进入运行状态
D进程在运行状态下,如果时间片用完,即进入阻塞状态
这道题的正确答案是A。
下面是对各个选项的解释:
A. 进程一旦创建,即进入就绪状态
- 正确。在操作系统中,当一个进程被创建后,它通常会进入就绪状态,等待被调度器分配CPU资源来执行。
B. 进程一旦进入运行状态,就会一直运行下去直到终止
- 错误。进程在运行状态下可能会被操作系统中断,以便其他进程也能获得CPU时间,这种机制通常称为时间片轮转调度。此外,进程也可能因为I/O操作或其他原因而进入阻塞状态。
C. 处于阻塞状态的进程,当阻塞原因解除后即进入运行状态
- 错误。处于阻塞状态的进程在阻塞原因解除后会进入就绪状态,而不是直接进入运行状态。它需要等待CPU调度器再次分配CPU时间。
D. 进程在运行状态下,如果时间片用完,即进入阻塞状态
- 错误。当时间片用完后,进程会被操作系统放回就绪队列,进入就绪状态,而不是进入阻塞状态。只有在需要等待某些事件(如I/O操作完成)时,进程才会进入阻塞状态。
因此,正确答案是A。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
9、下列叙述中正确的是( )。
A.虚拟存储器是对主存的扩展
B.虚拟存储器空间大小取决于CPU的运算速度
C.虚拟存诸器属于外存储器
D.虚拟存储器是对外存的扩展
这道题的正确答案是A。
下面是对各个选项的解释:
A. 虚拟存储器是对主存的扩展
- 正确。虚拟存储器是一种内存管理技术,通过使用硬盘(外存储器)的一部分来扩展主存储器(RAM)的容量,使得系统可以运行比物理内存更大的程序。它让程序员感觉有更大的内存空间可以使用,虽然实际的物理内存是有限的。
B. 虚拟存储器空间大小取决于CPU的运算速度
- 错误。虚拟存储器的大小主要取决于操作系统和硬件架构的设计,例如地址总线的位数,而不是CPU的运算速度。
C. 虚拟存储器属于外存储器
- 错误。虚拟存储器本身不是一种存储设备,而是一种内存管理技术。它利用外存储器(如硬盘)的一部分,但虚拟存储器的概念和实现涉及的是主存储器的扩展。
D. 虚拟存储器是对外存的扩展
- 错误。虚拟存储器是对主存的扩展,而不是对外存的扩展。它使用外存来扩展主存的容量,但核心目的是扩展主存,而不是扩展外存。
因此,正确答案是A。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
10、下面关于多道程序环境下特点描述正确的是()。
A进程调度负责所有系统资源的分配
B.各进程之间不存在相互制约关系
C程序和计算机执行程序的活动不再一一对应
D.各进程被创建的顺序与各进程终止的顺序是一致的
这道题的正确答案是C。
下面是对各个选项的解释:
A. 进程调度负责所有系统资源的分配
- 错误。进程调度负责CPU时间的分配,但不负责所有系统资源的分配。其他资源的分配,如内存、I/O设备等,通常由不同的子系统或管理模块负责。
B. 各进程之间不存在相互制约关系
- 错误。在多道程序环境中,进程之间往往存在相互制约关系,例如同步和互斥。一个进程可能需要等待另一个进程释放某些资源才能继续执行。
C. 程序和计算机执行程序的活动不再一一对应
- 正确。在多道程序环境下,多个程序可以同时在一个CPU上执行(通过时间共享),因此程序和计算机执行程序的活动不再一一对应。一个物理CPU可以在不同时间片执行不同的进程。
D. 各进程被创建的顺序与各进程终止的顺序是一致的
- 错误。进程的创建和终止顺序不一定一致。一个进程可以在其他进程之前或之后被创建和终止,取决于它们的执行时间和资源需求。
因此,正确答案是C。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
14、表达式str(10/2)的结果是()。
A.'10/2'
B.'5
C.ValueError
D.'5.0'
表达式 str(10/2)
的结果是 D. '5.0'
。
解释如下:
10/2
进行除法运算,结果是 5.0(浮点数)。str(5.0)
将浮点数 5.0 转换为字符串,因此结果是'5.0'
。
因此,选项 D '5.0'
是正确答案。
除非用整除"//"最终结果是5。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19、以下程序的输出结果是()。
import string
y1='a'
y2='asdf'
print(y1 in string.printable,y2 in string.printable)
A.False False
B.False True
C.True False
D.True True
string.printable:包含所有可打印字符的字符串,可打印字符为单个字符,包括数组 0-9,字符a-z等,不包括字符串,所以输出结果为True Flase。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
25、关于Python函数的描述错误的是( )。
A.函数内部修改全局变量必须用global声明
B.Python函数可以没有return语句,此时返回值为None
C.Python函数支持用名称传递参数
D.Python支持可选参数传递,但没有默认值的参数必须定义在有默认值参数的左侧
Python中,根据实际参数的类型不同,函数参数的传递方式可分为2种,分别为值传递和引用(地址)传递:1、值传递:适用于实参类型为不可变类型(字符串、数字、元组);2、引用(地址)传递:适用于实参类型为可变类型(列表,字典)。两种方法中不包括名称传递参数。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
26、以下程序的输出结果是( )
def func(x =[],y=[6,7]):
x.append(8)
y.append(8)
return(x+y)
a,b=[1,2],[3,4]
t=func(x=a)
t=func(y=b)
print(func(),end=";")
A.[8,6,7,8,8]
B.[8,8,6,7,8,8]
C.[8,8,6,7,8,8]
D.[8,6,7,8,8]
这道题,不要太关注t的变化,而是要时刻关注x,y的变换。append会导致x,y一直在变化。
推理如下:第一步,把x=a=[1,2]传入,y=[6,7],得到:a=[1,2,8],y=[6,7,8]。第二步,把y=[3,4]传进去,x=[8],b=[6,7,8]。第三步,把x=[8],y=[6,7,8]传入,得到[8,8,6,7,8,8]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
27、以下程序的输出结果是( )。
def mysort(ss,flag):
if flag:
return(sorted(ss,reverse = True))
else:
return(sorted(ss,reverse = False))
ss=[1,2,4,3]
print(mysort(ss,-1))
A.[3,4,2,1]
B.[1,2,3,4
C.[4,3,2,1]
D.[1,2,4,3]
分析,刚开始我觉得reverse=False,应该是升序,而事实上结果是降序。
在代码中,flag
参数的值为 -1
,在 Python 中,任何非零数值都被视为 True
,所以 if flag:
条件为真。因此,你的函数调用实际上等同于 mysort(ss, True)
,会返回一个降序排列的列表。
如果你想要升序排序,你可以将 flag
参数设为 0
或 False
,或者在调用函数时明确指定 flag=False
。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
选D
其他选项的输出如下所示,具体解释如下一篇博文所示。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
当列表长度是变换的时候、用i来遍历列表,这时遍历次数极其容易出错。
分析
-
初始化和第一个迭代:
- 初始列表:
ss = [2, 3, 6, 9, 7, 1]
- 第一个元素
i = 2
min(ss)
是 1ss.remove(1)
之后,列表变为[2, 3, 6, 9, 7]
- 打印
min(ss)
,输出2
- 初始列表:
-
第二个迭代:
- 当前列表:
[2, 3, 6, 9, 7]
- 第二个元素
i = 3
min(ss)
是 2ss.remove(2)
之后,列表变为[3, 6, 9, 7]
- 打印
min(ss)
,输出3
- 当前列表:
-
第三个迭代:
- 当前列表:
[3, 6, 9, 7]
- 第三个元素
i = 9
min(ss)
是 3ss.remove(3)
之后,列表变为[6, 9, 7]
- 打印
min(ss)
,输出6
- 当前列表:
为什么只遍历了3次?
在 Python 中,当你在循环中修改列表的长度时,会导致一些意想不到的行为。让我们看看具体发生了什么:
- 当你开始
for
循环时,Python 创建了一个迭代器来遍历列表ss
。 - 初始列表
ss
有 6 个元素,因此迭代器会计划遍历 6 次。 - 然而,每次迭代中,你都会调用
ss.remove(min(ss))
,这会修改列表的长度。
在你每次调用 remove
时,列表长度减少 1。但是,迭代器并不知道列表的长度已经改变,仍然基于原始列表长度进行迭代。因为你总是删除最小的元素,列表的剩余部分也在发生变化,导致最终的迭代次数减少。
在第三次迭代后,列表变为 [6, 9, 7]
,原本的第四个元素 9
现在变成了第二个元素。原来的第五个元素 7
现在变成了第三个元素。当 i
到达原本的第四个位置时,列表已经减少,因此迭代结束。
————————————————————————————————————
更详细的逐步调试:
-
初始列表:
ss = [2, 3, 6, 9, 7, 1]
- 迭代开始,列表有 6 个元素,计划遍历 6 次。
-
第一次迭代:
- 当前列表:
[2, 3, 6, 9, 7, 1]
i = 2
ss.remove(1)
,列表变为[2, 3, 6, 9, 7]
- 打印
2
- 当前列表:
-
第二次迭代:
- 当前列表:
[2, 3, 6, 9, 7]
i = 3
ss.remove(2)
,列表变为[3, 6, 9, 7]
- 打印
3
- 当前列表:
-
第三次迭代:
- 当前列表:
[3, 6, 9, 7]
i = 6
ss.remove(3)
,列表变为[6, 9, 7]
- 打印
6
- 当前列表:
由于每次移除最小元素,列表变短了,导致迭代器遍历的实际元素比最初计划的少。列表长度减少后,迭代器的行为就和预期的有差异。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
38、关于Pyinstaller_工具,下列说法正确的是( )
A.只能处理UTF-8编码形式的Python源文件
B生成单独的可执行文件时,图片等文件资源不能一并打包到可执行文件中
C能生成带有动态链接库的可执行文件
D不能为生成的可执行文件指定图标
使用pyinstaller库对源文件打包非常简单,在cmd中输入pyinstaller Python.文件名就可以,执行后,py文件所在目录将生成dist和build两个文件。其中build文件夹中保存的是临时文件目录可以安全删除。最终的打包程序在dst文件夹中。但是要注意源文件中必须是utf-8编码。
标准答案选的A,为什么读起来感觉C是正确的呢。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++