面试题0004

1.下面的代码会输入什么?

    def f(x,l=[]):
        for i in range(x):
            l.append(i*i)
        print(l)

    f(2)
    f(3,[3,2,1])
    f(3)

    [0, 1]
    [3, 2, 1, 0, 1, 4]
    [0, 1, 0, 1, 4]

2.补充缺失的代码

def print_direchory_contents(sPath):

        """

        合格函数接受文件夹的名称作为输入参数,

        返回该文件夹中文件的路径,

        以及其包含文件夹中文件的路径。

        (注意区分不同平台)

        """
import os
def print_directory_contents(sPath):
    """
        这个函数接受文件夹的名称作为输入参数,
        返回该文件夹中文件的路径,
        以及其包含文件夹中文件的路径。
    """
    # 遍历获取当前文件路径下的文件路径
    for sChild in os.listdir(sPath):
        sChildPath = os.path.join(sPath,sChild)
        print(sChildPath)
        # 判断文件下是否含有其他文件,如果有调用原函数继续执行
        if os.path.isdir(sChildPath):
            print_directory_contents(sChildPath)

3.A0-A6的值是什么?

    A0=dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))
    A1=range(10)
    A2=sorted([i for i in A1 if i in A0])
    A3=sorted([A0[s] for s in A0 ])
    A4=[i for i in A1 if i in A3]
    A5={i:i*i for i in A1}
    A6=[[i,i*i] for i in A1]
    A0:{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
    A1:range(0,10)
    A2:[]
    A3:[1,2,3,4,5]
    A4:[1,2,3,4,5]
    A5:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
    A6:[[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36], [7, 49], [8, 64], [9, 81]]

4.请用random打乱一个排好序的list对象a_list.

    #random模块中的shuffle(洗牌函数)
    import random
    a_list = [1, 2, 3, 4]
    random.shuffle(a_list)   
    print a_list

5.实现一个字符串反转的函数:(例如,输出:'hello python' 输出:'nohtyp olleh')

    #1.使用字符串切片
    def reverse1():
        s = input("please input a string: ")
        return s[::-1]
if __name__ == '__main__':
    print(reverse1())

    #2.使用递归
    def reverse2(str):
        if str == "":
            return str
        else:
            return reverse2(s[1:]) + s[0]
if __name__ == '__main__':
    str = 'hello python'
    print(reverse2(str))


    #3.使用列表的reverse
    def reverse3(s):
        l = list(s)
        l.reverse()
        print("".join(l))
if __name__ == '__main__':
    reverse3('hello python')

6.定义A=("a","b","c","d"),执行del A[2]后的结果为:

    异常

7.代码a = [{i:j} for i,j in enumerate(xrange(5))],请写出a的最终结果

    [{0: 0}, {1: 1}, {2: 2}, {3: 3}, {4: 4}]
    # 解析:xrange()是python2.7中的方法,同python3中的range(),列表推导式的方式获取一个字典,i=j
    #enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。enumerate(sequence, [start=0])  sequence -- 一个序列、迭代器或其他支持迭代对象。start -- 下标起始位置。

8.以下代码输出的结果是什么?

var1 = 100
var2 = 100
list1 = [101,102,103]
list2 = [101,102,103]
print(var1 is var2)
print(list1 is list2)
    True
    False
    # 解析:字符串,数值型数据的变量内存地址一致,列表元组等不一致

9.对比

*args     **kwargs   的区别
__new__   __init__   的区别
  is      ==         的区别
range     xrange     的区别
(1)*args 表示非关键字收集参数,收集的实参会组成一个元组,接收没有任何形参接收的非关键字实参。可以与普通形参共存。
        **kwargs 表示关键字收集参数,收集的实参会组成一个字典,形参名作为键,值为值,仅接收没有任何形参接收的关键字参数。可以与普通形参共存。
(2)__new__:在实例化对象是触发,参数至少一个cls,接收当前类。必须返回一个对象是实例,触发顺序:先触发__new__才会触发__init__。
    __init__: 初始化对象是触发,参数至少一个self,接收对象。使用该方式初始化的成员都是直接写入对象当中,类中无法具有。

(3)is: 也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。
    ==: 是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等
(4)range :range会直接生成一个list对象
    xrange:并不会直接生成一个list对象,而是作为一个生成器,会在每一个调用时返回其中的一个值。
    在 python3 中,去除了 range 函数,将 xrange 函数更名为 range 函数

10.装饰器用途:@staticmethod 和@classmethod,@property用途

@staticmethod  #静态方法,相当于把一个普通函数绑定到类上  函数既不能接收实例也不能接收类
@classmethod   #类方法,类方法是给类用的,类在使用时会将类本身当做参数传给类方法的第一个参数,python为我们内置了函数classmethod来把类中的函数定义成类方法。用途:不用实例化,可以直接用类来调用方法
@property  #把一个方法当作属性来使用,便于访问

11.Fibonacci数列

def Fibonacci(n):
    a,b = 0,1
    while a < n :
        print(a,end = '')
        a,b = b,a+b
    print()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容