python习题


Python 习题(60 道)

一、Python 基本语法(10 题)

  1. Python 中 is== 的区别是什么?请举例说明。
  2. 请写出 Python 中所有的基本数据类型,并分别举例说明。
  3. 请解释 andornot 逻辑运算符的作用,并写出示例代码。
  4. Python 中的 pass 语句有什么作用?
  5. print(1, 2, 3, sep='-', end='!') 的输出结果是什么?
  6. 请写出一个 while 循环,使其从 10 递减到 1,并在每次循环中打印当前数值。
  7. range(2, 10, 2) 生成的数列是什么?
  8. a, b = b, a 这行代码的作用是什么?为什么能这样写?
  9. 请写一个 if-elif-else 语句,根据 score 的值判断成绩等级(90 以上优秀,70-89 良好,60-69 及格,60 以下不及格)。
  10. bool([]) == bool('') == bool(None) 的结果是什么?为什么?

二、数据结构(列表、元组、字典、集合)(10 题)

  1. 请写一段代码,将 ['a', 'b', 'c'] 变为 'a_b_c'

  2. 如何从列表 [3, 1, 4, 1, 5, 9, 2] 中删除所有的 1

  3. 下面代码的输出结果是什么?

python a = (1, 2, 3) a[1] = 4

  1. 如何交换列表 [1, 2, 3, 4, 5] 中的第一个和最后一个元素?

  2. 请写出字典的三种遍历方式,并分别举例说明。

  3. 集合 set 有哪些常见操作?请举例说明。

  4. 已知 list1 = [1, 2, 3]list2 = list1,执行 list1.append(4)list2 的值是什么?为什么?

  5. Python 中如何合并两个字典?请写出至少两种方法。

  6. a = {1, 2, 3}; b = {3, 4, 5},如何计算它们的交集和并集?

  7. 如何使用列表推导式生成一个包含 1-10 之间奇数的列表?

三、函数(10 题)

  1. 如何定义一个 Python 函数?请写一个计算两个数之和的函数。

  2. 下面代码的输出结果是什么?为什么?

python def func(x, y=[]): y.append(x) return y print(func(1)) print(func(2))

  1. 请解释 *args**kwargs 在函数参数中的作用,并举例说明。

  2. 递归函数是什么?请写一个递归函数计算 n 的阶乘。

  3. lambda 表达式的作用是什么?请写一个 lambda 函数计算两个数的乘积。

  4. Python 中函数的默认参数值在什么时候被计算?请写出示例代码。

  5. 请写一个 Python 函数,接收可变数量的参数,并返回所有参数的平方值组成的列表。

  6. Python 变量的作用域有哪些?请解释 LEGB 规则。

  7. 下面代码的输出结果是什么?

python def outer(): x = 10 def inner(): print(x) return inner f = outer() f()

  1. Python 中如何返回多个值?请写一段示例代码。

四、面向对象编程(10 题)

  1. Python 中如何定义一个类?请写一个包含 nameage 属性的 Person 类。

  2. self 关键字在 Python 类中有什么作用?

  3. 什么是类变量和实例变量?请举例说明它们的区别。

  4. __init__ 方法在 Python 中的作用是什么?

  5. 下面代码的输出结果是什么?

python class A: def __init__(self): self.x = 1 a = A() b = A() a.x = 2 print(b.x)

  1. 什么是继承?请写一个 Student 类继承 Person 类,并新增 grade 属性。

  2. 如何在子类中调用父类的方法?请写示例代码。

  3. Python 中的 __str__ 方法的作用是什么?

  4. 什么是多态?请写示例代码说明。

  5. super() 在 Python 中的作用是什么?

五、多任务(5 题)

  1. Python 线程和进程的区别是什么?
  2. 如何使用 threading 模块创建一个线程?请写示例代码。
  3. 线程同步是什么?请写一个使用 Lock 进行同步的代码示例。
  4. GIL(全局解释器锁) 是什么?它对 Python 多线程有什么影响?
  5. 如何使用 multiprocessing 创建一个进程池?请写示例代码。
  6. Python 进程和线程的区别是什么?在什么情况下使用进程比线程更合适?
  7. threading 模块和 multiprocessing 模块的主要区别是什么?
  8. 如何使用 threading.Thread 创建并启动多个线程?请写示例代码。
  9. Python 中如何使用 Queue 在多个线程之间进行数据通信?请写示例代码。
  10. 什么是守护线程(Daemon Thread)?如何创建一个守护线程?
  11. Python 如何控制线程同步?请分别使用 LockRLock 实现同步示例。
  12. 解释 Condition 在多线程中的作用,并写一个示例代码。
  13. Python 的 Event 在多线程中如何使用?请写示例代码。
  14. Python 的 Semaphore 在多线程中的作用是什么?请写示例代码。
  15. multiprocessing 中如何使用 Pool 进行进程池管理?请写示例代码。

