面试练习题

---恢复内容开始---

1
1.以下程序输出结果是什么
a = 1
def fun(a):
    a = 2
fun(a)
print (a)  
 
a = []
def fun(a):
    a.append(1)
fun(a)
print(a)
答:1 [1]

2.请简要说明什么是类变量,什么是实例变量,并观察以下程序的输出结果

 
class Person:
    name="aaa"

p1=Person()
p2=Person()
p1.name="bbb"
print(p1.name)  
print(p2.name) print(Person.name)
答:

类变量:类变量是个抽象的变量,是具有某一共同点的对象的统称

实例变量:实例变量是类实例化对象,实际物体。
bbb aaa aaa

3.以下语句有什么弊端,name是元祖的时候,程序会是什么样的结果,如何避免

"hi there %s" % name

答:name只能是字符串。报错,不能输出。
print('hi there {}'.format(name))

4.阅读下面的代码,写出A0,A1至An的最终值。

A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5))) A1 = range(10) A2 = [i for i in A1 if i in A0] A3 = [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]]

5.你如何管理不同版本的代码?

答: 如果在一个文件夹下,把不同版本的代码写入不同的模块,需要时用import调用。
如果在一个程序内,给不同版本的代码分别定义函数,需要时调用函数。

6.下面代码会输出什么:

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]

7.这两个参数是什么意思:*args**kwargs?我们为什么要使用它们?

答:*args是可变参数,**kwargs是关键字参数。
可变参数是当输入参数类型相同,数量不确定时使用。
关键字参数是输入时带有参数的名称,且直接赋值的参数,向函数中追加参数时使用。

8.阅读下面的代码,它的输出结果是什么?

class A(object):
    def go(self):
        print "go A go!"
    def stop(self):
        print "stop A stop!"
    def pause(self):
        raise Exception("Not Implemented")
class B(A):
    def go(self):
        super(B, self).go()
        print "go B go!"
class C(A):
    def go(self):
        super(C, self).go()
        print "go C go!"
    def stop(self):
        super(C, self).stop()
        print "stop C stop!"
class D(B,C):
    def go(self):
        super(D, self).go()
        print "go D go!"
    def stop(self):
        super(D, self).stop()
        print "stop D stop!"
    def pause(self):
        print "wait D wait!"
class E(B,C): pass
a = A()
b = B()
c = C()
d = D()
e = E()
# 说明下列代码的输出结果
a.go()
b.go()
c.go()
d.go()
e.go()
a.stop()
b.stop()
c.stop()
d.stop()
e.stop()
a.pause()
b.pause()
c.pause()
d.pause()
e.pause()

答:go A go!
go A go! /n go B go!
go A go! /n go C go!
go A go! /n go B go! /n go C go! /n go D go!
go A go! /n go B go! /n go C go!

stop A stop!
stop A stop!
stop A stop! /n "stop C stop!
stop A stop! /n "stop C stop! /n "stop D stop!"
stop A stop! /n "stop C stop!

Not Implemented
Not Implemented
Not Implemented
Not Implemented /n wait D wait!
Not Implemented

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

l = list(set(l)) or [l1.append(i) for i in l if i not in l1 ]

10.单引号,双引号,三引号的区别

单引号不可换行可定义字符串;双引号也不可换行,定义字符串含有单引号;三引号可换行。

11.写一个函数, 输入一个字符串, 返回倒序排列的结果

输入: string_reverse(‘abcdef') , 返回: ‘fedcba',写出你能想到的多种方法

  1 s = 'abcdef'
  2 l = list(s)
  3 l.sort(reverse = True)
  4 s1 = ''
  5 for i in l:
  6     s1 += i
  7 print(s1)
  8 
  9 s = 'abcdef'
 10 s1= ''
 11 n = 5
 12 for i in s:
 13     s1 += chr(ord(i) + n)
 14     n -= 2
 15 print(s1)
 16 
 17 s = 'abcdef'
 18 s1 = ''
 19 n = 5
 20 for i in range(6):
 21     s1 += s[n]
 22     n -= 1
 23 print(s1)

 12. 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。利用当前我们所学知识,尝试使得所创建的类是单实例模式

  1 class Baby(object):
  2     def Run(self,age):
  3         self.age = age
  4         if self.age >= 3:
  5             print('can running...')
  6             return self.age
  7         else:
  8             print('can not running...')
  9             return self.age
 10 
 11 baby1 = Baby()
 12 print(baby1.Run(3))
 13 baby2 = Baby()
 14 print(baby2.Run(2))

1.定义一个点(Point)类和直线(Line)类,使用 getLen 方法可以获得直线的长度。`?^$q=:dI

提示:

    • 设点 A(X1,Y1)、点 B(X2,Y2),则两点构成的直线长度 |AB| = √((x1-x2)2+(y1-y2)2)
    • Python 中计算开根号可使用 math 模块中的 sqrt 函数
    • 直线需有两点构成,因此初始化时需有两个点(Point)对象作为参数
    •   1 import math
        2 
        3 def getLen(x1,y1,x2,y2):
        4 
        5     class Point(object):
        6         def __init__(self,x1,y1):
        7             self.x1 = x1
        8             self.y1 = y1
        9 
       10     class Line(Point):
       11         def __init__(self,x2,y2):
       12             super().__init__(x1,y1)
       13             self.x2 = x2
       14             self.y2 = y2
       15 
       16         def AB(self):
       17             sAB = 0
       18             self.x = self.x1 - self.x2
       19             self.y = self.y1 - self.y2
       20             sAB= self.x ** 2 + self.y ** 2
       21             zAB = abs(sAB)
       22             AB = math.sqrt(zAB)
       23             return AB
       24     p = Point(x1,y1)
       25     l = Line(x2,y2)
       26     print(l.AB())
      
        1 from getlen import *
        2 x1,y1 = eval(input('请输入第一个点的坐标:'))
        3 x2,y2 = eval(input('请输入第二个点的坐标:'))
        4 print('两点之间的距离是:')
        5 getLen(x1,y1,x2,y2)

      2.列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]

    •   1 l = [1,2,3,4,5]
        2 g = map(lambda n:n ** 2,l)
        3 l1 = list(g)
        4 print(l1)
        5 
        6 l2 = []
        7 for i in l1:
        8     if i > 10:
        9         l2.append(i)
       10 print(l2)

       

posted on 2018-12-17 13:11  学府伊人醉  阅读(101)  评论(0编辑  收藏  举报

导航