第5单元检测卷

第5单元检测卷 - 题目、答案与解析

一、单项选择题

  1. 题目:可以将字符串“123”转换为整数的是 ( )

    • A. str()
    • B. float()
    • C. int()
    • D. eval()

    答案:C
    解析int()是Python的内置函数,用于将一个数字或字符串转换为整数。int("123")会返回整数123str()用于转换为字符串,float()用于转换为浮点数,eval()会执行字符串中的表达式(eval("123")也返回123,但其主要功能是求值,不是类型转换)。

  2. 题目:代码 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

  3. 题目:用于对若干个数值进行求和的函数是 ( )

    • A. sum
    • B. max
    • C. sqrt
    • D. abs

    答案:A
    解析sum()是Python的内置函数,用于对一个可迭代对象(如列表、元组)中的所有元素进行求和。max()求最大值,sqrt()math模块中的函数用于求平方根,abs()求绝对值。

  4. 题目:代码 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落在这个区间内。

  5. 题目:代码 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是上限,是不可能产生的结果。

  6. 题目:函数 pow(2,3)运行产生的结果是 ( )

    • A.2
    • B.8
    • C.3
    • D.6

    答案:B
    解析pow(x, y)是Python的内置函数,用于计算xy次幂。pow(2, 3)即计算2的3次方,结果是2 * 2 * 2 = 8

  7. 题目:在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),单独使用不是导入模块的关键字。

  8. 题目:函数在传递过程中可以有多个参数,参数之间使用 分隔。 ( )

    • A.:
    • B./
    • C.,
    • D.#

    答案:C
    解析:在Python中,定义函数或调用函数时,如果有多个参数,参数之间需要使用逗号(,)进行分隔。例如,def my_func(a, b):my_func(1, 2)

  9. 题目:下列 random 模块中的函数不需要填写参数的是 ( )

    • A. random
    • B. choice
    • C. randint
    • D. uniform

    答案:A
    解析random.random()函数用于生成一个[0.0, 1.0)范围内的随机浮点数,它不需要任何参数。random.choice(seq)需要传入一个序列seqrandom.randint(a, b)需要传入两个整数abrandom.uniform(a, b)需要传入两个数字ab

  10. 题目:time模块中的 time()函数的返回值的单位是 ( )

    • A.天
    • B.时
    • C.分
    • D.秒

    答案:D
    解析time.time()函数返回自纪元(1970年1月1日00:00:00 UTC)以来的秒数,是一个浮点数。因此,其单位是秒。

  11. 题目:函数 time. localtime()的返回值是一个表示本地时间的时间元组,那么该元组的第一个元素表示的是 ( )

    • A.年
    • B.月
    • C.日
    • D.时

    答案:A
    解析time.localtime()返回一个struct_time对象(类似元组),其索引0对应的元素是年份(year),索引1是月份(month),索引2是日(day),以此类推。

  12. 题目:可以使用 关键字创建自定义函数。 ( )

    • A. function
    • B. def
    • C. main
    • D. try

    答案:B
    解析:在Python中,def是定义(define)函数的关键字。函数定义的基本语法是def function_name(parameters):

  13. 题目:下列关于 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
  14. 题目:下列代码的输出内容是 ( )

    def add(a , b=2):
        return a+b
    print(add(3))
    
    • A.5
    • B.3
    • C.报错
    • D. None

    答案:A
    解析:函数add定义了两个参数ab,其中b有一个默认值2。调用add(3)时,只传递了一个参数3,它会被赋给a,而b则使用默认值2。因此,函数内部计算3 + 2,返回5print函数输出5

  15. 题目:下列自定义函数中,语法格式正确的是 ( )

    • 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+bprint(sum(1,3))写在了同一行,Python中一行通常只写一个语句。
    • B: 正确。语法完全正确。def定义函数,函数体有缩进,return返回值,print调用函数并打印结果。
    • C: 错误。sum(1,3,5)调用时传递了3个参数,但函数sum只定义了2个参数,会引发TypeError
    • D: 错误。and是Python的关键字(逻辑与),不能用作函数名。
  16. 题目:下列关于自定义函数的说法,正确的是 ( )

    • A.一定要使用关键字 def 来自定义函数
    • B.函数名可以随意定义
    • C.自定义函数返回值至少要有1个
    • D.可在函数内对全局变量直接进行修改

    答案:A
    解析

    • A: 正确。在Python中,创建自定义函数的唯一标准方式就是使用def关键字。
    • B: 错误。函数名不能随意定义,不能与Python关键字重名,且应遵循命名规范(如由字母、数字、下划线组成,不能以数字开头)。
    • C: 错误。函数可以没有返回值(即不写returnreturn None)。
    • D: 错误。在函数内直接修改全局变量,如果只是读取是可以的,但如果要修改(重新赋值),必须先用global关键字声明,否则会创建一个同名的局部变量。
  17. 题目:在一个函数中,如果局部变量和全局变量同名,则 ( )

    • A.局部变量屏蔽全局变量
    • B.全局变量屏蔽局部变量
    • C.全局变量和局部变量都不可用
    • D.程序错误

    答案:A
    解析:这是Python作用域的基本规则(LEGB规则中的L和G)。当在函数内部访问一个变量时,Python会优先在局部作用域(Local)中查找。如果找到了一个与全局变量同名的局部变量,那么在这个函数内部,该名称引用的就是局部变量,全局变量被“屏蔽”或“隐藏”了。

  18. 题目:string 模块中 ascii uppercase 能产生 ( )

    • A.小写英文字母
    • B.大写英文字母
    • C.特殊符号
    • D.数字

    答案:B
    解析string模块包含了一些常用的字符串常量。string.ascii_uppercase是一个包含所有大写英文字母的字符串,即'ABCDEFGHIJKLMNOPQRSTUVWXYZ'。对应的小写字母是string.ascii_lowercase

  19. 题目:若自定义函数为 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是位置参数,这是不允许的语法。
  20. 题目:若自定义函数为 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是一个包含多个元素的元组。
  21. 题目:下列程序运行后,会产生 异常。

    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

  22. 题目:下列代码的输出内容是 ( )

    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"。最终输出是HelloNo error

  23. 题目:下列关于 try-except-finally的说法,正确的是 ( )

    • A. finally 块仅在无异常时执行
    • B. except块必须捕获所有可能的异常
    • C. finally块通常用于释放资源(如关闭文件)
    • D. else 块在发生异常时执行

    答案:C
    解析

    • A: 错误。finally块无论是否发生异常都会执行。
    • B: 错误。可以有多个except块来捕获不同类型的异常,也可以有一个裸露的except:来捕获所有异常,但这不是必须的。
    • C: 正确finally块的核心用途就是确保无论发生什么情况,其中的代码(如关闭文件、释放网络连接等)都会被执行,从而保证资源被正确释放。
    • D: 错误。else块只在try块没有发生异常时执行。
  24. 题目:下列代码运行会抛出 异常。

    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(索引错误)。

  25. 题目:下列选项中不会触发异常的是 ( )

    • 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
  26. 题目:下列关于 finally语句块的说法,正确的是 ( )

    • A.仅在无异常时执行
    • B.必须和 else一起使用
    • C.用于替代 except
    • D.无论是否发生异常都会执行

    答案:D
    解析finally语句块的最大特点就是其执行的确定性。无论try块是正常结束、因为return结束,还是因为发生了异常,finally块中的代码都一定会被执行。它不依赖于else,也不能替代exceptexcept用于处理异常,finally用于清理)。

  27. 题目:使用 os模块的 函数可以获取指定目录下的文件和目录名。 ( )

    • A. os. path()
    • B. os. cwd()
    • C. os. getcwd()
    • D. os. listdir()

    答案:D
    解析os.listdir(path)函数返回一个列表,其中包含指定路径path下的所有文件和目录的名称。os.path是一个模块,不是函数。os.cwd()不是有效的函数。os.getcwd()用于获取当前工作目录的路径,而不是列出其内容。

  28. 题目:仔细阅读下列程序,下列说法错误的是 ( )

    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
  29. 题目:自定义函数语法格式如图所示,下列说法错误的是 ( )
    def 函数名(参数): # ① ② ③
    函数体 # ④
    return 返回值 # ④

    • A.①的 def是定义函数的关键字
    • B.②是函数名,可任意定义
    • C.③是参数,可任意个
    • D.④是返回值,可不写

    答案:B
    解析

    • A: 正确def是定义函数的必须关键字。
    • B: 错误。函数名虽然可以自定义,但不能是Python的关键字(如if, for, def等),并且应遵循命名规范(如不能以数字开头,不能包含特殊符号等)。因此“可任意定义”的说法是错误的。
    • C: 正确。函数可以有零个或多个参数。
    • D: 正确return语句是可选的。函数可以没有return,此时默认返回None
  30. 题目:仔细阅读下列程序,下列说法正确的是 ( )

    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: 错误。递归是强大的编程思想,广泛应用于各种实际问题,如文件系统遍历、分治算法(如快速排序、归并排序)、图形学等,远不止数学计算。

