【数据分析基础】期末复习必备!Python编程语言知识点

在Python编程语言的学习过程中,测试题是检验我们理解程度的重要工具。本文将介绍一些Python编程语言的测试题目,提供正确答案,并给出做题思路,帮助大家更好地掌握Python的知识点。

第一章

单选题

题目1: Python安装扩展库最常用的工具是( )。
选项:
   A. Anaconda
   B. pip
   C. Pycharm
   D. IDLE
答案: B
做题思路: `pip`是Python的官方包管理工具,用于安装和管理Python库。

题目2: 下面用于导入Python标准库对象错误的语句是( )。
选项:
   A. import math as m
   B. from math import sin
   C. import math.*
   D. from math import *
答案: C
做题思路: 选项C使用了通配符`*`,这是不推荐的做法,因为它会导入整个模块的所有内容。

题目3: 以下选项中,不是Python语音特点的是( )。
选项:
   A. 强制可读:Python语音通过强制缩进来体现语句间的逻辑关系
   B. 变量声明:Python语音具有使用变量需要先定义后使用的特点
   C. 平台无关:Python程序可以在任何安装了Python解释器的操作系统环境中执行
   D. 黏性扩展:Python语言能够集成C、C++等语言编写的代码
答案: B
做题思路: Python是动态类型语言,使用变量前不需要声明,且可以改变类型。

题目4: 下列关于Python的说法不正确的选项是( )。
选项:
   A. 正确的缩进对Python程序是非常重要的
   B. 在表达式中圆括号可以改变运算顺序
   C. Python程序可以在任何安装了Python解释器的操作系统环境中执行
   D. Python程序中的空格和空行可有可无,但适当地增加空格和空喊可以提高代码的可读性
答案: D
做题思路: Python使用缩进来定义代码块,空格和空行虽然不影响程序运行,但影响代码的可读性。

题目5: 在Python3.x中,input()函数的返回值类型为( )。
选项:
   A. list
   B. str
   C. int
   D. object
答案: B
做题思路: `input()`函数返回的是用户输入的字符串,因此返回类型是`str`。

题目6: 下列关于数据分析的描述,说法错误的是( )。
选项:
   A. 模型优化步骤可以与分析和建模步骤同步进行
   B. 数据分析过程中最核心的步骤是分析与建模
   C. 数据分析时只能够使用数值型数据
   D. 广义的数据分析包括狭义分析和数据挖掘
答案: C
做题思路: 数据分析可以使用多种类型的数据,不仅限于数值型数据。

题目7: 下列不属于数据分析的应用场景的是( )。
选项:
   A. 一周天气预测
   B. 合理预测航班座位需求数量
   C. 为用户提供个性化服务
   D. 某人一生的命运预测
答案: D
做题思路: 数据分析通常基于可量化的数据,不包括无法量化的个人命运预测。

题目8: 下列不属于Python优势的是( )。
选项:
   A. 语法简洁,程序开发速度快
   B. 入门简单,功能强大
   C. 程序的运行速度在所有计算机语言的程序中最快
   D. 开源,可以自由阅读源代码并对其进行改动
答案: C
做题思路: Python的优势在于其语法简洁、易于学习、功能强大和开源,而非运行速度。

判断题

题目9: Python是一种跨平台、开源、免费的高级动态编程语言。
选项:
   A. 对
   B. 错
答案: A
做题思路: Python确实是跨平台、开源且免费的。

题目10: 不可以在同一台计算机上安装多个Python版本。
选项:
   A. 对
   B. 错
答案: B
做题思路: 使用版本管理工具可以在一台计算机上安装和管理多个Python版本。

题目11: 已知 x = 3,那么赋值语句 x = 'abcedfg' 是无法正常执行的。
选项:
   A. 对
   B. 错
答案: B
做题思路: Python是动态类型语言,变量可以重新赋值给任何类型。

题目12: Python变量使用前必须先声明,并且一旦声明就不能再当前作用域内改变其类型。
选项:
   A. 对
   B. 错
答案: B
做题思路: Python不需要声明变量,且可以在作用域内改变变量类型。

题目13: Python不允许使用关键字作为变量名,允许使用内置函数名作为变量名,但这会改变函数名的含义。
选项:
   A. 对
   B. 错
答案: B
做题思路: Python不允许使用关键字和内置函数名作为变量名。

题目14: 只有Python扩展库才需要导入以后才能使用其中的对象,Python标准库不需要导入即可使用其中的所有对象和方法。
选项:
   A. 对
   B. 错
答案: B
做题思路: 无论是标准库还是扩展库,都需要先导入才能使用。

题目15: Python使用缩进来体现代码之间的逻辑关系。
选项:
   A. 对
   B. 错
答案: A
做题思路: Python使用缩进来定义代码块和逻辑结构。

第二章

