本文所有代码打包在Gitee仓库中https://gitee.com/wx114/Python-Interview-Questions
一、数据类型
第一题(str)
请编写一个Python程序,完成以下任务:
- 去除字符串开头和结尾的空格。
- 使用逗号(",",不带空格)将字符串中的电子邮件地址分割成一个列表。
- 遍历列表中的每个电子邮件地址,将其域名部分(即"@"符号之后的部分)转换为小写。
- 使用逗号加空格(", ")作为分隔符,将修改后的电子邮件地址列表重新连接成一个字符串。
- 输出转换后的字符串,并打印出转换前后字符串的长度差。
示例输入:
emails = " example@EXAMPLE.COM, anotherEmail@Domain.com , Third.Email@example.NET "
期望输出(注意:实际输出中的电子邮件地址顺序可能与示例不同,因为题目没有要求保持原始顺序):
转换后的字符串: example@example.com, anotheremail@domain.com,third.email@example.net
转换前后字符串长度差: -14
【注】长度差可能为正数、负数或零,这取决于原始字符串中额外空格和大小写转换的影响。
第二题(str)
将一个URL转换成对应的格式
示例输入:
string = “https://www.baidu.com/s?wd=feapder&pn=10”
期望输出:
url = "https://www.baidu.com/s"
params = {
"wd": "feapder",
"pn": "10"
}
第三题(list)
你有一个包含整数的列表,你需要对这个列表执行一系列操作,以得到一个新的列表,并计算操作前后列表的元素总和之差。具体操作如下:
- 去除列表中所有的负数元素。
- 将剩余的每个元素乘以2。
- 使用列表推导式(list comprehension)筛选出所有偶数元素。
- 将筛选出的偶数元素按照从大到小的顺序排序。
- 计算原列表和新列表的元素总和之差。
示例输入:
numbers = [1, -2, 3, -4, 5, 6, -7, 8, 9, -10]
期望输出(注意:由于示例输入中的负数被去除,并且所有元素都乘以了2,然后又筛选出了偶数,最后还进行了排序,所以实际输出可能与直接计算的总和差有所不同,但这里给出的是按照题目要求操作后的逻辑结果):
操作后的列表: [16, 12, 10, 8]
操作前后列表元素总和之差: -36
【注】期望输出中的操作后列表是根据示例输入和题目要求操作后得到的实际结果,而总和之差则是通过计算原列表元素总和与操作后列表元素总和之间的差值得到的。
第四题(dict)
你是一家书店的IT部门员工,书店的库存信息以字典的形式存储,其中字典的键是书籍的ISBN号(假设为字符串类型),值是一个包含书籍详细信息的字典,这个详细信息字典包括书名(title)、作者(author)、库存数量(stock)和价格(price)。现在,请根据以下要求编写Python代码来完成任务:
- 创建一个包含三本书籍信息的库存字典。
- 查询并打印出ISBN为"978-1234567890"的书籍的详细信息。
- 假设我们要更新ISBN为"978-1234567890"的书籍的库存数量,将其增加10本。
- 打印出所有书籍的ISBN和它们的价格。
- 使用get()方法尝试获取ISBN为"978-0987654321"的书籍的库存数量,如果不存在,则返回"书籍未找到"。
- 移除ISBN为"978-1112223334"的书籍(假设它存在于库存中),并打印出移除后的库存字典。
示例库存字典(仅作为参考,实际创建时请使用自己的ISBN和书籍信息):
inventory = {
"978-1234567890": {"title": "Python编程从入门到实践", "author": "埃里克·马瑟斯", "stock": 50, "price": 39.99},
"978-2345678901": {"title": "算法导论", "author": "托马斯·科尔曼", "stock": 20, "price": 59.99},
"978-3456789012": {"title": "代码大全", "author": "史蒂夫·迈克康奈尔", "stock": 35, "price": 49.99}
}
第五题(set)
你有一个公司员工的ID集合,以及一个参加特定培训课程的员工ID集合。现在,你需要根据这些集合来完成以下任务:
- 创建一个包含所有员工ID的集合(假设有10个不同的员工ID,你可以自己定义这些ID)。
- 创建一个包含参加培训课程的员工ID的集合(假设有5个员工参加了培训,这些员工ID可以是前面10个员工ID中的任意5个)。
- 计算并打印出没有参加培训课程的员工ID集合。
- 假设又有一个新的员工ID集合,表示最近加入公司的员工。请将这个新集合中的员工ID添加到原始员工ID集合中,并打印出更新后的员工ID集合。
- 找出既参加了培训又是新加入公司的员工ID(假设有这样的员工存在)。
二、函数
第一题
将上述“数据类型”中的五道题,分别用五个函数来封装。
第二题
设计一个函数实现在“数据类型”的五道题中切换。
示例输入:
选择第n题(n=1到5,按0退出)
期望输出:对应题目的答案。
第三题
编写一个Python程序,该程序包含以下几个部分:
- 定义一个函数 calculate_area,该函数接受两个参数:length 和 width,分别代表一个矩形的长和宽。函数的功能是计算并返回该矩形的面积。
- 定义一个函数 describe_rectangle,该函数接受一个字典作为参数,该字典包含键 'length' 和 'width',对应的值分别为矩形的长和宽。函数的功能是首先调用 calculate_area 函数来计算并获取矩形的面积,然后打印出矩形的长、宽和面积。
- 在程序中调用 describe_rectangle 函数,并传入一个包含矩形长和宽的字典作为参数。
示例输出(假设传入的字典是 {'length': 10, 'width': 5}):{'length': 10, 'width': 5}
期望输出:
矩形的长为: 10
矩形的宽为: 5
矩形的面积为: 50
第四题
编写一个Python函数,该函数接受任意数量的位置参数(即不限制参数的数量),并计算这些参数的平均值。然后,在程序中调用这个函数,传入几个数字作为参数,并打印出这些数字的平均值。
要求:
- 使用*args语法来接收任意数量的位置参数。
- 确保函数能够处理没有传入任何参数的情况,并优雅地处理这种情况(例如,打印一条消息表示没有参数传入,并返回None或0作为平均值)。
- 计算平均值时,需要确保传入的参数中至少有一个是数字(为了简化,我们不考虑字符串等非数字类型作为参数的情况,但在实际应用中可能需要添加类型检查)。
第五题
编写一个Python函数,该函数接受任意数量的关键字参数(即不限制参数名和数量的参数),并返回一个包含所有传入关键字参数及其值的字典。然后,在程序中调用这个函数,传入几个关键字参数,并打印出该函数返回的字典。
要求:
- 使用**kwargs语法来接收任意数量的关键字参数。
- 确保函数能够处理没有传入任何关键字参数的情况,并返回一个空的字典。
- 在返回的字典中,关键字参数名应作为键,对应的值作为值。
三、文件
请注意,下面的五个题目都要封装成函数。
第一题
用OS模块,创建一个名为“Python基础练习day01”的文件夹。(要包含同名检测和异常处理功能)
第二题
在刚刚创建好的“Python基础练习day01”文件下,创建三个子文件夹“数据类型”、“函数”、“文件”。
第三题
依次删除刚刚创建好的三个目录,删除前需要输入‘y’来确认。
第四题
第二题中的创建三个文件夹的函数的传参是若是一个列表
[‘Python基础练习day01/数据类型’, ’Python基础练习day01/函数’, ’Python基础练习day01/文件’]
该怎么实现第二题中的功能?
第五题
如何删除一个有文件的文件夹?(递归删除目录)