二、多项选择题

  1. 题目:使用下列数学函数不需要提前导入数学模块的有 ( )

    • A. sum
    • B. max
    • C. sin
    • D. pow

    答案:A, B, D
    解析:Python的内置函数(Built-in Functions)无需导入任何模块即可直接使用。sum(), max(), pow()都是Python的内置函数。sin()(正弦函数)是math模块中的函数,使用前必须先import math

  2. 题目:在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是拼写错误,应该是fromfrom math import后面必须指定要导入的函数或变量,如from math import sqrt
    • D: 错误import math from *语法错误。通配符导入*只能和from连用,如from math import *
  3. 题目:下列代码执行后,有可能产生的结果有 ( )

    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, 或 34不在range(1, 4)生成的序列中,所以不可能产生。
  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): 将时间元组格式化为字符串。
  5. 题目:能正确捕获所有异常的有 ( )

    • 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的顶级异常类。这是一个不存在的类。
  6. 题目: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”这个说法是错误的。
  7. 题目:自定义函数代码中可能会涉及的关键字有 ( )

    • A. def
    • B. class
    • C. return
    • D. pass

    答案:A, C, D
    解析

    • A: 正确def是定义函数的核心关键字。
    • C: 正确return用于从函数中返回结果。
    • D: 正确pass是一个空操作语句,常用在函数体中作为占位符,当函数逻辑暂时未实现时。
    • B: 错误class是定义类的关键字,与定义函数无关。
  8. 题目:想随机产生一个字母(含大小写),下列选项中能正确地产生的有 ( )

    • 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_lettersstring.ascii_lowercase + string.ascii_uppercase,包含所有大小写字母。random.choice()从中随机选一个,得到一个字母(可能是大写或小写)。
    • D: 正确string.ascii_lowercase'abcdefghijklmnopqrstuvwxyz'random.choice()从中随机选一个,得到一个小写字母。
      题目要求是“一个字母”,没有限定大小写,所以四种方法都能满足“产生一个字母”的要求。
  9. 题目:函数中的参数可以按不同的方式进行分类,按调用方式可以有 ( )

    • A.位置参数
    • B.关键字参数
    • C.默认参数
    • D.不定长参数

    答案:A, B, C, D
    解析:这四种都是Python中常见的参数分类方式,它们描述了参数在函数调用时的不同行为和传递方式。

    • 位置参数:按顺序传递给函数的参数。
    • 关键字参数:通过参数名传递的参数,可以不按顺序。
    • 默认参数:在定义函数时为参数指定了默认值,调用时如果未提供该参数,则使用默认值。
    • 不定长参数:用于接收可变数量的参数,包括*args(接收任意数量的位置参数,形成元组)和**kwargs(接收任意数量的关键字参数,形成字典)。
  10. 题目:阅读下列代码,关于其说法正确的有 ( )

    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正确。