六、模块与包(5 题)

  1. 什么是 Python 模块?如何导入一个模块?
  2. import module as mfrom module import * 有什么区别?
  3. Python 中如何自定义一个模块?请写示例代码。
  4. sys.path 的作用是什么?
  5. Python 包(package)和模块(module)有什么区别?
  6. 什么是 Python 标准库?请列举几个常用的标准库。
  7. __name__ == "__main__" 在 Python 中的作用是什么?
  8. Python 如何创建并导入自定义模块?请写示例代码。
  9. import module as mfrom module import * 有什么不同?
  10. Python 中 sys.modules 的作用是什么?
  11. __init__.py 在 Python 包中的作用是什么?是否可以省略?
  12. Python 中如何动态导入一个模块?请写示例代码。
  13. Python 中 importlib 模块的作用是什么?请写示例代码说明。
  14. Python 如何获取一个模块的所有函数和变量?
  15. sys.path` 变量的作用是什么?如何添加自定义模块的路径?

七、闭包与装饰器(5 题)

  1. 什么是闭包?请写一个示例代码说明。

  2. Python 中如何定义一个装饰器?请写一个打印函数执行时间的装饰器。

  3. functools.wraps 在装饰器中有什么作用?

  4. 装饰器可以带参数吗?请写示例代码。

  5. 如何使用多个装饰器修饰一个函数?

  6. 什么是闭包(closure)?请写一个示例代码说明。

  7. 在 Python 中,闭包中如何修改外部函数的变量?请写示例代码。

  8. Python 如何判断一个函数是否是闭包?请写示例代码。

  9. 下面代码的输出是什么?为什么?

```python def outer(x): def inner(y): return x + y return inner

