Python 习题(60 道)
一、Python 基本语法(10 题)
- Python 中
is和==的区别是什么?请举例说明。 - 请写出 Python 中所有的基本数据类型,并分别举例说明。
- 请解释
and、or、not逻辑运算符的作用,并写出示例代码。 - Python 中的
pass语句有什么作用? print(1, 2, 3, sep='-', end='!')的输出结果是什么?- 请写出一个
while循环,使其从 10 递减到 1,并在每次循环中打印当前数值。 range(2, 10, 2)生成的数列是什么?a, b = b, a这行代码的作用是什么?为什么能这样写?- 请写一个
if-elif-else语句,根据score的值判断成绩等级(90 以上优秀,70-89 良好,60-69 及格,60 以下不及格)。 bool([]) == bool('') == bool(None)的结果是什么?为什么?
二、数据结构(列表、元组、字典、集合)(10 题)
-
请写一段代码,将
['a', 'b', 'c']变为'a_b_c'。 -
如何从列表
[3, 1, 4, 1, 5, 9, 2]中删除所有的1? -
下面代码的输出结果是什么?
python
a = (1, 2, 3)
a[1] = 4
-
如何交换列表
[1, 2, 3, 4, 5]中的第一个和最后一个元素? -
请写出字典的三种遍历方式,并分别举例说明。
-
集合
set有哪些常见操作?请举例说明。 -
已知
list1 = [1, 2, 3]和list2 = list1,执行list1.append(4)后list2的值是什么?为什么? -
Python 中如何合并两个字典?请写出至少两种方法。
-
a = {1, 2, 3}; b = {3, 4, 5},如何计算它们的交集和并集? -
如何使用列表推导式生成一个包含 1-10 之间奇数的列表?
三、函数(10 题)
-
如何定义一个 Python 函数?请写一个计算两个数之和的函数。
-
下面代码的输出结果是什么?为什么?
python
def func(x, y=[]):
y.append(x)
return y
print(func(1))
print(func(2))
-
请解释
*args和**kwargs在函数参数中的作用,并举例说明。 -
递归函数是什么?请写一个递归函数计算 n 的阶乘。
-
lambda表达式的作用是什么?请写一个lambda函数计算两个数的乘积。 -
Python 中函数的默认参数值在什么时候被计算?请写出示例代码。
-
请写一个 Python 函数,接收可变数量的参数,并返回所有参数的平方值组成的列表。
-
Python 变量的作用域有哪些?请解释
LEGB规则。 -
下面代码的输出结果是什么?
python
def outer():
x = 10
def inner():
print(x)
return inner
f = outer()
f()
- Python 中如何返回多个值?请写一段示例代码。
四、面向对象编程(10 题)
-
Python 中如何定义一个类?请写一个包含
name和age属性的Person类。 -
self关键字在 Python 类中有什么作用? -
什么是类变量和实例变量?请举例说明它们的区别。
-
__init__方法在 Python 中的作用是什么? -
下面代码的输出结果是什么?
python
class A:
def __init__(self):
self.x = 1
a = A()
b = A()
a.x = 2
print(b.x)
-
什么是继承?请写一个
Student类继承Person类,并新增grade属性。 -
如何在子类中调用父类的方法?请写示例代码。
-
Python 中的
__str__方法的作用是什么? -
什么是多态?请写示例代码说明。
-
super()在 Python 中的作用是什么?
五、多任务(5 题)
- Python 线程和进程的区别是什么?
- 如何使用
threading模块创建一个线程?请写示例代码。 - 线程同步是什么?请写一个使用
Lock进行同步的代码示例。 GIL(全局解释器锁)是什么?它对 Python 多线程有什么影响?- 如何使用
multiprocessing创建一个进程池?请写示例代码。 - Python 进程和线程的区别是什么?在什么情况下使用进程比线程更合适?
threading模块和multiprocessing模块的主要区别是什么?- 如何使用
threading.Thread创建并启动多个线程?请写示例代码。 - Python 中如何使用
Queue在多个线程之间进行数据通信?请写示例代码。 - 什么是守护线程(Daemon Thread)?如何创建一个守护线程?
- Python 如何控制线程同步?请分别使用
Lock和RLock实现同步示例。 - 解释
Condition在多线程中的作用,并写一个示例代码。 - Python 的
Event在多线程中如何使用?请写示例代码。 - Python 的
Semaphore在多线程中的作用是什么?请写示例代码。 - 在
multiprocessing中如何使用Pool进行进程池管理?请写示例代码。
六、模块与包(5 题)
- 什么是 Python 模块?如何导入一个模块?
import module as m和from module import *有什么区别?- Python 中如何自定义一个模块?请写示例代码。
sys.path的作用是什么?- Python 包(package)和模块(module)有什么区别?
- 什么是 Python 标准库?请列举几个常用的标准库。
__name__ == "__main__"在 Python 中的作用是什么?- Python 如何创建并导入自定义模块?请写示例代码。
import module as m和from module import *有什么不同?- Python 中
sys.modules的作用是什么? __init__.py在 Python 包中的作用是什么?是否可以省略?- Python 中如何动态导入一个模块?请写示例代码。
- Python 中
importlib模块的作用是什么?请写示例代码说明。 - Python 如何获取一个模块的所有函数和变量?
- sys.path` 变量的作用是什么?如何添加自定义模块的路径?
七、闭包与装饰器(5 题)
-
什么是闭包?请写一个示例代码说明。
-
Python 中如何定义一个装饰器?请写一个打印函数执行时间的装饰器。
-
functools.wraps在装饰器中有什么作用? -
装饰器可以带参数吗?请写示例代码。
-
如何使用多个装饰器修饰一个函数?
-
什么是闭包(closure)?请写一个示例代码说明。
-
在 Python 中,闭包中如何修改外部函数的变量?请写示例代码。
-
Python 如何判断一个函数是否是闭包?请写示例代码。
-
下面代码的输出是什么?为什么?
```python def outer(x): def inner(y): return x + y return inner
f = outer(10) print(f(5)) ```
-
什么是装饰器?装饰器的作用是什么?
-
如何使用装饰器计算函数的执行时间?请写示例代码。
-
如何给装饰器传递参数?请写示例代码说明。
-
Python 的
functools.wraps在装饰器中的作用是什么? -
请写一个装饰器,使被装饰的函数执行 3 次。
-
如何使用多个装饰器修饰同一个函数?请写示例代码。
八、迭代器与生成器(5 题)
-
Python 中的
iter()和next()方法有什么作用? -
下面代码的输出是什么?
python
a = [1, 2, 3]
it = iter(a)
print(next(it))
print(next(it))
-
什么是生成器?如何使用
yield关键字创建一个生成器? -
yield和return有什么区别? -
如何使用生成器创建一个无限的斐波那契数列?请写示例代码。
-
Python 中
iter()和next()的作用是什么? -
如何自定义一个迭代器?请实现一个
Counter迭代器,每次调用返回递增的数字。 -
下面代码的输出是什么?
python
a = [1, 2, 3]
it = iter(a)
print(next(it))
print(next(it))
-
StopIteration异常什么时候会发生?如何正确处理它? -
什么是生成器?生成器和迭代器的区别是什么?
-
Python 中如何使用
yield关键字创建一个生成器?请写示例代码。 -
yield和return有什么区别? -
如何使用生成器创建一个无限的斐波那契数列?请写示例代码。
-
Python 如何将生成器转换为列表?是否有更高效的方法?
-
如何使用
send()方法向生成器发送数据?请写示例代码。
编程题目:
多任务(5 题)
- 线程与进程
- 使用
threading模块创建两个线程:- 线程 1 每秒打印一次 "Thread 1 is running",共打印 5 次。
- 线程 2 每 2 秒打印一次 "Thread 2 is running",共打印 3 次。
- 线程执行完毕后,主线程打印
"All threads are done"。 - 线程同步
- 创建两个线程:
- 线程 1 负责每秒向一个共享列表
data中添加一个随机整数,共添加 10 次。 - 线程 2 负责每 2 秒从
data中读取一个元素并打印,共读取 5 次。
- 线程 1 负责每秒向一个共享列表
- 使用
threading.Lock确保数据读取与写入的同步性。 - 进程池
- 使用
multiprocessing.Pool创建一个包含 4 个进程的进程池,计算 1 到 10 的平方,并返回结果。 - 生产者-消费者模型
- 使用
queue.Queue实现生产者-消费者模型:- 生产者线程每秒向队列中放入一个数字(1 到 10)。
- 消费者线程每 2 秒从队列中取出一个数字并打印。
- 运行 10 秒后结束程序。
- 多进程文件下载
- 创建 3 个进程,每个进程模拟从不同的 URL 下载文件(可以使用
time.sleep()模拟下载过程)。 - 每个进程在下载完成后打印
"Download complete: <文件名>"。
模块与包(5 题)
- 自定义模块
- 创建一个 Python 模块
mymath.py,其中包含:add(a, b): 返回两个数的和。subtract(a, b): 返回两个数的差。multiply(a, b): 返回两个数的积。
- 编写
main.py,导入mymath模块,并使用这些函数进行运算。 - 动态导入模块
- 编写一个程序,输入一个模块名(如
math),程序动态导入该模块,并打印该模块的所有函数。 - 自定义包
- 创建一个 Python 包
mypackage,包含:mathutils.py: 实现基本数学运算(加法、减法)。stringutils.py: 实现字符串操作(统计字符串长度、转换大小写)。
- 编写
main.py,使用mypackage进行数学运算和字符串操作。 - 模块路径管理
- 创建
config.py,其中包含一个变量APP_NAME = "MyApplication"。 - 在
main.py中,修改sys.path,确保可以正确导入config.py并打印APP_NAME。 -
获取模块信息
-
编写一个程序,导入
math模块,并打印该模块中所有的变量、函数和类。
闭包与装饰器(5 题)
-
闭包计算器
-
定义一个
counter()函数,返回一个闭包,每次调用闭包时,它的值都会加 1,并返回当前计数值。 -
函数缓存装饰器
-
编写一个装饰器
cache_decorator,用于缓存函数的计算结果。 -
被装饰的函数如果再次调用相同参数,则直接返回缓存值,而不是重新计算。
-
执行时间装饰器
-
编写一个装饰器
timing_decorator,计算函数执行时间,并在函数执行完成后打印耗时。 -
日志装饰器
-
编写一个
log_decorator装饰器: - 在函数执行前打印
"Executing <函数名>"。 - 在函数执行后打印
"Execution finished"。 -
测试装饰器,装饰一个计算两个数乘积的函数。
-
装饰器嵌套
-
编写两个装饰器:
bold_decorator: 给字符串加粗 (<b>文本</b>)。italic_decorator: 给字符串加斜体 (<i>文本</i>)。- 测试装饰器嵌套(先加粗后加斜体,或先加斜体后加粗)。
迭代器与生成器(5 题)
-
自定义迭代器
-
创建一个
EvenNumbers迭代器类,生成 2, 4, 6, 8, …(直到 100)。 -
生成器函数
-
编写一个
fibonacci(n)生成器,生成前n个斐波那契数。 -
无限序列生成器
-
编写一个生成器
countdown(n),从n倒数到0,每次yield一个值。 -
生成器表达式
-
使用生成器表达式创建一个生成 1 到 100 偶数的生成器,并遍历打印所有值。
-
双向通信生成器
-
编写一个
double_numbers()生成器: - 使用
send()方法接收一个数,并返回其两倍的值。 - 测试生成器的
send()方法。
发表评论