㈠ python面试基础题十大陷阱,你中招了吗
我们在会碰到各种各样的面试,有的甚至是HR专门为你设置的障碍,在python面试中也是,无论你是应聘Python web开发,爬虫工程师,或是数据分析,还是自动化运维,这些python面试基础题十大陷阱也许你会遇到,今天的python培训总结出来给你以防万一:
问题1:请问如何修改以下Python代码,使得下面的代码调用类A的show方法?
class A(object)
def show(self):
print 'derived show'
class B(A)
def show(self):
print 'derived show'
obj=B()
obj.show()
答:这道题的考点是类继承,只要通过__class__ 方法指定类对象就可以了。补充的代码如下:
obj._class_=A
obj.show()
问题2:请问如何修改以下Python代码,使得代码能够运行?
class A(object):
def _init_ (self,a,b):
self._a = a
self._b = b
def myprint(self):
print 'a=',self._a,'b=',self._b
a1=A(10,20)
a1.myprint()
a1=(80)
答:此题考察得是方法对象,为了能让对象实例能被直接调用,需要实现 __call__ 方法,补充代码如下:
class A(object):
def _init_ (self,a,b):
self._a = a
self._b = b
def myprint(self):
print 'a=',self._a,'b=',self._b
def_call_(self,num):
print'call:',num+self._a
问题3:下面这段代码的输出是什么?
class B(object):
def fn(self):
print"B fn"
def_init_(self):
print"B INIT"
class A(object):
def fn(self):
print"A fn"
def_new_(cls,a):
print"NEW",a
if a>10:
return super(A,cls)._new_(cls)
return B()
def_init_(self,a):
print "INIT",a
a1=A(5)
a1,fn()
a2=A(20)
a2,fn()
答:
NEW 5
B INIT
B fn
NEW 20
INIT 20
A fn
此题考察的是new和init的用法,使用 __new__ 方法,可以决定返回那个对象,也就是创建对象之前调用的,这个常见于于设计模式的单例、工厂模式。__init__ 是创建对象是调用的。
问题4:下面这段代码输出什么?
1s=[1,2,3,4]
list1 =[i for i in ls if i>2
print list1
list2 =[1*2 for i in ls if 1>2
print list2
dicl={x: x**2 for x in(2, 4, 6)}
print dic1
dic2={x: ' item'+ str(x**2)for x in (2, 4, 6)}
print dic2
setl ={x for x in 'hello world' if x not in 'low level'}
print set1
答:
[3,4]
[6,8]
{2:4,4:16,6:36}
{2:'item4',4:'item16’,6:'item36"}set(["h",'r','d"])
此题考察的是列表和字典的生成。
问题5:下面这段代码输出什么?
num= 9
def f1():
um=20
def f2():
print num
f2()
f1()
f2()
答:
9
9
此题考察全局变量和局部变量。num 不是个全局变量,所以每个函数都得到了自己的 num 拷贝,如果你想修改 num ,则必须用 global 关键字声明。比如下面这样
num=9
def f1():
global num
um=20
def f2():
print num
f2()
f1()
f2()
#prints:
#9
#20
问题6:如何使用一行代码交换两个变量值?
a=8
b=9
答:
(a,b)=(b,a)
问题7:如何添加代码,使得没有定义的方法都调用mydefault方法?
class A(object):
def_init_(self,a,b):
self.a1=a
self.b1=b
print'init'
def mydefault(self):
print'default'
a1=A(10,20)
a1.fn1()
a1.fn2()
a1.fn3()
答:
class A(object):
def_init_(self,a,b):
self.a1=a
self.b1=b
print'init'
def mydefault(self):
print'default'
def_getattr_(self,name):
return self.mydefault
a1=A(10,20)
a1.fn1()
a1.fn2()
a1.fn3()
此题的考的是Python的默认方法, 只有当没有定义的方法调用时,才会调用方法 __getattr__。当 fn1 方法传入参数时,我们可以给 mydefault 方法增加一个 *args 不定参数来兼容。
class A(object):
def_init_(self,a,b):
self.a1=a
self.b1=b
print'init'
def mydefault(self,*args):
print'default:'+str(args[0])
def_getattr_(self,name):
print"other fn:",name
return self.mydefault
a1=A(10,20)
a1.fn1(33)
a1.fn2('hello')
a1.fn3(10)
问题8:一个包里有三个模块,mod1.py , mod2.py , mod3.py ,但使用 from demopack import * 导入模块时,如何保证只有 mod1 、 mod3 被导入了。
答:在包中增加 __init__.py 文件,并在文件中增加:
_all_=['mod1','mod3']
问题9:写一个函数,接收整数参数 n ,返回一个函数,函数返回n和参数的积。
答:
def mulby(num):
def gn(val):
return num*val
return gn
zw=mulby(7)
print(zw(9));
问题10:请问下面的代码有什么隐患?(Python2中)
def strtest1(num):
str='first'
for i in range(num):
str+="X"
return str
答:由于变量str是个不可变对象,每次迭代,python都会生成新的str对象来存储新的字符串,num越大,创建的str对象越多,内存消耗越大。
㈡ python语言由谁设计并领导开发
python语言
诞生于1990年,由Guido van Rossum设计并领导开发
2000年10月 Python2.0正式发布
2010年, Python 2.x发布了最后一版,为2.7
2008年12月, Python3.0正式发布
"Python2.x已经是遗产, python3.x是现在和未来的语言
Python语言特点
语法简洁,实现相同功能,代码量仅相当于其他语言的1/10~1/5
跨平台,可用于大部分操作系统、集群、服务器,甚至小设备(如:树莓派)上
可扩展,可与其他编程语言集成,如C. C++、Java等
开放源码, Python和大部分支持库及工具都是开源的
多用途,可用于快速、交互式代码开发,也可用于构建大型应用程序,如科学计算数据处理、人工智能等
类库丰富,除了自身提供的几百个内置库,开源社区还贡献了十几万个第三方库,拥有良好的编程生态
学习python,就来北京尚学堂!
㈢ python设计游戏看双方哪一个能先走第17步
【实例简介】游戏,蜗牛绕墙爬
【实例截图】
【核心代码】
speed=[5,0]
turtle_right=pygame.transform.rotate(turtle,90)
turtle_top=pygame.transform.rotate(turtle,180)
turtle_left=pygame.transform.rotate(turtle,270)
turtle_bottom=turtle
turtle=turtle_top
while True:
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
position=position.move(speed)
if position.right>width:
turtle=turtle_right
position=turtle_rect=turtle.get_rect()
position.left=width-turtle_rect.width
speed=[0,5]
if position.bottom>height:
turtle=turtle_bottom
position=turtle_rect=turtle.get_rect()
position.left=width-turtle_rect.width
position.top=height-turtle_rect.height
speed=[-5,0]
if position.left<0:
turtle=turtle_left
position=turtle_rect=turtle.get_rect()
position.top=height-turtle_rect.height
speed=[0,-5]
if position.top<0:
turtle=turtle_top
position=turtle_rect=turtle.get_rect()
speed=[5,0]
screen.fill(bg)
screen.blit(turtle,position)
pygame.display.flip()
clock.tick(30)
㈣ 下面的python代码,有什么逻辑陷阱吗
B中的5个元素实际上指向同一个列表对象,通过任意一个元素对列表对象进行操作,再通过其他元素访问时都会看到更改。举例:
B = [[],] * 5
B[0].append(1)
你可能认为此时B中的内容是[[1], [], [], [], []],然而实际上B中的内容是[[1], [1], [1], [1], [1]]
㈤ 关于python程序设计题的题库
1、average_sum函数的功能为求一批数中大于平均值
sum=0
k=0
for i in range(n):
sum=sum+a[i]
average=sum/n
for i in range:
if(a[i]>average):
k=k+a[i]
return k
2、编写函数fun求一个不多于五位数的正整数的位数
if(m>9999):
place=5
elif(m>999):
place=4
elif(m>99):
place=3
elif(m>9):
place=2
else:
place=1
return place
3、请编fun函数,求4*4整形数组的主对角线元素的和
sum=0.0
for i in range(4):
sum+=a[i][i]
return sum
4、已知:一元钱一瓶汽水,喝完后两个空瓶换一瓶汽水。问:请输入钱数(大于1的正整数),则根据钱数最多可以喝到几瓶汽水。
s=0
k=0
while m>0:
m=m-1
s=s+1
k=k+1
while k>=2:
k=k-2
s=s+1
k=k+1
return s
5、编写函数fun(x,y),函数的功能是若x、y为奇数,求x到y之间的奇数和;若x、y为偶数,则求x到y之间的偶数和。要求必须使用for结构。
主函数的功能是分别计算如下的值:
(1+3+5+……+777)+(2+4+6+……+888)=???
(1+3+5+……+1111)+(2+4+6+……+2222)=???
(1+3+5+……+1999)+(2+4+6+……+1998)=???
s=0
for i in range(x,y+1,2):
s=s+i
return s
6、编写函数main 求3!+6!+9!+12!+15!+18!+21!
s=0
for i in range(3,22,3):
r=1
for j in range(1,i+1):
r*=j
s+=r
print(s)
㈥ Python有设计模式么
Python设计模式主要分为三大类:创建型模式、结构型模式、行为型模式;三 大类中又被细分为23种设计模式,以下这几种是最常见的。
单例模式:是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个是实例时,单例对象就能派上用场。单例对象的要点有三个:一是某个类只能有一个实例;二是它必须自行创建整个实例,三是它必须自行向整个系统提供这个实例。
工厂模式:提供一个创建对象的接口,不像客户端暴露创建对象的过程,使用一个公共的接口来创建对象,可以分为三种:简单工厂、工厂方法、抽象工厂。一个类的行为或其算法可以在运行时更改,这种类型的设计模式属于行为型模式。
策略模式:是常见的设计模式之一,它是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。换句话来讲,就是针对一个问题而定义出一个解决的模板,这个模板就是具体的策略,每个策略都是按照这个模板进行的,这种情况下我们有新的策略时就可以直接按照模板来写,而不会影响之前已经定义好的策略。
门面模式:门面模式也被称作外观模式。定义如下:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。门面模式注重统一的对象,也就是提供一个访问子系统的接口。门面模式与模板模式有相似的地方,都是对一些需要重复方法的封装。但本质上是不同的,模板模式是对类本身的方法的封装,其被封装的方法也可以单独使用;门面模式,是对子系统的封装,其被封装的接口理论上是不会被单独提出来使用的。
㈦ Python有什么缺点呢
1. - 运行速度慢,因为Python是解释型语言,是一种高级语言,代码会在执行的时候,一行一行的使用解释器翻译成底层代码,翻译成机器码,而这个过程非常耗时,所以他运行过程中,比很多语言的代码都慢了很多。
- 线程不能利用多CPU,这是Python最大的确定,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。
Python的优缺点可以看看传智播客的社区,里面很多技术老师写的相关文章。并且有学习线路图适合小白学习,每个板块下面都有配套视频。
㈧ python算法设计的步骤有三步分别是
1. 弄清楚题目的意思,列出题目的输入、输出、约束条件
其中又一道题目是这样的:“有一个mxn的矩阵,每一行从左到右是升序的,每一列从上到下是升序的。请实现一个函数,在矩阵中查找元素elem,找到则返回elem的位置。”题设只说了行和列是升序的,我在草稿纸上画了一个3x4的矩阵,里面的元素是1~12,于是我就想当然的认为矩阵的左上角是最小的元素,右下角是最大的元素。于是整个题目的思考方向就错了。
2. 思考怎样让算法的时间复杂度尽可能的小
继续以上面的题目为例子。可以有如下几种算法:
a. 遍历整个矩阵进行查找,那么复杂度为O(m*n);
b. 因为每一行是有序的,所以可以对每一行进行二分查找,复杂度为O(m*logn)。但是这样只用到了行有序的性质。
c. 网上查了一下,最优的算法是从矩阵的左下角开始,比较左下角的元素(假设为X)与elem的大小,如果elem比X大,那么X所在的那一列元素就都被排除了,因为X是该列中最大的了,比X还大,那么肯定比X上面的都大;如果elem比X小,那么X所在的那一行就可以排除了,因为X是这一行里最小的了,比X还小那么肯定比X右边的都小。每迭代一次,矩阵的尺寸就缩小一行或一列。复杂度为O(max(m,n))。
可以先从复杂度较高的实现方法入手,然后再考虑如何利用题目的特定条件来降低复杂度。
3. 编写伪代码或代码
㈨ python程序设计
#如果能利用正则表达式(re模块)可能程序会更简单些。
str_test=input("pleaseenterastring:")
buf_float=['0','1','2','3','4','5','6','7','8','9','.']
deffun(test):
buf_str=list(test)
forminrange(0,len(buf_str)):
ifbuf_str[m]notinbuf_float:
buf_str[m]=''
forninrange(0,len(buf_str)):
ifbuf_str[n]=='.':
ifn==len(buf_str)-1:
buf_str[n]=''
elifn!=len(buf_str)-1andbuf_str[n+1]==''orbuf_str[n+1]=='.':
buf_str[n]=''
returnbuf_str
#''.join():将列表合并为字符串
#str.split():将字符串str按照空格拆分为字符串行表
str_float=''.join(fun(str_test)).split()
ifstr_float==[]:
print('NotFound!')
else:
foriinstr_float:
print(i)
实验结果:
please enter a string: I have 5.67yuan. You have 5.68.
5.67
5.68
㈩ 用Python语言设计程序,5道题,谢谢!
第一题,用input()接受用户输入,int()把输入转换成整型,if... else语句判断条件。能被2整除的是偶数,否则奇数
代码:
n = int(input())
if n % 2 == 0:
..#前面的点表示缩进。
..print("是偶数")
else:
..print("是奇数")
第二题input()、int()和嵌套if语句
代码:
n = int(input())
if n % 100 != 0:
..if n % 4 == 0:
....print("是闰年")
..else:
....print("是平年")
elif n % 400 == 0:
..print("是闰年")
else:
..print("是平年")
第三题还是一样滴,用input(),int()和if...else语句
代码:
a = int(input())
b = int(input())
if a > b:
..print(a – b)
else:
..print(b – a)
第四题也是一样滴
代码:
m = int(input())
n = int(input())
if m < n:
..print(m, n)
else:
..print(n, m)
第五题 (*^▽^*)
代码:
a = int(input())
if a >=60:
..print("合格")
else:
..print("不合格")