填空题

  1. 题目: 表达式 int(4**0.5) 的值为____。

    • 解析: 计算表达式前需了解运算优先级,先计算指数4**0.5得到2,再通过int()函数转换类型,最终结果为2。
  2. 题目: Python内置函数____可以返回列表、元组、字典、集合、字符串以及range对象中元素个数。

    • 解析: 这里考查的是Python中统计容器内元素数量的函数,正确答案是len()
  3. 题目: 表达式 sorted([111, 2, 33], key=lambda x: len(str(x))) 的值为____。

    • 解析: 该表达式使用sorted()函数排序,并以元素转换为字符串后的长度作为排序依据,因此2(长度为1)最前,接着是33(长度为2),最后是111(长度为3)。
  4. 题目: 表达式 min(['11', '2', '3']) 的值为____。

    • 解析min()函数比较的是字符串的字典序,'11'在'2'和'3'之前,故最小值为'11'。
  5. 题目: 已知x=3和y=5,执行语句 x, y = y, x 后x的值是____。

    • 解析: 这是Python中的变量交换经典操作,执行后x的值变为原来的y,即5。
  6. 题目: print(1, 2, 3, sep='#') 的输出结果为____。

    • 解析sep参数指定了打印时元素间的分隔符,因此输出结果为数字间以#相连。
  7. 题目: 已知列表对象 x = ['11', '2', '3'],则表达式 max(x, key=len) 的值为____。

    • 解析: 类似于第3题,这里根据字符串长度最大来选取,因此结果为'11'。
  8. 题目: 表达式 3<5>2 的值为____。

    • 解析: 这是一个链式比较,等价于(3<5) and (5>2),结果为True。
  9. 题目: 表达式 {1, 2, 3} & {3, 4, 5} 的执行结果是____。

    • 解析: 集合的交集运算,找出两个集合共有的元素,即{3}。
  10. 题目: 表达式 list(zip('abcd', [1, 2, 3])) 的执行结果是____。

    • 解析zip()函数将两个可迭代对象配对,list()将其转换为列表,结果为字符与数字的对应对。

判断题

  1. 题目: 表达式 'ab' in 'acbed' 的值为错。
    • 解析: 字符串'ab'不是'acbed'的子串,因此表达式的值为False。
  2. 题目: 表达式 [3] in [1, 2, 3, 4] 的值为错。
    • 解析: 这里比较的是列表整体,而非元素,列表[3]并不在给定的大列表内。
  3. 题目print(0.1+0.2==0.3) 输出的结果为错。
    • 解析: 浮点数运算存在精度问题,0.1+0.2不严格等于0.3,因此比较结果为False。

通过这些题目,我们不仅复习了Python的基本语法,还加深了对字符串、列表、集合、字典等数据结构操作及内置函数应用的理解。

第三章

单选题

  1. 题目:假设列表对象aList的值为[3, 4, 5, 6, 7, 9, 11, 13, 15, 17],那么切片aList[3:7]得到的值是?

    解析:切片操作中,aList[开始:结束]不包括结束位置的元素。因此,从索引3(即元素6)开始到索引6(不包括7,即元素11)结束的子列表为[6, 7, 9, 11]。
  2. 题目:语句序列 “nums = set([1,2,2,3,3,3,4]);print(len(nums));”的运行结果是?

    解析:集合自动去重,所以set([1,2,2,3,3,3,4])会变成{1,2,3,4},长度为4。
  3. 题目:语句list(range(0,8,2))执行结果为?

    解析:range函数生成从0开始到8(不包含)结束,步长为2的序列,即[0, 2, 4, 6]。
  4. 题目:已知字典data={‘a’: 97 ,‘A’: 65 },那么data.get(‘a’,None)的值为?

    解析:get方法用于获取字典中指定键的值,如果键不存在则返回第二个参数的值。这里键'a'存在,其值为97。
  5. 题目:假设列表对象aList的值为[3, 4, 5, 6, 7, 9, 11, 13, 15, 17],那么切片aList[2:6:2]得到的值是?

    解析:此切片从索引2开始,到索引6结束(不包含),且步长为2,因此选取的元素为[5, 7]。
  6. 题目:长度为len的Python列表、元组和字符串中最后一个元素的下标为?

    解析:在Python中,负数索引从-1开始,表示最后一个元素,因此最后一个元素的下标为-1。
  7. 题目:已知元组对象t=("cat", "dog", "tiger", "human"),则语句 t[::–1] 执行的结果是?

    解析:步长为负数时,表示反向切片,因此输出为元组元素的逆序,即('human', 'tiger', 'dog', 'cat')。
  8. 题目:列表式 [i*2 for i in 'Python'] 的执行结果是?

    解析:列表推导式遍历字符串'Python'中的每个字符,将每个字符重复一次,得到['PP', 'yy', 'tt', 'hh', 'oo', 'nn']。
  9. 题目:下面代码的输出结果是

     

        解析:zip函数将两个列表配对形成元组,然后dict将这些元组转换为字典,结果为{'a': 1, 'b':         2, 'c': 3}。

        10.题目:下列代码执行的结果是?

