python面试题【题目+答案】

最近遇到了一份python的面试题,题目比较简单,时间控制在一个小时之内。以下是面试的题目跟答案,答案不代表最优解,只是当时所想到的一些思路,接下来将分享给大家。

目录

1. 给出下面打印结果

2.字典如何删除键、如何合并两个字典

3. 下列正则表达式可以匹配 www.tencent-inc.com 的有哪些

4. 有一些文件,路径如下图

 module_x.py想引用module_y.py的方法,该如何写

 module_z.py想引用module_y.py的方法,该如何写

5. 请指出下列程序是否会有报错

6. 写出一段Python代码实现删除一个list里面的重复元素

7. 给定一组由小到大的数字0,1,2...,n,从中找出一个丢失的数字。

8.给定一个字符串,里边可能包含“()”、"{}"两种括号,请编写程序检查该字符串的括号是否成对出现。

9.请编写代码实现一个【单例】类MoreFun,要求该类的__init__函数只能被调用一次

10.编写代码实现方法get_time_in_range

 11.给定一个整数数组nums和一个目标值target,请你再该数组中找出和为目标值的那两个证书,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组同一个元素不能使用两遍。​编辑


1. 给出下面打印结果

答案:

12.0 

6.0

这道题很简单,定义了两个函数,并将x作为参数分别调用两个函数并输出结果。

两个函数都判断了传入列表是否为空,funcA函数将列表中每一个元素用float()方法转化为浮点数,并返回列表中的最大值。因此,输出12.0。

funcB也是将列表中每一个元素用float转化为浮点数,返回时先将列表用sum()方法求和再除以列表的长度。因此,输出6.0

2.字典如何删除键、如何合并两个字典

答:

       删除键:1、可以使用del关键字来从字典中删除指定的键

       如,从dictA中删除key为“a”,可以用del dictA[‘a’]

2、可以使用pop()方法来删除指定键,这个方法可以返回该键对应的值,如果键不存在,则可以提供一个默认值作pop()方法的第二个参数。

如,result = dictA.pop(‘a’,None)

      

       合并字典:1、可以使用update()方法来合并字典。

       如,dictA.update(dictB)。此时dictA则是已经合并了dictB。

2、使用dict()构造函数

如,dictA(dictA,**dictB)

3. 下列正则表达式可以匹配 www.tencent-inc.com 的有哪些

     ^\w+\.\w+\-\w+\.\w+$

     [w]{0,3}.[a-z\-]*.[a-z]+

     [c-w.]{3,10}[.][c-w.][.][a]

     [w][w][w][tencent-inc]+[com]+

     ^\w.*com$

     [w]{3}.[a-z\-]{11}.[a-z]{3}

我们来逐条分析:

  1. ^\w+\.\w+\-\w+\.\w+$

    • 匹配形式为word1.word2-word3.word4的字符串,其中每个word由一个或多个\w(字母、数字或下划线)组成。
    • 不匹配"www.tencent-inc.com"。
  2. [w]{0,3}.[a-z\-]*.[a-z]+

    • 匹配任意长度的w(小写字母"w")后跟一个任意字符、一个由小写字母和连字符("-")组成的字符串,再后跟一个由小写字母组成的字符串。
    • 不匹配"www.tencent-inc.com"。
  3. [c-w.]{3,10}[.][c-w.][.][a]

    • 匹配由cw范围内的字符、点号(".")、再由cw范围内的字符、点号(".")、再匹配一个字母a
    • 不匹配 "www.tencent-inc.com"。
  4. [w][w][w][tencent-inc]+[com]+

    • 匹配由3个连续的小写字母w、一个或多个连续的"tencent-inc"、一个或多个连续的"com"组成的字符串,但是没有匹配到"."。
    • 不匹配 "www.tencent-inc.com"。
  5. ^\w.*com$

    • 匹配以字母、数字或下划线开头,且以"com"结尾的字符串。^表示字符串的开始,$表示字符串的结尾。
    • 匹配"www.tencent-inc.com"。
  6. [w]{3}.[a-z\-]{11}.[a-z]{3}

    • 匹配由3个连续的小写字母w、一个由小写字母和连字符("-")组成的11字符字符串、再后跟由小写字母组成的3字符字符串。
    • 不匹配 "www.tencent-inc.com"。

因此,能够匹配到"www.tencent-inc.com"的正则表达式是:

  • [w][w][w][tencent-inc]+[com]+
  • ^\w.*com$