f = outer(10) print(f(5)) ```

  1. 什么是装饰器?装饰器的作用是什么?

  2. 如何使用装饰器计算函数的执行时间?请写示例代码。

  3. 如何给装饰器传递参数?请写示例代码说明。

  4. Python 的 functools.wraps 在装饰器中的作用是什么?

  5. 请写一个装饰器,使被装饰的函数执行 3 次。

  6. 如何使用多个装饰器修饰同一个函数?请写示例代码。

八、迭代器与生成器(5 题)

  1. Python 中的 iter()next() 方法有什么作用?

  2. 下面代码的输出是什么?

python a = [1, 2, 3] it = iter(a) print(next(it)) print(next(it))

  1. 什么是生成器?如何使用 yield 关键字创建一个生成器?

  2. yieldreturn 有什么区别?

  3. 如何使用生成器创建一个无限的斐波那契数列?请写示例代码。

  4. Python 中 iter()next() 的作用是什么?

  5. 如何自定义一个迭代器?请实现一个 Counter 迭代器,每次调用返回递增的数字。

  6. 下面代码的输出是什么?

python a = [1, 2, 3] it = iter(a) print(next(it)) print(next(it))

  1. StopIteration 异常什么时候会发生?如何正确处理它?

  2. 什么是生成器?生成器和迭代器的区别是什么?

  3. Python 中如何使用 yield 关键字创建一个生成器?请写示例代码。

  4. yieldreturn 有什么区别?

  5. 如何使用生成器创建一个无限的斐波那契数列?请写示例代码。

  6. Python 如何将生成器转换为列表?是否有更高效的方法?

  7. 如何使用 send() 方法向生成器发送数据?请写示例代码。

编程题目:

多任务(5 题)

  1. 线程与进程
  2. 使用 threading 模块创建两个线程:
    • 线程 1 每秒打印一次 "Thread 1 is running",共打印 5 次。
    • 线程 2 每 2 秒打印一次 "Thread 2 is running",共打印 3 次。
  3. 线程执行完毕后,主线程打印 "All threads are done"
  4. 线程同步
  5. 创建两个线程:
    • 线程 1 负责每秒向一个共享列表 data 中添加一个随机整数,共添加 10 次。
    • 线程 2 负责每 2 秒从 data 中读取一个元素并打印,共读取 5 次。
  6. 使用 threading.Lock 确保数据读取与写入的同步性。
  7. 进程池
  8. 使用 multiprocessing.Pool 创建一个包含 4 个进程的进程池,计算 1 到 10 的平方,并返回结果。
  9. 生产者-消费者模型
  10. 使用 queue.Queue 实现生产者-消费者模型:
    • 生产者线程每秒向队列中放入一个数字(1 到 10)。
    • 消费者线程每 2 秒从队列中取出一个数字并打印。
  11. 运行 10 秒后结束程序。
  12. 多进程文件下载
  13. 创建 3 个进程,每个进程模拟从不同的 URL 下载文件(可以使用 time.sleep() 模拟下载过程)。
  14. 每个进程在下载完成后打印 "Download complete: <文件名>"

模块与包(5 题)

  1. 自定义模块
  2. 创建一个 Python 模块 mymath.py,其中包含:
    • add(a, b): 返回两个数的和。
    • subtract(a, b): 返回两个数的差。
    • multiply(a, b): 返回两个数的积。
  3. 编写 main.py,导入 mymath 模块,并使用这些函数进行运算。
  4. 动态导入模块
  5. 编写一个程序,输入一个模块名(如 math),程序动态导入该模块,并打印该模块的所有函数。
  6. 自定义包
  7. 创建一个 Python 包 mypackage,包含:
    • mathutils.py: 实现基本数学运算(加法、减法)。
    • stringutils.py: 实现字符串操作(统计字符串长度、转换大小写)。
  8. 编写 main.py,使用 mypackage 进行数学运算和字符串操作。
  9. 模块路径管理
  10. 创建 config.py,其中包含一个变量 APP_NAME = "MyApplication"
  11. main.py 中,修改 sys.path,确保可以正确导入 config.py 并打印 APP_NAME
  12. 获取模块信息

  13. 编写一个程序,导入 math 模块,并打印该模块中所有的变量、函数和类。


闭包与装饰器(5 题)

  1. 闭包计算器

  2. 定义一个 counter() 函数,返回一个闭包,每次调用闭包时,它的值都会加 1,并返回当前计数值。

  3. 函数缓存装饰器

  4. 编写一个装饰器 cache_decorator,用于缓存函数的计算结果。

  5. 被装饰的函数如果再次调用相同参数,则直接返回缓存值,而不是重新计算。

  6. 执行时间装饰器

  7. 编写一个装饰器 timing_decorator,计算函数执行时间,并在函数执行完成后打印耗时。

  8. 日志装饰器

  9. 编写一个 log_decorator 装饰器:

  10. 在函数执行前打印 "Executing <函数名>"
  11. 在函数执行后打印 "Execution finished"
  12. 测试装饰器,装饰一个计算两个数乘积的函数。

  13. 装饰器嵌套

  14. 编写两个装饰器:

  15. bold_decorator: 给字符串加粗 (<b>文本</b>)。
  16. italic_decorator: 给字符串加斜体 (<i>文本</i>)。
  17. 测试装饰器嵌套(先加粗后加斜体,或先加斜体后加粗)。

迭代器与生成器(5 题)

  1. 自定义迭代器

  2. 创建一个 EvenNumbers 迭代器类,生成 2, 4, 6, 8, …(直到 100)。

  3. 生成器函数

  4. 编写一个 fibonacci(n) 生成器,生成前 n 个斐波那契数。

  5. 无限序列生成器

  6. 编写一个生成器 countdown(n),从 n 倒数到 0,每次 yield 一个值。

  7. 生成器表达式

  8. 使用生成器表达式创建一个生成 1 到 100 偶数的生成器,并遍历打印所有值。

  9. 双向通信生成器

  10. 编写一个 double_numbers() 生成器:

  11. 使用 send() 方法接收一个数,并返回其两倍的值。
  12. 测试生成器的 send() 方法。

0 条评论

发表评论

暂无评论,欢迎发表您的观点!