答案: B: 0,1,2,3,4,

解析: range(5)生成从0到4的整数序列,for循环遍历这些数字并打印。end=","参数使得print函数在每次调用后输出逗号而非换行,导致所有数字打印在同一行,并以逗号分隔,最后以逗号结尾。

11-20的题与1-10完全一致

填空题

21. Python语句list(range(1,10,3))执行结果为____。

答案: [1, 4, 7]

解析: range()函数生成一个从开始值到结束值(不包括)的数字序列,步长为指定值。这里从1开始,每次增加3,直到但不包括10,因此结果为1、4、7。

22. 切片操作list(range(6))[::2]执行结果为____。

答案: [0, 2, 4]

解析: 切片操作中,[::2]表示从列表开始到结束,每隔一个元素取一个。由于range(6)生成的是0到5的序列,故取偶数位置的元素即为0、2、4。

23. 已知x = {1:2},执行语句x[2] = 3后,x的值为____。

答案: {1: 2, 2: 3}

解析: 这里对字典x添加了一个新的键值对2:3,原字典中的键值对不变,因此结果是两个键值对的集合。

24. 表达式{1, 2, 3, 4} - {3, 4, 5, 6}的值为____。

答案: {1, 2}

解析: 集合的差集运算,左边集合中存在但右边集合中不存在的元素构成新集合。

25. 表达式set([1, 1, 2, 3])的值为____。

答案: {1, 2, 3}

解析: set()函数将列表转换为集合,自动去除重复元素。

26. 列表推导式[i for i in range(100) if i%13==0]得到的列表是____。

答案: [0, 13, 26, 39, 52, 65, 78, 91]

解析: 这个列表推导式遍历0到99的整数,选择其中能被13整除的数。

27. 已知x = [3, 5, 7],执行语句x[len(x):] = [1, 2]后,x的值为____。

答案: [3, 5, 7, 1, 2]

解析: 这行代码在列表x的末尾追加了另一个列表[1, 2]

28. 表达式list(zip([1,2], [3,4]))的值为____。

答案: [(1, 3), (2, 4)]

解析: zip()函数将两个列表对应位置的元素配对,形成元组的列表。

29. 表达式[x for x in [1,2,3,4,5] if x<3]的值为____。

答案: [1, 2]

解析: 列表推导式筛选出列表中小于3的元素。

30. 表达式[index for index, value in enumerate([3,5,7,3,7]) if value == max([3,5,7,3,7])]的值为____。

答案: [2, 4]

解析: 使用enumerate()遍历列表同时获取索引和值,筛选出最大值对应的索引,这里最大值7出现了两次,其索引为2和4。

31-40的题与21-30完全一致

41. '#'.join('abcdefg'.split('cd')) 的值为____。

  • 答案'ab#efg'

  • 解析: 首先,'abcdefg'.split('cd') 会根据'cd'将字符串拆分为两部分,得到列表['ab', 'efg']。接着,使用'#'.join()方法将这个列表中的字符串用'#'连接起来,得到'ab#efg'。

42. 已知字符串 x = 'hello world',那么执行语句 x.replace('hello', 'hi') 之后,x的值为____。

  • 答案'hi world'

  • 解析: 这里需要注意的是,字符串的replace()方法并不会改变原字符串,而是返回一个新的字符串。因此,执行x.replace('hello', 'hi')后,原字符串x的值仍然是'hello world'。

43. 表达式 'ab' in 'acbed' 的执行结果为____。

  • 答案False

  • 解析: 这个表达式是检查字符串'acbed'中是否包含子字符串'ab'。由于'acbed'中并没有连续的'ab',所以结果为False。

44. 已知 x = 'abcdef',则表达式 x[3:] + x[:3] 的值为____。

  • 答案'defabc'

  • 解析: 字符串切片操作中,x[3:]是从索引3开始到字符串结束的部分,即'def'x[:3]是到索引2为止的部分,即'abc'。将两者相加,结果为'defabc'

45. "mysqlsqlserverPostgresQL".count("sql",3) 输出的结果是 ____。

  • 答案1

  • 解析count方法用于计算子串在字符串中出现的次数,从指定索引开始计算。这里从索引3开始查找"sql",字符串中从第3个位置开始只有一个"sql",因此计数为1

第四章

单选题

函数的理解与使用

1.题目:以下内容关于函数描述正确的是?

                A. 函数用于创建对象

                B. 函数可以让代码执行更快

                C. 函数是一段代码用于执行特定的任务

                D. 函数都必须有执行参数

  • 正确答案:C
  • 解题思路:函数是封装的代码块,用于执行特定任务,不一定需要参数。