4. 有一些文件,路径如下图

  •  module_x.py想引用module_y.py的方法,该如何写

 答:import moudule_y

  •  module_z.py想引用module_y.py的方法,该如何写

答:相对导入:在package创建一个空的__init__.py文件,

可使用from..subpackage1 import module_y 来导入module_y的方法

绝对路径导入:from my_package.subpackage1 import y

5. 请指出下列程序是否会有报错

url='http://www.qq.com'

def func():

    print(url)

    url = url.split(".")[1]

    print(url)

if __name__=='__main__':

    func()

 答:程序会报错。url是全局变量,在func()函数内部中尝试去修改全局作用域的变量会导致报错。在函数中使用global关键字声明url是全局变量可以避免报错,如:

url='http://www.qq.com'

def func():

    global url

    print(url)

    url = url.split(".")[1]

    print(url)

if __name__=='__main__':

    func()

6. 写出一段Python代码实现删除一个list里面的重复元素

答:可以使用python内置函数set()来实现,set()是集合,集合中不允许存在重复元素。如:

def func(list):

       return list(set(list))

7. 给定一组由小到大的数字0,1,2...,n,从中找出一个丢失的数字。

例如,给定nums = [0, 0, 1, 3, 4]返回2。

答:先获取最大的数字,然后生成一个从小到大的数列,对比两者即可得到丢失数字。
def func(nums):
    num_range = list(range(nums[-1])) #生成从小到大的数列
    return set(num_range)-set(nums)

8.给定一个字符串,里边可能包含“()”、"{}"两种括号,请编写程序检查该字符串的括号是否成对出现。

输出:

true:代表括号成对出现并且嵌套正确,或字符串无括号字符。

false:未正确使用括号字符。

答:count可以统计字符串中的某一字符出现次数

def func(str):
    if (str.count('(') != str.count(')')) or (str.count('{') != str.count('}')):
        return False
    else:
        return True

9.请编写代码实现一个【单例】类MoreFun,要求该类的__init__函数只能被调用一次

答:

class MoreFun:

    _instance = None  # 类变量,用于保存类的唯一实例

    def __new__(cls, *args, **kwargs):

        if cls._instance is None:

            cls._instance = super().__new__(cls)

        return cls._instance

    def __init__(self):

        if not hasattr(self, '_initialized'):

            self._initialized = True

            # 在这里进行初始化操作,确保__init__函数只被调用一次

10.编写代码实现方法get_time_in_range

输入:字符串形式的时间起/止节点

输出:两个时间节点间的所有整数小时节点,左闭右开

>>get_time_in_range( “2018/11/12 21:01:01”, “2018/11/13 01:01:01”)

>>[“2018/11/12/21/”, “2018/11/12/22/”, “2018/11/12/23/”, “2018/11/13/00/” , “2018/11/13/01/” ]

答:

def get_time_in_range(start_time, end_time):

    time_format = "%Y/%m/%d %H:%M:%S"

    start_datetime = datetime.strptime(start_time, time_format)

    end_datetime = datetime.strptime(end_time, time_format)



    time_in_range = []

    current_datetime = start_datetime

    while current_datetime < end_datetime:

        time_in_range.append(current_datetime.strftime("%Y/%m/%d/%H/"))

        current_datetime += timedelta(hours=1)



    return time_in_range

 11.给定一个整数数组nums和一个目标值target,请你再该数组中找出和为目标值的那两个证书,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组同一个元素不能使用两遍。

答 :

def func(nums , target):
    n = [] #定义已使用过的元素容器
    for i in range(len(nums)):
        #如果该元素使用过则跳过此次循环
        if nums[i] in n:
            continue
        for j in range(len(nums)):
            if nums[i]+nums[j] == target:
                print(nums[i],nums[j])
                n.append(nums[i])
                n.append(nums[j])
#验证
nums = [2,4,6,8,10,12]
target = 12
func(nums,target)

对待面试题的时候我们可以先猜一下这道题的考点是什么,答出面试官想要的答案。

以上就是今日份的面试题,祝同学们早日找到合适的工作,事业有成~

如果此博客反响好的话我会考虑专门出个python面试专栏来解答童鞋们的疑惑哦,让我们一起进步吧!

猜你喜欢

转载自blog.csdn.net/m0_62814033/article/details/132047256