三、是非选择题

  1. 题目:因为 math 模块是Python的内置模块,因此进行数学计算时不需要提前导入。 ( )
    答案:错误
    解析:这是一个常见的误解。Python确实有很多内置函数(Built-in Functions),如sum(), max(), pow(),它们不需要导入。但是,math是一个标准库模块(Standard Library Module),而不是内置函数集。使用math模块中的任何函数(如math.sqrt(), math.sin())之前,都必须先使用import math语句导入该模块。

  2. 题目:使用 import math之后,调用平方根函数必须写成 math. sprt(4)。 ( )
    答案:错误
    解析:这句话有两处错误。第一,函数名拼写错误,平方根函数是sqrt,不是sprt。第二,import math后,调用方式是math.sqrt(4)。虽然“必须写成math.sqrt”这种说法在import math的前提下是正确的,但结合拼写错误,整个命题是错误的。另外,如果使用from math import sqrt导入,则可以直接调用sqrt(4)

  3. 题目:sleep(seconds)函数中的参数 seconds表示暂停的秒数,只能是整数。 ( )
    答案:错误
    解析time.sleep(seconds)函数的参数seconds可以是整数,也可以是浮点数。例如,time.sleep(0.5)表示暂停0.5秒。它接受任何非负的实数值。

  4. 题目:random 模块的 choice函数内的参数必须是列表类型。 ( )
    答案:错误
    解析random.choice()函数的参数可以是任何**序列(Sequence)类型,而不仅仅是列表。序列是Python中一种可迭代的数据结构,其元素可以通过索引访问。常见的序列类型包括:列表(list)、元组(tuple)、字符串(string)。例如,random.choice("hello")random.choice((1,2,3))都是合法的。

  5. 题目:局部变量的作用域只能在被定义的函数内访问。 ( )
    答案:正确
    解析:这是作用域的基本定义。局部变量是在函数内部创建的变量,其可见性和生命周期仅限于该函数内部。在函数外部尝试访问局部变量会导致NameError

  6. 题目:自定义函数的返回值均要使用关键字 return 进行返回,若没有 return 则返回 None。 ( )
    答案:正确
    解析:这是Python函数的默认行为。如果一个函数执行完毕没有遇到return语句,或者return后面没有跟任何值,那么该函数会默认返回NoneNone是一个特殊的单例对象,表示“没有值”或“值不存在”。

  7. 题目:return 会立即终止函数的执行,写在 return 后的代码不会被执行。 ( )
    答案:正确
    解析return语句有两个作用:一是返回一个值给调用者,二是立即终止当前函数的执行。一旦Python解释器执行到return语句,函数的执行就会结束,控制权交还给调用者,return语句之后的任何代码都不会被执行。

  8. 题目:自定义函数可以带有各种参数,例如 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):

  9. 题目:使用 import math as m后,会导致原模块名 math不可用,例如 math. sprt(4)会出错。( )
    答案:正确
    解析import math as m语句的意思是“导入math模块,并给它起一个别名m”。导入后,只能通过这个别名m来访问模块中的内容,如m.sqrt(4)。此时,原来的模块名math在当前作用域中是未定义的,如果尝试使用math.sqrt(4),会引发NameError,因为解释器找不到名为math的对象。

  10. 题目:函数的调用可以实现代码的复用,还可以使代码更有条理性和可靠性。 ( )
    答案:正确
    解析:这是函数的核心优势之一。

    • 代码复用:将一段常用逻辑封装成函数后,可以在程序的不同地方多次调用,避免了重复编写相同的代码。
    • 条理性:将复杂问题分解为多个小函数,每个函数负责一个单一任务,使得代码结构更清晰,易于阅读和维护。
    • 可靠性:将代码封装在函数中,可以独立地对其进行测试和调试,确保其正确性,从而提高了整个程序的可靠性。
  11. 题目:如果自定义函数不需要接收任何参数,则可以省去一对空的圆括号。 ( )
    答案:错误
    解析:在Python中,定义函数时,即使函数不需要参数,函数名后面的一对圆括号()是必须的。这是Python语法的一部分,用于区分函数名和变量名。正确的无参函数定义是def my_function():。如果写成def my_function:,则语法错误。

  12. 题目:合理的使用异常处理可以使程序更加健壮,具有更强的容错性。 ( )
    答案:正确
    解析:异常处理(try-except结构)是构建健壮程序的关键机制。通过预测和处理可能发生的错误(如文件不存在、网络中断、用户输入无效等),程序可以在遇到错误时优雅地恢复或给出提示,而不是直接崩溃。这大大增强了程序的容错能力和用户体验。

  13. 题目:在 try-except-else语句中, else语句块作为可选项在没有异常才执行。 ( )
    答案:正确
    解析try-except-else结构中,else块是可选的。它的执行条件是:try块中的代码成功执行完毕,没有抛出任何异常。如果try块中发生了异常并被except块捕获,则else块不会执行。

  14. 题目:在 try-except-else-finally语句中可以有多个 except,多个 else和一个 finally. ( )
    答案:错误
    解析:在try-except-else-finally结构中:

    • 可以有多个 except块,用于捕获不同类型的异常。
    • 只能有零个或一个 else块。
    • 只能有零个或一个 finally块。
      “多个 else”是语法错误的。
  15. 题目:全局变量可以作用于整个程序,在自定义函数中使用全局变量,必须先用关键字 global定义。 ( )
    答案:错误
    解析:这个说法不完全准确,需要区分“读取”和“修改”。

    • 读取全局变量:在函数内部可以直接读取全局变量的值,不需要global关键字。
    • 修改全局变量:如果在函数内部要为全局变量重新赋值(即修改它),则必须在函数内部使用global关键字声明该变量,否则Python会创建一个新的同名局部变量。
      因此,“必须先用关键字global定义”的说法过于绝对,只有在修改时才是必须的。