2.题目:以下代码输出结果为?

def printLine(text):
    print(text, ' Runoob')
printLine('Python')
  • 正确答案:B. Python Runboob
  • 解题思路:函数printLine定义了一个参数text,并在打印时与字符串' Runoob'拼接,理解函数参数如何传递,注意字符串格式化和拼接。

代码逻辑分析

3.题目:如果函数没有使用return语句,则函数返回的是?

  • 正确答案:B. None对象
  • 解题思路:在Python中,如果没有显式的return语句,函数默认返回None

4.题目:以下代码输出的结果是?

def greetPerson(*name):
    print('Hello', name)
greetPerson('Runoob', 'Google')
  • 正确答案:B. Hello ('Runoob', 'Google')
  • 解题思路*name收集所有位置参数为一个元组。使用星号(*)定义的参数可以接收任意数量的非关键字参数,并以元组形式存储。因此,传入的两个字符串会被打印为一个元组。

5.题目:以下代码输出的结果是?

numbers = [1, 3, 6]
newNumbers = tuple(map(lambda x: x, numbers))
print(newNumbers)
  • 正确答案:B. (1, 3, 6)
  • 解题思路map函数将列表中的每个元素通过lambda函数映射自身(即不做改变),然后转换为元组。因此,输出是一个与原列表相同元素的元组。

题目6: 以下两次调用函数f(),输出的结果分别是()。

i = 3
def f(n=i):
    print(n)

f()
i = 5
f()

                A. 3 5

                B. 3 3

                C. 5 5

                D. 3 不确定 

  • 答案: B 做题思路: 第一次调用f()时,n默认值为i即3,输出3。之后虽然i的值被改为5,但f函数内的n值已被初始化,再次调用f()时,依然输出3,因为默认参数在函数定义时就被计算了。

题目7: 以下代码输出的结果是()。

def demo(a, b, c=5):
    print(a, b, c)

demo(c=8, a=9, b=0)
  • A. 8 9 0

  • B. 8 9 5

  • C. 9 0 8

  • D. 9 0 5 

  • 答案: C 做题思路: 函数demo接受三个参数,使用关键字参数指定c=8,其他按默认顺序赋值,a=9,b=0,所以输出为9 0 8。

题目8: 以下代码输出的结果是()。

def demo(a, b, c):
    print(a+b+c)

dic = {1: 'a', 2: 'b', 3: 'c'}
demo(*dic)
demo(*dic.values())

A. 6

abc

B. abc

6

C. 6

6

D. abc

abc 

  • 答案: A 做题思路: 第一次调用demo(*dic)传入字典的键作为位置参数,第二次demo(*dic.values())传入字典的值。

题目9: 以下代码输出的结果是()。

def demo(a, b, c):
    print(a+b+c)

dic = {'a': 3, 'b': 4, 'c': 5}
demo(**dic)
  • A. 12

  • B. abc

  • C. 'a':3, 'b':4, 'c':5

  • D. None 

  • 答案: A 做题思路**dic将字典解包为关键字参数。当我们使用**dic作为demo函数的参数时,Python会将字典中的键值对解包为关键字参数,并将值赋给相应的参数。具体地,'a': 3解包为a=3'b': 4解包为b=4'c': 5解包为c=5

题目10: 以下代码输出的结果是()。

L = [1, 2, 3, 4, 5]
print(list(map(lambda x: x+6, L)))
  • A. [1, 2, 3, 4, 5,6]

  • B. 1, 2, 3, 4, 5,6

  • C. [7, 8, 9, 10, 11]

  • D. 7, 8, 9, 10, 11 

  • 答案: C 做题思路map函数应用lambda表达式对列表中的每个元素加6,返回新的列表。

题目11: 以下代码输出的是()。

a = 1.0
if isinstance(a, int):
    print("{} is int".format(a))
else:
    print("{} is not int".format(a))
  • A. 1.0 is int

  • B. 1.0 is not int

  • C. 出错

  • D. 无输出 

  • 答案: B 做题思路isinstance(a, int)检查变量a是否为int类型,因为1.0是浮点数,所以判断为不是int

题目12: 给出如下代码,输出的结果是()。

def func(a, b):
    c = a**2 + b
    b = a
    return c

a = 10
b = 100
print(func(a, b) + a)
  • A. 120

  • B. 130

  • C. 210

  • D. 300 

  • 答案: C 做题思路: 函数func返回a**2 + b的值,这里的b是传入的参数,未被修改,所以返回10**2 + 100

题目13: 下面代码的输出结果是()。

for s in "HelloWorld":
    if s == "W":
        continue
    print(s, end="")
  • A. World

  • B. Hello

  • C. HelloWorld

  • D. Helloorld 

  • 答案: D 做题思路: 当字符为"W"时,continue跳过此次循环迭代,不打印"W"。

