Python常见面试题集锦

1.一行代码输出九九乘法表

print ('\n'.join([' '.join(['%s*%s=%s '%(j,i,j*i) for j in range(1,i+1)]) for i in range(1,10)]))

分析:

利用Python中的模板字符串,列表生成式,还有Python中的join方法(Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。格式:“,”.join(seq))


# arr = "\n".join([",".join(['%s*%s=%s '%(j,i,j*i) for j in range(1,i+1)]) for i in range(1,10)])
obj = (i for i in range(1,10))
print ('i for i in range(1,10)输出结果:',obj)
# 输出:<generator object <genexpr> at 0x0157FDF0>
# i for i in range(1,10) 这个语句生成一个迭代器对象  如果想将这个对象的值打印出来  可以将其转化为列表
list = [i for i in range(1,10)]
print('list输出:',list)
# 输出    list输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(['%s*%s=%s'%(j,i,j*i) for j in range(1,i+1)] for i in range(1,10))
# 输出:<generator object <genexpr> at 0x003CFE70>
print(','.join(['%s*%s=%s'%(j,i,j*i) for j in range(1,i+1)]) for i in range(1,10))
# 输出:<generator object <genexpr> at 0x003CFE70>
# 此时,仅仅是将列的输出转化为字符串形式,没有将行的输出转化为字符串,所以还需要进行下一步转换
print('\n'.join([' '.join(['%s*%s=%s'%(j,i,j*i) for j in range(1,i+1)]) for i in range(1,10)] ))
# 将\n 赋值给 join的链接符 实现输出一行时候进行换行操作

2.对函数流程控制的理解

def partition(L,p,r):
    x = L[r]
    i = p - 1
    for j in range(p,r):
        if L[j] <= x:
            i += 1
            L[i],L[j] = L[j],L[i]
    L[i+1],L[r] = L[r],L[i+1]
A = [3,1,7,2,6,8,4,5]
partition(A,0,len(A)-1)
print(A)

# 分析:
'''
L=[3,1,7,2,6,8,4,5]  index=7  len=8          p=0         r=len(A)-1=7
进入函数:x=L[r]=5  i=p-1=-1   
            进入循环:range(p=0,r=7) j=0-7 
                    进入判断:L[j=0] <= x=L[r]=5
                                    i = i+1  => -1+1=0
                                    L[i=0],L[j=0] = 3,3
                                L[j=1]  <= x=L[r]=5
                                    i += 1  => i=1
                                    L[i=1],L[j=1] = 1,1
                                L[j=2]  <= x=L[r]=5
                                   pass
                                L[j=3]  <= x=L[r]=5
                                    i += 1  => i=2
                                    L[i=2],L[j=3] = 2,7       -------->L=[3,1,2,7,6,8,4,5]
                                L[j=4]=6  <= x=L[r]=5
                                    pass
                                L[j=5]=8  <= x=L[r]=5
                                    pass
                                L[j=6]=4  <= x=L[r]=5
                                    i += 1   => i=3
                                    L[i=3],L[j=6] = L[j],L[i]  ------>L=[3,1,2,4,6,8,7,5]
                               
            L[i+1],L[r] = L[r],L[i+1]   
            => L[3+1=4],L[7] = L[7],L[4]     ------->  ==> L=[3,1,2,4,5,8,7,6]  
==> L=[3,1,2,4,5,8,7,6]          
'''

3.类的继承

class A(object):
    name = "A"
class B(object):
    name = "B"
class C(A,B):
    pass
print(C.name)   # =>  先继承的A  输出A
C.name = "C"
print(A.name)   # => A
print(B.name)   # =>B
print(C.name)   # =>C

猜你喜欢

转载自blog.csdn.net/qq_35208583/article/details/88978531