導航:首頁 > 編程語言 > python設計誰先掉進陷阱

python設計誰先掉進陷阱

發布時間:2022-10-29 00:55:48

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語言

學習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("不合格")

閱讀全文

與python設計誰先掉進陷阱相關的資料

熱點內容
怎麼解壓鏡像系統 瀏覽:190
程序員求助國企 瀏覽:837
雲伺服器網址租用多少錢 瀏覽:942
行車記錄儀安卓版怎麼用 瀏覽:500
java是不是數字 瀏覽:182
php模擬瀏覽器環境 瀏覽:353
編程誰都能學會嗎 瀏覽:407
使用國家反詐app都要開啟什麼 瀏覽:712
下載民宿APP有什麼用 瀏覽:52
續子語pdf 瀏覽:385
2021年加密貨幣最新行情 瀏覽:162
nfs怎麼加密ipsec 瀏覽:245
國二考試調用編譯器運算選擇題 瀏覽:750
同濟大學高等數學pdf 瀏覽:234
延時的宏命令怎麼設置 瀏覽:596
資料庫有哪些加密 瀏覽:209
改之理反編譯注冊教程 瀏覽:391
什麼是編譯程序和翻譯程序 瀏覽:208
python課程心得總結 瀏覽:17
派派中怎麼看對方在哪個伺服器 瀏覽:796