题目14: 以下选项中描述错误的是()。

import random
num = random.randint(1, 10)
while True:
    guess = input()
    i = int(guess)
    if i == num:
        print("你猜对了")
        break
    elif i < num:
        print("小了")
    elif i > num:
        print("大了")
  • A. random.randint(1,10)生成一个[1,10]之间的随机整数

  • B. “import random”这行代码是可以省略的

  • C. 这段代码实现了简单的猜数字游戏

  • D. “while True:”创建了一个无条件执行的无限循环 

  • 答案: B 做题思路import random是必须的,因为代码中使用了random模块的功能。

题目15: 上述程序输出值的个数是()。

age = 13
start = 2
if age % 2 != 0:
    start = 1
for x in range(start, age + 2, 2):
    print(x)
  • A. 5

  • B. 6

  • C. 7

  • D. 8 

  • 答案: C 做题思路: 循环从start开始,根据age的奇偶性确定起始值,循环至age+2,步长为2,计算输出的奇数个数。

填空题

题目16: 下列程序输出的结果是____。

for n in range(10, 1, -1):
    for i in range(2, n):
        if n % i == 0:
            break
    else:
        print(n, end=' ')
  • 答案: 7 5 3 2
  • 做题思路: 程序意在打印10到1之间的所有质数,质数定义为只能被1和自身整除的大于1的自然数。通过双层循环判断质数并打印,内层循环找到非质数则中断,外层循环逆序打印质数。

题目17: 下列程序输出的结果是()。

for n in range(10, 1, -1):
    for i in range(2, n):
        if n % i == 0:
            break
    else:
        print(n, end=' ')
        break
  • 答案: 7
  • 做题思路: 同题目16,但一旦找到非质数,内层循环中断,外层循环也通过break中断。

题目18: 下列代码中循环体会执行多少次?

number = 20
while number > 0:
    number -= 3
    print(number, end=' ')
  • 答案: 7
  • 做题思路: 初始number为20,循环每次将number减3,直到小于等于0,计算执行次数。

题目19: 下列程序输出的结果是:____。

for num in range(0, 20, 3):
    if num % 5 != 0:
        print(num, end=' , ')
  • 答案: 3,6,9,12,18
  • 做题思路: 循环从0开始,步长为3,检查是否不是5的倍数,若是则打印。

题目20: 下列程序输出的结果是:____。

scores = [89,70,49,87,92,63,71,78,81,79,82,75,90,54]
groups = {'优秀':0, '良':0, '中':0, '及格':0, '不及格':0}
for score in scores:
    if score>=90:
        groups['优秀'] = groups['优秀']+1
    elif score>=80:
        groups['良'] = groups['良']+1
    elif score>=70:
        groups['中'] = groups['中']+1
    elif score>=60:
        groups['及格'] = groups['及格']+1
    else:
        groups['不及格'] = groups['不及格']+1
print(groups)
  • 答案: {'优秀': 2, '良': 4, '中': 5, '及格': 1, '不及格': 2}
  • 做题思路: 根据成绩将学生分为不同的等级,并统计每个等级的学生数量。

题目21: 执行以下程序,如果输入"93python22",则输出结果是____。

w = input('请输入数字和字母构成的字符串:')
for x in w:
    if '0'<= x <= '9':
        continue
    else:
        w.replace(x,'')
print(w)
  • 答案: 93python22
  • 做题思路: 输入字符串,程序意图移除数字,但由于字符串是不可变类型,replace操作没有实际执行。

题目22: 以下程序的输出结果是()。

for i in range(3):
    for s in "abcd":
        if s=="c": 
            break
        print(s,end="")
  • 答案: ababab
  • 做题思路: 内层循环打印"abcd"中的每个字符,直到遇到"c"停止内层循环,外层循环继续。

题目23: 下列程序共输出____个值:

age = 23
start = 2
if age % 2 != 0:
    start = 1
for x in range(start, age + 2, 2):
    print(x)
  • 答案: 12
  • 做题思路: 循环从start开始至age+2,步长为2,计算输出的奇数个数。

题目24: 执行以下程序,如果分别输入“q”、“p",输出结果是____。

k = 0
while True:
    s = input('请输入q退出:')
    if s != 'q':
        k += 1
        continue
    else:
        k += 2
        break
print(k)
  • 答案: 2
  • 做题思路: 第一次输入"q",所以 if s != 'q': 这个条件不满足,直接执行 else 分支,k 会从 0 增加到 2(因为执行了 k += 2),然后退出循环,输出 k 的值,即输出 2。第二次输入"p",所以 if s != 'q': 这个条件满足,执行 k += 1(使 k 从 0 增加到 1),然后 continue 语句跳过 else 分支,再次进入循环等待下一次输入,并没有打印。

 题目25: 下列程序输出的结果是