四、综合应用题

  1. 题目:阅读下列代码,该代码的功能为计算列表 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()):调用函数并打印返回的元组。
      因此,该代码的功能是计算随机列表的平均值最大值
  2. 题目:阅读下列代码,运行结束后输出结果是 。

    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("程序执行完毕"),输出第二行。
    • 因此,最终的输出是两行文字。
  3. 题目:为了防止学校系统被恶意攻击,小明想在用户登录的页面中添加验证码,同时要求每过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)
  4. 题目:小方在墙角堆放着一堆完全相同的正方体小木块,如下图所示,因为木块堆得实在是太有规律了,你只要知道它的层数就可以计算所有木块的数量了。请仔细阅读代码,帮助小方完成空缺内容,实现输入层数,可以输出总数量。

    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),可以知道函数名是countdef 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
  5. 题目:小李为公司年会筹办各项活动,其中的抽奖环节备受关注,因此他设计了一段读取本地文件并随机抽取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的索引范围是0len(s)-1n = len(s),所以随机索引的范围是0n-1。因此,这里应该是random.randint(0, n - 1)
    • ④:这个空位于if k == 3: break之后,且与else平级。这意味着当k不等于3时(即抽奖未结束),代码会执行到这里。然而,if-else结构已经处理了“重复”和“不重复”两种情况,并且循环会自然继续。这个位置实际上不需要任何代码来维持循环逻辑。在Python中,如果语法上需要一个语句但逻辑上不需要执行任何操作,可以使用pass语句作为占位符。或者,如果代码逻辑允许,这里也可以留空(但通常不推荐,可能让代码意图不明确)。因此,最合适的填充是pass
posted @ 2025-11-28 00:01  梁君牧  阅读(11)  评论(0)    收藏  举报