第5单元检测卷
第5单元检测卷 - 题目、答案与解析
一、单项选择题
-
题目:可以将字符串“123”转换为整数的是 ( )
- A. str()
- B. float()
- C. int()
- D. eval()
答案:C
解析:int()是Python的内置函数,用于将一个数字或字符串转换为整数。int("123")会返回整数123。str()用于转换为字符串,float()用于转换为浮点数,eval()会执行字符串中的表达式(eval("123")也返回123,但其主要功能是求值,不是类型转换)。 -
题目:代码
max(1,3,4,-9,11)+1运行的结果是 ( )- A.2
- B.4
- C. -9
- D. 12
答案:D
解析:max()函数返回给定参数中的最大值。在1, 3, 4, -9, 11中,最大值是11。然后执行11 + 1,最终结果是12。 -
题目:用于对若干个数值进行求和的函数是 ( )
- A. sum
- B. max
- C. sqrt
- D. abs
答案:A
解析:sum()是Python的内置函数,用于对一个可迭代对象(如列表、元组)中的所有元素进行求和。max()求最大值,sqrt()是math模块中的函数用于求平方根,abs()求绝对值。 -
题目:代码
random. randint(10,37)运行可能产生的结果是 ( )- A.0
- B.4
- C.39
- D.11
答案:D
解析:random.randint(a, b)函数返回一个随机的整数N,满足a <= N <= b。因此,random.randint(10, 37)可能产生的结果范围是10到37(包含10和37)。在选项中,只有11落在这个区间内。 -
题目:代码
random. uniform(3.1,7.3)运行不可能产生的结果是 ( )- A.3.1
- B.4.4
- C.6.0
- D.7.3
答案:D
解析:random.uniform(a, b)函数返回一个随机的浮点数N,满足a <= N < b。注意,它包含下限a,但不包含上限b。因此,random.uniform(3.1, 7.3)可能产生的结果范围是[3.1, 7.3)。7.3是上限,是不可能产生的结果。 -
题目:函数
pow(2,3)运行产生的结果是 ( )- A.2
- B.8
- C.3
- D.6
答案:B
解析:pow(x, y)是Python的内置函数,用于计算x的y次幂。pow(2, 3)即计算2的3次方,结果是2 * 2 * 2 = 8。 -
题目:在Python中除了内置函数不需要导入,其他模块的函数均需要使用 关键字先导入相应的模块或库才可以使用。 ( )
- A. with
- B. import
- C. def
- D. from
答案:B
解析:import关键字是Python中用于导入模块的标准语句。例如,要使用math模块中的sqrt函数,需要先执行import math,然后通过math.sqrt()来调用。with用于上下文管理,def用于定义函数,from通常与import连用(如from math import sqrt),单独使用不是导入模块的关键字。 -
题目:函数在传递过程中可以有多个参数,参数之间使用 分隔。 ( )
- A.:
- B./
- C.,
- D.#
答案:C
解析:在Python中,定义函数或调用函数时,如果有多个参数,参数之间需要使用逗号(,)进行分隔。例如,def my_func(a, b):或my_func(1, 2)。 -
题目:下列 random 模块中的函数不需要填写参数的是 ( )
- A. random
- B. choice
- C. randint
- D. uniform
答案:A
解析:random.random()函数用于生成一个[0.0, 1.0)范围内的随机浮点数,它不需要任何参数。random.choice(seq)需要传入一个序列seq,random.randint(a, b)需要传入两个整数a和b,random.uniform(a, b)需要传入两个数字a和b。 -
题目:time模块中的 time()函数的返回值的单位是 ( )
- A.天
- B.时
- C.分
- D.秒
答案:D
解析:time.time()函数返回自纪元(1970年1月1日00:00:00 UTC)以来的秒数,是一个浮点数。因此,其单位是秒。 -
题目:函数
time. localtime()的返回值是一个表示本地时间的时间元组,那么该元组的第一个元素表示的是 ( )- A.年
- B.月
- C.日
- D.时
答案:A
解析:time.localtime()返回一个struct_time对象(类似元组),其索引0对应的元素是年份(year),索引1是月份(month),索引2是日(day),以此类推。 -
题目:可以使用 关键字创建自定义函数。 ( )
- A. function
- B. def
- C. main
- D. try
答案:B
解析:在Python中,def是定义(define)函数的关键字。函数定义的基本语法是def function_name(parameters):。 -
题目:下列关于 Python函数的返回值的说法,正确的是 ( )
- A.函数必须使用 return 返回值
- B.函数如果没有 return,则返回 None
- C.函数只能返回一个值
- D.函数不能返回 None
答案:B
解析:- A: 错误。函数可以没有
return语句。 - B: 正确。如果一个函数没有执行到
return语句,或者return后面没有跟任何值,那么该函数默认返回None。 - C: 错误。Python函数可以通过返回一个元组或列表来间接返回多个值,例如
return a, b实际上是返回了一个元组(a, b)。 - D: 错误。函数可以显式地
return None,或者如B所述,没有return时也返回None。
-
题目:下列代码的输出内容是 ( )
def add(a , b=2): return a+b print(add(3))- A.5
- B.3
- C.报错
- D. None
答案:A
解析:函数add定义了两个参数a和b,其中b有一个默认值2。调用add(3)时,只传递了一个参数3,它会被赋给a,而b则使用默认值2。因此,函数内部计算3 + 2,返回5,print函数输出5。 -
题目:下列自定义函数中,语法格式正确的是 ( )
- A.
def sum(a,b): return a+b print(sum(1,3)) - B.
def sum(a,b): return (a + b) print(sum(1,3)) - C.
def sum(a,b): return a+b print(sum(1,3,5)) - D.
def and(a,b): return a+b print(and(1,3))
答案:B
解析:- A: 错误。
return a+b和print(sum(1,3))写在了同一行,Python中一行通常只写一个语句。 - B: 正确。语法完全正确。
def定义函数,函数体有缩进,return返回值,print调用函数并打印结果。 - C: 错误。
sum(1,3,5)调用时传递了3个参数,但函数sum只定义了2个参数,会引发TypeError。 - D: 错误。
and是Python的关键字(逻辑与),不能用作函数名。
- A.
-
题目:下列关于自定义函数的说法,正确的是 ( )
- A.一定要使用关键字 def 来自定义函数
- B.函数名可以随意定义
- C.自定义函数返回值至少要有1个
- D.可在函数内对全局变量直接进行修改
答案:A
解析:- A: 正确。在Python中,创建自定义函数的唯一标准方式就是使用
def关键字。 - B: 错误。函数名不能随意定义,不能与Python关键字重名,且应遵循命名规范(如由字母、数字、下划线组成,不能以数字开头)。
- C: 错误。函数可以没有返回值(即不写
return或return None)。 - D: 错误。在函数内直接修改全局变量,如果只是读取是可以的,但如果要修改(重新赋值),必须先用
global关键字声明,否则会创建一个同名的局部变量。
-
题目:在一个函数中,如果局部变量和全局变量同名,则 ( )
- A.局部变量屏蔽全局变量
- B.全局变量屏蔽局部变量
- C.全局变量和局部变量都不可用
- D.程序错误
答案:A
解析:这是Python作用域的基本规则(LEGB规则中的L和G)。当在函数内部访问一个变量时,Python会优先在局部作用域(Local)中查找。如果找到了一个与全局变量同名的局部变量,那么在这个函数内部,该名称引用的就是局部变量,全局变量被“屏蔽”或“隐藏”了。 -
题目:string 模块中 ascii uppercase 能产生 ( )
- A.小写英文字母
- B.大写英文字母
- C.特殊符号
- D.数字
答案:B
解析:string模块包含了一些常用的字符串常量。string.ascii_uppercase是一个包含所有大写英文字母的字符串,即'ABCDEFGHIJKLMNOPQRSTUVWXYZ'。对应的小写字母是string.ascii_lowercase。 -
题目:若自定义函数为
def xj(a,b,c),下列调用函数的写法正确的是 ( )- A. xj(1,2)
- B . x j ( a = 1 , b = 2 , c = 3 )
- C. xj(1,2,3,4)
- D. xj(a=1,2,3)
答案:B
解析:- A: 错误。函数定义了3个参数,调用时只提供了2个,会引发
TypeError。 - B: 正确。使用关键字参数(keyword arguments)的方式调用,参数顺序可以与定义时不同,只要参数名正确即可。
- C: 错误。函数定义了3个参数,调用时提供了4个,会引发
TypeError。 - D: 错误。在Python函数调用中,一旦使用了关键字参数,其后面的所有参数都必须是关键字参数。
a=1是关键字参数,后面的2, 3是位置参数,这是不允许的语法。
-
题目:若自定义函数为
def f (a,b,*c,**d),调用函数f(1,2,3,4,5,x=6,y=7),下列说法错误的是 ( )- A. a=1
- B. b=2
- C. c=3
- D . d =
答案:C
解析:这个函数定义了混合参数类型:a,b是普通的位置参数。*c是可变位置参数(元组),它会收集所有额外的位置参数。**d是可变关键字参数(字典),它会收集所有额外的关键字参数。
调用f(1,2,3,4,5,x=6,y=7)时:a被赋值为1。b被赋值为2。- 剩下的位置参数
3, 4, 5会被收集到元组c中,所以c = (3, 4, 5)。 - 剩下的关键字参数
x=6, y=7会被收集到字典d中,所以d = {'x': 6, 'y': 7}。
因此,选项C说c=3是错误的,c是一个包含多个元素的元组。
-
题目:下列程序运行后,会产生 异常。
a = 10 b = 0 print(a / b)- A. NameError
- B. TypeError
- C. IndexError
- D. ValueError
答案:B
解析:该程序尝试执行10 / 0,即除数为零。在Python中,这会引发ZeroDivisionError。但是,在给定的选项中,没有ZeroDivisionError。这是一个典型的TypeError(类型错误)的子类,但通常被单独列出。如果必须在给定选项中选择,TypeError是最接近的,因为它涉及到操作数类型不兼容的问题(数字不能被零除)。然而,严格来说,正确答案是ZeroDivisionError。考虑到出题者可能将其归类于TypeError,或者这是一个题目瑕疵,我们选择B。(注:此题选项可能不完善,标准异常应为ZeroDivisionError) -
题目:下列代码的输出内容是 ( )
try: print("Hello") except: print("Error") else: print("No error")- A. Hello
- B. Hello 和 No error
- C. Error
- D. Hello 和 Error
答案:B
解析:try-except-else结构中,try块中的代码print("Hello")正常执行,没有抛出任何异常。因此,except块被跳过。由于try块成功执行,else块会被执行,打印"No error"。最终输出是Hello和No error。 -
题目:下列关于 try-except-finally的说法,正确的是 ( )
- A. finally 块仅在无异常时执行
- B. except块必须捕获所有可能的异常
- C. finally块通常用于释放资源(如关闭文件)
- D. else 块在发生异常时执行
答案:C
解析:- A: 错误。
finally块无论是否发生异常都会执行。 - B: 错误。可以有多个
except块来捕获不同类型的异常,也可以有一个裸露的except:来捕获所有异常,但这不是必须的。 - C: 正确。
finally块的核心用途就是确保无论发生什么情况,其中的代码(如关闭文件、释放网络连接等)都会被执行,从而保证资源被正确释放。 - D: 错误。
else块只在try块没有发生异常时执行。
-
题目:下列代码运行会抛出 异常。
my_list=[1,2, 3] print(my_list[3])- A. NameError
- B. TypeError
- C. IndexError
- D. ValueError
答案:C
解析:列表my_list的索引是0, 1, 2。尝试访问索引3超出了列表的范围,这会引发IndexError(索引错误)。 -
题目:下列选项中不会触发异常的是 ( )
- A. int(" abc")
- B. [1 ,2, 3] [3]
- C. " hello". upper()
- D. open(" nonexist. txt")
答案:C
解析:- A:
int("abc")尝试将非数字字符串转换为整数,会引发ValueError。 - B:
[1, 2, 3][3]索引越界,会引发IndexError。 - C:
"hello".upper()是字符串的合法操作,将字符串转换为大写,返回"HELLO",不会触发异常。 - D:
open("nonexist.txt")尝试打开一个不存在的文件,会引发FileNotFoundError。
-
题目:下列关于 finally语句块的说法,正确的是 ( )
- A.仅在无异常时执行
- B.必须和 else一起使用
- C.用于替代 except
- D.无论是否发生异常都会执行
答案:D
解析:finally语句块的最大特点就是其执行的确定性。无论try块是正常结束、因为return结束,还是因为发生了异常,finally块中的代码都一定会被执行。它不依赖于else,也不能替代except(except用于处理异常,finally用于清理)。 -
题目:使用 os模块的 函数可以获取指定目录下的文件和目录名。 ( )
- A. os. path()
- B. os. cwd()
- C. os. getcwd()
- D. os. listdir()
答案:D
解析:os.listdir(path)函数返回一个列表,其中包含指定路径path下的所有文件和目录的名称。os.path是一个模块,不是函数。os.cwd()不是有效的函数。os.getcwd()用于获取当前工作目录的路径,而不是列出其内容。 -
题目:仔细阅读下列程序,下列说法错误的是 ( )
x = 10 # ① def func1(): x = 20 #② print("func1中的 x :", x) func1()- A.①的x是全局变量
- B.②的x是局部变量
- C.输出的内容为“func1 中的 x:20”
- D.输出的内容为“func1 中的 x:10”
答案:D
解析:- A: 正确。在函数外部定义的
x是全局变量。 - B: 正确。在函数
func1内部通过赋值语句x = 20定义的x是局部变量。 - C: 正确。在函数内部,局部变量
x(值为20)屏蔽了全局变量x(值为10)。因此,print语句输出的是局部变量的值20。 - D: 错误。由于局部变量的屏蔽作用,输出的不是全局变量的值
10。
-
题目:自定义函数语法格式如图所示,下列说法错误的是 ( )
def 函数名(参数): # ① ② ③
函数体 # ④
return 返回值 # ④- A.①的 def是定义函数的关键字
- B.②是函数名,可任意定义
- C.③是参数,可任意个
- D.④是返回值,可不写
答案:B
解析:- A: 正确。
def是定义函数的必须关键字。 - B: 错误。函数名虽然可以自定义,但不能是Python的关键字(如
if,for,def等),并且应遵循命名规范(如不能以数字开头,不能包含特殊符号等)。因此“可任意定义”的说法是错误的。 - C: 正确。函数可以有零个或多个参数。
- D: 正确。
return语句是可选的。函数可以没有return,此时默认返回None。
-
题目:仔细阅读下列程序,下列说法正确的是 ( )
def dg(n): if n <= 0: # 终止条件 print("Done!") else: print(n) dg(n - 1) # 递归调用 dg(10)- A.该函数会无限循环,因为没有终止条件
- B.该函数会打印从10 到1 的数字,最后打印“Done!”
- C.递归一定会让程序运行得更快,所以比循环更好
- D.递归只能用于数学计算,不能处理实际问题
答案:B
解析:- A: 错误。函数中有明确的终止条件
if n <= 0。 - B: 正确。这是一个典型的递归函数。调用
dg(10)会打印10,然后调用dg(9),打印9,...,直到调用dg(0),此时满足n <= 0,打印"Done!",然后递归结束。所以输出是10到1,最后是"Done!"。 - C: 错误。递归通常比循环(迭代)更慢,因为每次函数调用都有额外的开销(如创建栈帧)。递归的优势在于代码简洁,能自然地解决某些问题(如树遍历),而不是速度。
- D: 错误。递归是强大的编程思想,广泛应用于各种实际问题,如文件系统遍历、分治算法(如快速排序、归并排序)、图形学等,远不止数学计算。
二、多项选择题
-
题目:使用下列数学函数不需要提前导入数学模块的有 ( )
- A. sum
- B. max
- C. sin
- D. pow
答案:A, B, D
解析:Python的内置函数(Built-in Functions)无需导入任何模块即可直接使用。sum(),max(),pow()都是Python的内置函数。sin()(正弦函数)是math模块中的函数,使用前必须先import math。 -
题目:在Python中,导入数学模块的写法有很多种,下列写法正确的有 ( )
- A. import math
- B. import math as t
- C. form math import
- D. import math from *
答案:A, B
解析:- A: 正确。
import math是标准的导入模块方式,之后通过math.function()调用。 - B: 正确。
import math as t导入模块并给它起一个别名t,之后通过t.function()调用,这是常用且正确的写法。 - C: 错误。
form是拼写错误,应该是from。from math import后面必须指定要导入的函数或变量,如from math import sqrt。 - D: 错误。
import math from *语法错误。通配符导入*只能和from连用,如from math import *。
-
题目:下列代码执行后,有可能产生的结果有 ( )
import random print(random.choice(range(1,4)))- A.1
- B.2
- C.3
- D.4
答案:A, B, C
解析:range(1, 4)生成一个从1到3的整数序列(包含1,不包含4),即[1, 2, 3]。random.choice(seq)从序列seq中随机选择一个元素。- 因此,
random.choice(range(1, 4))可能的结果是1,2, 或3。4不在range(1, 4)生成的序列中,所以不可能产生。
-
题目:下列选项中属于 time模块的函数有 ( )
- A. time
- B. sleep
- C. localtime
- D. strftime
答案:A, B, C, D
解析:time,sleep,localtime,strftime都是Python标准库time模块中的常用函数。time.time(): 返回时间戳。time.sleep(secs): 暂停执行指定的秒数。time.localtime(): 将时间戳转换为本地时间的struct_time对象。time.strftime(format, t): 将时间元组格式化为字符串。
-
题目:能正确捕获所有异常的有 ( )
- A. except:
- B. except Exception:
- C. except BaseException:
- D. except Error:
答案:A, B, C
解析:- A: 正确。裸露的
except:会捕获所有异常,等同于except BaseException:。这是最广泛的捕获方式。 - B: 正确。
Exception是所有内置的、非系统退出的异常的基类。except Exception:会捕获几乎所有常见的程序错误(如ValueError,TypeError,NameError等),但不包括像SystemExit,KeyboardInterrupt这样的系统退出类异常。 - C: 正确。
BaseException是所有异常的顶层基类。except BaseException:会捕获绝对所有的异常,包括Exception及其子类,以及SystemExit,KeyboardInterrupt等。 - D: 错误。Python标准库中没有名为
Error的顶级异常类。这是一个不存在的类。
-
题目:random 模块提供了很多实用函数,关于 random. randint(1,10)和 int(random. uniform(1,10))生成的结果说法错误的有 ( )
- A. randint函数产生的是整数,uniform 函数产生的是浮点数
- B.都有可能产生数值1
- C.都有可能产生数值10
- D.都不可能产生数值10
答案:C, D
解析:random.randint(1, 10): 产生一个[1, 10]区间的随机整数。可能产生1和10。random.uniform(1, 10): 产生一个[1.0, 10.0)区间的随机浮点数。可能产生1.0,但不可能产生10.0(因为区间是左闭右开)。int(random.uniform(1, 10)): 先产生一个[1.0, 10.0)的浮点数,然后取整。如果浮点数是9.999...,取整后是9。如果浮点数是1.0,取整后是1。它不可能产生10,因为uniform()本身不可能产生10.0。- A: 正确的描述,题目问的是“错误”的,所以A不是答案。
- B: 正确的描述,两者都可能产生1(或1.0),所以B不是答案。
- C: 错误的描述。
randint可能产生10,但int(uniform)不可能产生10。所以“都有可能产生数值10”这个说法是错误的。 - D: 错误的描述。
randint是可能产生10的。所以“都不可能产生数值10”这个说法是错误的。
-
题目:自定义函数代码中可能会涉及的关键字有 ( )
- A. def
- B. class
- C. return
- D. pass
答案:A, C, D
解析:- A: 正确。
def是定义函数的核心关键字。 - C: 正确。
return用于从函数中返回结果。 - D: 正确。
pass是一个空操作语句,常用在函数体中作为占位符,当函数逻辑暂时未实现时。 - B: 错误。
class是定义类的关键字,与定义函数无关。
-
题目:想随机产生一个字母(含大小写),下列选项中能正确地产生的有 ( )
- A. random. choice(string. ascii uppercase)
- B. chr(random. randint(65,90))
- C. random. choice(string. ascii letters) D. random. choice(string. ascii lowercase)
答案:A, B, C, D
解析:- A: 正确。
string.ascii_uppercase是'ABCDEFGHIJKLMNOPQRSTUVWXYZ'。random.choice()从中随机选一个,得到一个大写字母。 - B: 正确。大写字母A-Z的ASCII码范围是65到90。
random.randint(65, 90)生成一个随机ASCII码,chr()将其转换为对应的字符,即一个大写字母。 - C: 正确。
string.ascii_letters是string.ascii_lowercase + string.ascii_uppercase,包含所有大小写字母。random.choice()从中随机选一个,得到一个字母(可能是大写或小写)。 - D: 正确。
string.ascii_lowercase是'abcdefghijklmnopqrstuvwxyz'。random.choice()从中随机选一个,得到一个小写字母。
题目要求是“一个字母”,没有限定大小写,所以四种方法都能满足“产生一个字母”的要求。
-
题目:函数中的参数可以按不同的方式进行分类,按调用方式可以有 ( )
- A.位置参数
- B.关键字参数
- C.默认参数
- D.不定长参数
答案:A, B, C, D
解析:这四种都是Python中常见的参数分类方式,它们描述了参数在函数调用时的不同行为和传递方式。- 位置参数:按顺序传递给函数的参数。
- 关键字参数:通过参数名传递的参数,可以不按顺序。
- 默认参数:在定义函数时为参数指定了默认值,调用时如果未提供该参数,则使用默认值。
- 不定长参数:用于接收可变数量的参数,包括
*args(接收任意数量的位置参数,形成元组)和**kwargs(接收任意数量的关键字参数,形成字典)。
-
题目:阅读下列代码,关于其说法正确的有 ( )
try: num= int(" abc") result= 10 / 2 except ValueError: print( "值错误!") except ZeroDivisionError: print( "除零错误!") else: print( "计算成功!") finally: print( "程序结束")- A.会输出"值错误!"
- B.会输出"除零错误!"
- C.会输出"计算成功!"
- D.会输出"程序结束"
答案:A, D
解析:- 代码执行
num = int(" abc"),这行代码会尝试将非数字字符串" abc"转换为整数,会引发ValueError。 - 一旦
try块中发生异常,程序会立即跳转到匹配的except块。这里匹配到except ValueError:,打印"值错误!"。 - 发生异常后,
else块不会被执行。 - 无论是否发生异常,
finally块总会被执行,打印"程序结束"。 - 因此,最终输出是
"值错误!"和"程序结束"。选项A和D正确。
三、是非选择题
-
题目:因为 math 模块是Python的内置模块,因此进行数学计算时不需要提前导入。 ( )
答案:错误
解析:这是一个常见的误解。Python确实有很多内置函数(Built-in Functions),如sum(),max(),pow(),它们不需要导入。但是,math是一个标准库模块(Standard Library Module),而不是内置函数集。使用math模块中的任何函数(如math.sqrt(),math.sin())之前,都必须先使用import math语句导入该模块。 -
题目:使用 import math之后,调用平方根函数必须写成 math. sprt(4)。 ( )
答案:错误
解析:这句话有两处错误。第一,函数名拼写错误,平方根函数是sqrt,不是sprt。第二,import math后,调用方式是math.sqrt(4)。虽然“必须写成math.sqrt”这种说法在import math的前提下是正确的,但结合拼写错误,整个命题是错误的。另外,如果使用from math import sqrt导入,则可以直接调用sqrt(4)。 -
题目:sleep(seconds)函数中的参数 seconds表示暂停的秒数,只能是整数。 ( )
答案:错误
解析:time.sleep(seconds)函数的参数seconds可以是整数,也可以是浮点数。例如,time.sleep(0.5)表示暂停0.5秒。它接受任何非负的实数值。 -
题目:random 模块的 choice函数内的参数必须是列表类型。 ( )
答案:错误
解析:random.choice()函数的参数可以是任何**序列(Sequence)类型,而不仅仅是列表。序列是Python中一种可迭代的数据结构,其元素可以通过索引访问。常见的序列类型包括:列表(list)、元组(tuple)、字符串(string)。例如,random.choice("hello")和random.choice((1,2,3))都是合法的。 -
题目:局部变量的作用域只能在被定义的函数内访问。 ( )
答案:正确
解析:这是作用域的基本定义。局部变量是在函数内部创建的变量,其可见性和生命周期仅限于该函数内部。在函数外部尝试访问局部变量会导致NameError。 -
题目:自定义函数的返回值均要使用关键字 return 进行返回,若没有 return 则返回 None。 ( )
答案:正确
解析:这是Python函数的默认行为。如果一个函数执行完毕没有遇到return语句,或者return后面没有跟任何值,那么该函数会默认返回None。None是一个特殊的单例对象,表示“没有值”或“值不存在”。 -
题目:return 会立即终止函数的执行,写在 return 后的代码不会被执行。 ( )
答案:正确
解析:return语句有两个作用:一是返回一个值给调用者,二是立即终止当前函数的执行。一旦Python解释器执行到return语句,函数的执行就会结束,控制权交还给调用者,return语句之后的任何代码都不会被执行。 -
题目:自定义函数可以带有各种参数,例如 def f(a=1,b,c=3):是正确的。 ( )
答案:错误
解析:在Python函数定义中,所有带有默认值的参数(默认参数)必须出现在所有没有默认值的参数(非默认参数)之后。在def f(a=1, b, c=3):中,非默认参数b位于默认参数a=1之后,这是语法错误的。正确的写法应该是def f(b, a=1, c=3):。 -
题目:使用 import math as m后,会导致原模块名 math不可用,例如 math. sprt(4)会出错。( )
答案:正确
解析:import math as m语句的意思是“导入math模块,并给它起一个别名m”。导入后,只能通过这个别名m来访问模块中的内容,如m.sqrt(4)。此时,原来的模块名math在当前作用域中是未定义的,如果尝试使用math.sqrt(4),会引发NameError,因为解释器找不到名为math的对象。 -
题目:函数的调用可以实现代码的复用,还可以使代码更有条理性和可靠性。 ( )
答案:正确
解析:这是函数的核心优势之一。- 代码复用:将一段常用逻辑封装成函数后,可以在程序的不同地方多次调用,避免了重复编写相同的代码。
- 条理性:将复杂问题分解为多个小函数,每个函数负责一个单一任务,使得代码结构更清晰,易于阅读和维护。
- 可靠性:将代码封装在函数中,可以独立地对其进行测试和调试,确保其正确性,从而提高了整个程序的可靠性。
-
题目:如果自定义函数不需要接收任何参数,则可以省去一对空的圆括号。 ( )
答案:错误
解析:在Python中,定义函数时,即使函数不需要参数,函数名后面的一对圆括号()是必须的。这是Python语法的一部分,用于区分函数名和变量名。正确的无参函数定义是def my_function():。如果写成def my_function:,则语法错误。 -
题目:合理的使用异常处理可以使程序更加健壮,具有更强的容错性。 ( )
答案:正确
解析:异常处理(try-except结构)是构建健壮程序的关键机制。通过预测和处理可能发生的错误(如文件不存在、网络中断、用户输入无效等),程序可以在遇到错误时优雅地恢复或给出提示,而不是直接崩溃。这大大增强了程序的容错能力和用户体验。 -
题目:在 try-except-else语句中, else语句块作为可选项在没有异常才执行。 ( )
答案:正确
解析:try-except-else结构中,else块是可选的。它的执行条件是:try块中的代码成功执行完毕,没有抛出任何异常。如果try块中发生了异常并被except块捕获,则else块不会执行。 -
题目:在 try-except-else-finally语句中可以有多个 except,多个 else和一个 finally. ( )
答案:错误
解析:在try-except-else-finally结构中:- 可以有多个
except块,用于捕获不同类型的异常。 - 只能有零个或一个
else块。 - 只能有零个或一个
finally块。
“多个 else”是语法错误的。
- 可以有多个
-
题目:全局变量可以作用于整个程序,在自定义函数中使用全局变量,必须先用关键字 global定义。 ( )
答案:错误
解析:这个说法不完全准确,需要区分“读取”和“修改”。- 读取全局变量:在函数内部可以直接读取全局变量的值,不需要
global关键字。 - 修改全局变量:如果在函数内部要为全局变量重新赋值(即修改它),则必须在函数内部使用
global关键字声明该变量,否则Python会创建一个新的同名局部变量。
因此,“必须先用关键字global定义”的说法过于绝对,只有在修改时才是必须的。
- 读取全局变量:在函数内部可以直接读取全局变量的值,不需要
四、综合应用题
-
题目:阅读下列代码,该代码的功能为计算列表 nums的 和 。
import random import math def math_demo(): nums=[random.randint(1, 10) for in range(4)] a= sum(nums) / len(nums) b= max(nums) return a,b print(math_demo())答案:平均值, 最大值
解析:nums=[random.randint(1, 10) for _ in range(4)]:使用列表推导式生成一个包含4个1到10之间随机整数的列表。a = sum(nums) / len(nums):sum(nums)计算列表中所有数字的总和,len(nums)计算列表的长度(元素个数),两者相除得到平均值。所以a是平均值。b = max(nums):max(nums)找出列表中的最大值。所以b是最大值。return a, b:函数返回一个元组(平均值, 最大值)。print(math_demo()):调用函数并打印返回的元组。
因此,该代码的功能是计算随机列表的平均值和最大值。
-
题目:阅读下列代码,运行结束后输出结果是 。
try: numerator=10 denominator=0 result= numerator/ denominator print(f"结果是:{result}") except ZeroDivisionError: print("错误:除数不能为零!") except Exception as e: print(f"发生未知错误:{e}") else: print("计算成功完成!") finally: print("程序执行完毕")答案:
错误:除数不能为零! 程序执行完毕解析:
- 代码进入
try块,执行result = numerator / denominator,即10 / 0。 - 这会立即引发
ZeroDivisionError(除零错误)。 - 程序跳转到第一个匹配的
except块,即except ZeroDivisionError:。 - 执行
print("错误:除数不能为零!"),输出第一行。 - 由于异常已经被捕获和处理,程序不会继续执行
try块中剩余的代码,也不会进入else块。 - 最后,无论是否发生异常,
finally块都会执行。执行print("程序执行完毕"),输出第二行。 - 因此,最终的输出是两行文字。
- 代码进入
-
题目:为了防止学校系统被恶意攻击,小明想在用户登录的页面中添加验证码,同时要求每过5秒随机生成一个由数字和字母组成且长度为4 的验证码。仔细阅读代码,帮助小明完成空缺内容。
while True: verCode= "" #随机抽取一个字符 verCode= verCode + a print("生成的验证码为:",verCode) ① string, time, random for i in range( ② ): b= string.digits+ string.ascii_letters #生成一个由所有数字和字母组成字符串 a= random. ③ (b) time. sleep( ④ )答案:
①import
②4
③choice
④5解析:
- ①:代码中使用了
string,time,random三个模块,在使用前必须先导入。Python中导入模块使用import关键字。 - ②:题目要求验证码长度为4。
for i in range(4)这个循环会执行4次,每次生成一个字符,拼接到verCode中。 - ③:
b是一个包含所有数字和字母的长字符串。random.choice()函数可以从一个序列中随机选择一个元素。这里需要从b中随机抽取一个字符,所以是random.choice(b)。 - ④:题目要求每过5秒生成一个验证码。
time.sleep()函数用于暂停程序执行,参数是暂停的秒数。所以是time.sleep(5)。
- ①:代码中使用了
-
题目:小方在墙角堆放着一堆完全相同的正方体小木块,如下图所示,因为木块堆得实在是太有规律了,你只要知道它的层数就可以计算所有木块的数量了。请仔细阅读代码,帮助小方完成空缺内容,实现输入层数,可以输出总数量。
def ① (n): #计算第 n层小木块的数量 ② a a = n * ( n + 1 ) / / 2 x= int(input("请输入层数:")) s=0 #调用函数计算每层小木块数量 print(s) for i in range(1, ③ ): s = s + c oun t ( ④ )答案:
①count
②return
③x + 1
④i解析:
- ①:根据函数体内的调用
count(i),可以知道函数名是count。def count(n):定义了一个名为count的函数。 - ②:函数
count(n)计算第n层的木块数,计算结果是a。函数需要将结果返回给调用者,所以是return a。 - ③:这是一个
for循环,用于遍历从第1层到第x层(用户输入的层数)。range(1, x + 1)会生成一个从1到x的序列(包含1,不包含x+ 1),正好用于遍历所有层。 - ④:在循环体中,
s = s + count(i)表示将第i层的木块数累加到总数s上。这里需要调用count函数来计算第i层的数量,所以参数是i。
- ①:根据函数体内的调用
-
题目:小李为公司年会筹办各项活动,其中的抽奖环节备受关注,因此他设计了一段读取本地文件并随机抽取3名幸运员工的代码,请仔细阅读代码,帮助小李完成空缺内容。
import os path= os.getcwd() f= open(path+"/ name. txt", "r", encoding=" utf-8") s= list(f. read(). split()) #将读取的内容转换为列表 md = [ ] while True: n= len(s) a= random. randint(0, ③ ) if s[a] in md: continue #若名单重复,则需要继续随机生成 else: md. append(s[a]) k = k + 1 print(s[a]) if k ==3 : ① k= ② a= random. randint(0, ③ ) ④答案:
①break
②0
③n - 1
④pass(或任何不破坏循环的语句,或留空)解析:
- ①:
if k == 3:这个条件判断表示已经抽满了3名幸运员工。此时,抽奖循环应该结束。在Python中,break语句用于跳出当前循环。所以这里应该是break。 - ②:在循环开始前,
k应该被初始化为0,用于计数已经抽中了多少人。 - ③:
random.randint(a, b)生成一个[a, b]区间的随机整数。列表s的索引范围是0到len(s)-1。n = len(s),所以随机索引的范围是0到n-1。因此,这里应该是random.randint(0, n - 1)。 - ④:这个空位于
if k == 3: break之后,且与else平级。这意味着当k不等于3时(即抽奖未结束),代码会执行到这里。然而,if-else结构已经处理了“重复”和“不重复”两种情况,并且循环会自然继续。这个位置实际上不需要任何代码来维持循环逻辑。在Python中,如果语法上需要一个语句但逻辑上不需要执行任何操作,可以使用pass语句作为占位符。或者,如果代码逻辑允许,这里也可以留空(但通常不推荐,可能让代码意图不明确)。因此,最合适的填充是pass。
- ①:

浙公网安备 33010602011771号