for n in range(10, 1, -1):
    for i in range(2, n):
        if n % i == 0:
            break
    else:
        print(n, end=' ')
        break
  • 答案: 7
  • 做题思路: 同题目17。

第五章

1. Python文件读操作方法

  • 题目: 以下选项中,不是Python对文件的读操作方法的是?

    • A. read

    • B. readline

    • C. readlines

    • D. readtext

  • 解析: 正确答案是D (readtext),因为Python的文件读取方法中并不包含readtext,常用的读取方法有readreadline, 和readlines

2. 文件逐行读取并打印

  • 题目: 给出如下代码,描述错误的是?

    fname = input("请输入要打开的文件: ")
    fi = open(fname, "r")
    for line in fi.readlines():
        print(line)
    fi.close()
    • A. 通过fi.readlines()方法将文件的全部内容读入一个字典fi

    • B. 实现功能: 用户输入文件路径,以文本文件方式读入文件内容并逐行打印

    • C. 通过fi.readlines()方法将文件的全部内容读入一个列表fi

    • D. 上述代码中fi.readlines()可以优化为fi

  • 解析: 正确答案是A,因为fi.readlines()实际上是读取所有行到一个列表中,而非字典,并且直接用fi遍历也是可行的优化,但原选项表述有误。

3. 写入并立即读取文件操作

  • 题目: 执行如下代码描述错误的是?

    fname = input("请输入要写入的文件: ")
    fo = open(fname, "w+")
    ls = ["清明时节雨纷纷,","路上行人欲断魂,","借问酒家何处有?","牧童遥指杏花村。"]
    fo.writelines(ls)
    fo.seek(0)
    for line in fo:
        print(line)
    fo.close()
    • A. fo.seek(0)这行代码可以省略,不影响输出效果

    • B. fo.writelines(ls)将元素全为字符串的ls列表写入文件

    • C. 代码主要功能为向文件写入一个列表类型,并打印输出结果

    • D. 执行代码时,从键盘输入“清明.txt”,则“清明.txt”被创建

  • 解析: 正确答案是A,因为不使用fo.seek(0)将无法从文件头开始读取,影响输出。在"w+"模式下,文件指针初始位于文件开头。writelines()写入内容后,文件指针位于写入操作的最后。由于接下来使用for line in fo:进行读取,而文件对象的迭代是从当前文件指针位置开始的,所以如果省略seek(0),循环将不会执行,因为没有内容位于文件指针之后。

4. 文件打开模式

  • 题目: 以下选项中,不是Python文件打开的合法模式组合是?

    • A. "a+"

    • B. "t+"

    • C. "r+"

    • D. "w+"

  • 解析: 正确答案是B,因为"t+"并非Python文件打开的有效模式,因为"t+" 没有明确指定是只读、只写还是追加模式。正确的组合应该是 "rt+"、"wt+" 或 "at+"。

"r": 只读模式,文件指针放在文件开头。

"w": 只写模式,会覆盖文件内容,如果文件不存在则创建新文件,文件指针放在文件开头。

"a": 追加模式,如果文件存在,文件指针放在文件末尾,如果文件不存在则创建新文件。

"r+": 读写模式,文件指针放在文件开头。

"w+": 读写模式,会覆盖文件内容,如果文件不存在则创建新文件,文件指针放在文件开头。

"a+": 读写模式,如果文件存在,文件指针放在文件末尾,如果文件不存在则创建新文件。

"b": 二进制模式,可以与上述模式组合使用,如"rb"、"wb"、"ab"等。

"t": 文本模式(默认),也可以与上述模式组合使用,如"rt"、"wt"、"at"等。

5. 打开不存在的文件处理

  • 题目: 当打开一个不存在的文件时,以下选项中描述正确的是?

    • A. 文件不存在则创建文件

    • B. 一定会报错

    • C. 根据打开类型不同,可能不报错

    • D. 不存在文件无法被打开

  • 解析: 正确答案是C,因为在"w"(写模式)和"a"(追加模式)下,如果文件不存在,Python会自动创建它。在"r+"(读写模式)下,如果文件不存在,则会报错,因为需要一个已存在的文件来进行读写操作。

6. 文件迭代变量含义

题目:以下关于代码中变量x的描述正确的是?

fo = open(fname, "r")
for x in fo:
    print(x)
fo.close()
  • A. 变量x表示文件中的一个字符
  • B. 变量x表示文件中的全体字符
  • C. 变量x表示文件中的一行字符
  • D. 变量x表示文件中的一组字符
  • 选项:C. 变量x表示文件中的一行字符

  • 解析:在上述循环中,x每次迭代代表文件中的一行内容,因此C选项正确。

7. JSON模块的使用

题目:描述错误的是?

  • A. JSON 是一种流行的文件格式,主要用于在web应用程序中存储和传输数据。
  • B. JSON模块是Python的标准库,使用前不需要用import json语句导入
  • C. JSON模块是扩展库,使用前需要使用pip工具安装
  • D. json.load()用于从文件中读取json数据,json.dump()用于将数据写入到json文件。
  • 选项:B. JSON模块是Python的标准库,使用前不需要用import json语句导入

  • 解析:尽管JSON模块确实是Python标准库的一部分,但在使用前仍需通过import json导入。因此,B选项错误。

8. CSV文件特性

题目:关于CSV文件的描述,错误的是?

  • A. CSV文件的每一行是一维数据,可以使用Python中的列表类型表示
  • B. 整个CSV文件是一个二维数据
  • C. CSV文件格式是一种通用的、相对简单的文件格式,应用于程序之间转移表格数据
  • D. CSV文件通过多种编码表示字符
  • 选项:D. CSV文件通过多种编码表示字符

  • 解析:虽然CSV文件在实际使用中可能采用不同的编码,但题目表述并不准确反映CSV的本质特征,其核心是逗号分隔的值,而不是编码多样性。因此,D选项被选为错误。

9. 大数据文件处理

题目:对于特别大的数据文件,描述正确的是?

  • A. 选择内存大的计算机,一次性读入再进行操作
  • B. Python可以处理特别大的文件,不用特别关心
  • C. 使用for .. in..循环,分行读入,逐行处理
  • D. Python无法处理特别大的数据文件
  • 选项:C. 使用for .. in..循环,分行读入,逐行处理

  • 解析:处理大型文件时,逐行读取是最高效且内存友好的方式,避免了一次性加载整个文件到内存中。因此,C选项是正确的处理策略。

10. with语句的应用

题目:关于with语句描述错误的是?

  • A. 关键字with可以自动管理资源,能确保文件被正确关闭。
  • B. 读写文件应该优先考虑使用with语句
  • C. 一个with语句中可以同时建立两个文件操作对象。
  • D. with关键字只能用于文件打开操作,不能实现数据库连接或网络连接。
  • 选项:D. with关键字只能用于文件打开操作,不能实现数据库连接或网络连接。

  • 解析:实际上,with语句不仅可以用于文件操作,还能有效管理数据库连接、网络连接等多种资源,确保它们被正确关闭。因此,D选项描述错误。

通过以上题目的解析,我们不仅回顾了Python在文件操作、数据处理等方面的实用技巧,还深入了解了如何高效、安全地管理资源,这对于构建稳定、高效的Python应用程序至关重要。

第六章

单选题

题目1: 以下关于NumPy数组与列表的说法,错误的是( )。

A. 数组和列表都支持切片访问

B. 列表可以转换为NumPy数组

C. 数组支持布尔型索引访问,列表不支持

D. 数组和列表都可以有多个维度

答案: D

做题思路: NumPy数组相比Python列表,提供了更丰富的数学运算功能,包括支持多维度数组,但列表本质上是一维结构,虽然可以通过嵌套来模拟多维,但其本身并不直接支持多维数据结构。

题目2: np是numpy模块的别名。若a=np.array((2,4,6)),则a**2完成的操作是( )。

A. 数组中的每个元素乘以2

B. 数组中的第一个元素乘以2

C. 计算数组中每个元素的2次方

D. 用数组中的每个元素作为2的幂次方

答案: C

做题思路: 在NumPy中,使用**操作符对数组进行运算时,是逐元素地进行幂运算,因此这里是对每个元素求平方。

题目3: 以下关于数组对象的reshape方法的描述中,错误的是( )。

A. reshape方法可以改变数组对象的大小

B. reshape方法可以将一维数组变换为二维数组

C. reshape方法可以将二维数组变换为一维数组

D. 执行reshape方法后会返回一个新数组

答案: A

做题思路: reshape方法不改变数组内元素的总数量,即不改变数组的“大小”,而是改变其形状或维度布局,因此选项A是错误的。

题目4: a为NumPy数组对象,执行a.shape的结果为(5,),以下说法正确的是( )。

A. a的维度为5,a的大小为1

B. a的维度为1,a的大小为5

C. a的维度为2,a的大小为5

D. a的维度和大小都是5

答案: B

做题思路: 形状(5,)表示这是一个一维数组,长度为5,因此维度为1,大小即元素数量为5。

题目5: np是numpy模块的别名。若a= np.array([[11,12,13, 14],[15,16,17,18]]),则 a[a>16]的结果是( )。 A. True B. False C. [17,18] D. array([17,18])

答案: D

做题思路: 该表达式是布尔索引的应用,选取数组中大于16的元素,返回一个新的数组包含这些元素。

题目6: np是numpy模块的别名。若a=np.array([[11,12,13, 14],[15,16,17,18]]),则a[1,1:3]的结果是( )。 A. array([11, 12, 13]) B. array([15, 16, 17]) C. array([11, 13]) D. array([16, 17])

答案: D

做题思路: 索引[1,1:3]意味着选取第二行(索引从0开始)的第二个到第三个元素,即索引位置1和2的元素。

题目7: 以下关于NumPy数组的说法,正确的是( )。

A. 数组中只能存储数字,不能存储字符串

B. 数组的形状是可以变换的

C. 数组的每个轴的长度是不能改变的

D. 数组的维度数表示数组元素的数量

答案: B

做题思路: NumPy数组支持多种数据类型,包括数字和字符串,且通过reshape等方法可以改变其形状,而数组的维度数是指其维数,并非直接表示元素数量。

题目8: np是numpy模块的别名。执行np.arange(5),返回的结果是( )。

A. [1,2,3,4]

B. [1,2,3,4,5]

C. array([0, 1, 2, 3, 4,5])

D. array([0, 1, 2, 3, 4])

答案: D

做题思路: np.arange(5)生成从0开始到4的整数序列,不包括5,且返回结果是一个NumPy数组。

填空题

题目9:代码执行后输出的结果是                         

import numpy as np
the_array = np.array([49, 7, 44, 27, 13, 35, 71])
an_array = np.where((the_array > 30) & (the_array < 50), 0, the_array)
print(an_array)

答案: [ 0 7 0 27 13 0 71]

做题思路: 使用np.where函数根据条件筛选数组元素。条件(the_array > 30) & (the_array < 50)为真的元素被替换为0,其他元素保持不变。

题目10:代码执行后输出的结果是                         

import numpy as np
the_array = np.array([49, 7, 44, 27, 13, 35, 71])
an_array = np.asarray([0 if val < 25 else 1 for val in the_array])
print(an_array)

答案: [1 0 1 1 0 1 1]

做题思路: 应用了列表推导式和np.asarray,遍历the_array的每个元素,如果元素小于25,则赋予0,否则赋予1,最后将列表转换为NumPy数组。

题目11:代码执行后输出的结果是                         

data = np.zeros((4, 4), dtype=int)
data[1::2, ::2] = 1
data[::2, 1::2] = 1
print(data)

答案: [[0 0 0 0] [1 0 1 0] [0 0 0 0] [1 0 1 0]]

做题思路: 首先创建一个4x4的NumPy数组data,并初始化为全0,然后通过切片分别设置值。data[1::2, ::2] = 1设置奇数行的偶数列(索引从0开始计数)为1,data[::2, 1::2] = 1设置偶数行的奇数列为1。

  1. data[1::2, ::2] = 1

    • 1::2 表示从索引1(第二个元素,因为索引是从0开始的)开始,每隔一个选取一个元素,即选择了所有奇数行(在二维数组中,第一行是索引0,所以“奇数行”实际上是从第二行开始算起)。
    • ::2 在列方向上表示从开头开始,每隔一个选取一个元素,也就是选择了所有的偶数列。
    • 结合起来,这行代码的意思是将所有奇数行的偶数列位置上的元素赋值为1。
  2. data[::2, 1::2] = 1

    • ::2 在行方向上表示从开头开始,每隔一个选取一个元素,也就是选择了所有的偶数行。
    • 1::2 在列方向上表示从索引1开始,每隔一个选取一个元素,即选择了所有奇数列。
    • 这行代码的作用是将所有偶数行的奇数列位置上的元素赋值为1。

题目12:代码执行后输出的结果是                         

import numpy as np
the_arr = np.array([[0, 1, 2, 3, 5, 6, 7, 8],
                   [4, 5, 6, 7, 5, 3, 2, 5],
                   [8, 9, 10, 11, 4, 5, 3, 5]])
print(the_arr[0:2, 1:3])

答案: [[1 2] [5 6]]

做题思路: 使用切片操作从原始二维数组中提取前两行的第二和第三列(索引1和2),即列索引从1开始到不包括3的范围。

题目13:代码执行后输出的结果是                         

import numpy as np
arr = np.arange(1, 13)
newarr = arr.reshape(4, 3)
column_sums = newarr.sum(axis=1)
print(column_sums)

答案: [ 6 15 24 33]

做题思路: 首先,通过np.arange(1, 13)生成一个从1到12的数组,然后将其重塑为4x3的数组。使用sum(axis=1)沿着行方向计算和,即对每行的元素求和。

题目14:代码执行后输出的结果是                         

import numpy as np
arr = np.arange(1, 13)
newarr = arr.reshape(4, 3)
column_sums = newarr[:, 0:2].sum()
print(column_sums)

答案: 48

做题思路: 同样基于4x3的数组,newarr[:, 0:2]选取所有行的前两列,然后对这些元素使用sum()求和,得到这两列元素的总和为48。

  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值