2019最新60道Python面試題&答案精選!年後找工作必看,Python們的福利。 【推薦教學:Python教學】
1.Python 的特色和優點是什麼?
答案:略。
2. 什麼是lambda函數?它有什麼好處?
lambda 函數是一個可以接收任意多個參數(包括可選參數)並且傳回單一表達式值的函數。 lambda 函數不能包含指令,它們所包含的表達式不能超過一個。不要試圖在lambda函數中塞入太多的東西;如果你需要更複雜的東西,應該定義一個普通函數,然後想讓它多長就多長。
lambda函數可以接受任一參數,包含可選參數,但表達式只有一個:
>>> g = lambda x, y: x*y
#>>> g(3,4)
12
#>>> g = lambda x, y=0, z=0: x y z
>>> g(1)
1
>>> g(3, 4, 7)
14
也能夠直接使用lambda函數,不把它賦值給變數:
>>> (lambdax,y=0,z=0:x y z)(3,5,6)
14
如果你的函數非常簡單,只有一個表達式,不包含指令,可以考慮lambda函數。否則,你還是定義函數才對,畢竟函數沒有這麼多限制。
3. 深拷貝和淺拷貝的差別是什麼?
深拷貝是將物件本身複製給另一個物件。這表示如果對物件的副本進行更改時不會影響原始物件。在Python 中,我們使用deepcopy()函數進行深拷貝,使用方法如下:
>>> import copy
>>> b=copy.deepcopy( a)
淺拷貝是將物件的參考複製給另一個物件。因此,如果我們在副本中進行更改,則會影響原始物件。使用copy()函數進行淺拷貝,使用方法如下:
>>> b=copy.copy(a)
4. 列表和元組有什麼不同?
try…except…except…[else…][finally…]
#執行try下的語句,如果引發異常,則執行程序會跳到except語句。對每個except分支順序嘗試執行,如果引發的異常與except中的異常組匹配,則執行相應的語句。如果所有的except都不匹配,則異常會傳遞到下一個呼叫本程式碼的最高層try程式碼。
try下的語句正常執行,則執行else區塊程式碼。如果發生異常,就不會執行;如果存在finally語句,最後總是會執行。
5. Python裡面如何產生隨機數字?
答案:random模組
隨機整數:random.randint(a,b):傳回隨機整數x,a<=x<=b
#random. randrange(start,stop,[,step]):傳回一個範圍在(start,stop,step)之間的隨機整數,不包含結束值。
隨機實數:random.random():傳回0到1之間的浮點數
random.uniform(a,b):傳回指定範圍內的浮點數
#6. 如何在Python中實作多執行緒?
a. Python有一個multi-threading包,但是如果你想讓multi-thread加速你的程式碼,那麼使用它通常不是一個好主意。
b. Python有一個名為GlobalInterpreter Lock(GIL)的結構。 GIL確保只有一個「線程」可以在任何時候執行。一個執行緒取得GIL,做一點工作,然後將GIL傳遞到下一個執行緒。
c. 這種情況很快發生,因此對於人眼看來,您的執行緒似乎並行執行,但它們實際上只是輪流使用相同的CPU核心。
d. 所有這些GIL傳遞都增加了執行的開銷。這意味著如果您想讓程式碼運行得更快,那麼使用執行緒包通常不是一個好主意。
7. 如何在python中使用三元運算子?
三元運算子是用來顯示條件語句的運算子。這包含用於評估為true或false值的語句。
句法:三元運算子語法如下,
[on_true] if [expression] else [on_false]
#範例:
25,50big = x if x < y else y如果xc. 分層繼承 - 從一個基底類別可以繼承任意數量的子類別
d. 多重繼承 - 衍生類別從多個基底類別繼承。
9. 解釋Flask是什麼及其好處?
Flask是基於「Werkzeug,Jinja2和良好意圖」BSD許可證的Python網路微框架。 Werkzeug和Jinja2是它的兩個依賴項。這意味著它對外部庫幾乎沒有依賴性。它使框架變得輕盈,只是少量依賴更新和更少的安全性錯誤。
會話基本上允許您記住從一個請求到另一個請求的資訊。在flask中,會話使用簽署的cookie,以便使用者可以查看會話內容並進行修改。當且僅當有金鑰Flask.secret_key,使用者可以修改會話。
10. Python中的字典是什麼?
Python中的內建資料型別稱為字典。它定義了鍵和值之間的one-to-one關係。字典包含一對鍵及其對應的值。字典由鍵來索引。
我們來舉個例子:
以下範例包含一些鍵,Country, Capital & PM,它們的對應值分別是印度,德里和莫迪。
dict={'Country':'India','Capital':'Delhi','PM':'Modi'}
print dict[Country]
# India
print dict[Capital]
Delhi
print dict[PM]
Modi
11. 什麼是負指數,為什麼要使用它們?
Python中的序列是索引的,它由正數和負數組成。正的數字使用'0'作為第一個索引,'1'作為第二個索引,以此類推。
負數的索引從'-1'開始,表示序列中的最後一個索引,' - 2'作為倒數第二個索引,依次類推。
12. 如何用Python來進行查詢和取代一個文字字串?
可以使用sub()方法來進行查詢與替換,sub方法的格式為:
a.sub(replacement, string[,count=0])
b. replacement是被替換成的文字
c. string是需要被替換的文字
d. count是一個可選參數,指最大被替換的數量
13. 解釋python的and-or語法
與C表達式bool ? a : b類似,但是bool and a or b,當a 為假時,不會像C表達式bool ? a : b 一樣工作
應該將and-or 技巧封裝成一個函數:
defchoose(bool, a,b):return(booland[a ]or[b])[0]
因為[a] 是一個非空列表,它永遠不會為假。甚至 a 是 0 或 '' 或其它假值,列表[a]為真,因為它有一個元素。
14. 請寫出一段Python程式碼實作刪除一個list裡面的重複元素
1,使用set函數,set(list)
2,使用字典函數,
>>>a=[1,2,4,2,4,5,6,5,7,8,9,0]
>>> b={}
>>>b=b.fromkeys(a)
>>>c=list(b.keys ())
>>> c
15. 單引號,雙引號,三引號的差別?
單引號和雙引號是等效的,如果要換行,需要符號(\),三引號則可以直接換行,並且可以包含註解
如果要表示Let's go 這個字串
單引號:s4 = 'Let\'s go'
#雙引號:s5 = “Let's go”
s6 = 'I realy like“ python」! ’
這就是單引號和雙引號都可以表示字串的原因了。
16. 當退出 Python 時是否釋放所有記憶體分配?
答案是否定的。那些具有物件循環引用或全域命名空間引用的變量,在 Python 退出是往往不會被釋放
另外不會釋放 C 庫保留的部分內容。
17. Python裡面search()和match()的差別?
match()函數只檢測RE是不是在string的開始位置匹配,search()會掃描整個string查找匹配, 也就是說match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回none 。
18. 如何在Python中隨機化清單中的項目?
#考慮下面顯示的範例:
from random import shuffle
x = ['Keep', 'The', 'Blue', 'Flag', 'Flying', 'High']
shuffle(x)
print(x)
以下程式碼的輸出如下。
['Flying', 'Keep', 'Blue', 'High', 'The','Flag']
19. 在python中編譯和連結的過程是什麼?
編譯和連結允許正確編譯新擴充功能而不會出現任何錯誤,並且只有在通過編譯過程時才能進行連結。如果使用動態加載,則它取決於系統提供的樣式。 python解釋器可用於提供配置設定檔的動態加載,並將重建解釋器。
這需要的步驟如下:
a. 使用任何名稱以及系統編譯器支援的任何語言建立檔案。例如file.c或file.cpp
b. 將此檔案放在正在使用的發行版的Modules /目錄中。
c. 在Modules /目錄中存在的Setup.local檔案中新增一行。
d. 使用spam file.o執行該檔案
e. 成功執行此重建解釋程式後,在top-level目錄中使用make指令。
f. 如果檔案已更改,則使用指令「make Makefile」執行rebuildMakefile。
20. Python解釋「re」模組的split(), sub(), subn()方法。
要修改字串,Python的「re」模組提供了3種方法。他們是:
split() - 使用正規表示式將“split”給定字串放入列表中。
sub() - 尋找正規表示式模式符合的所有子字串,然後用不同的字串取代它們
subn() - 它類似於sub(),並且也傳回新字串和替換的序號。
21. range和xrange有什麼差別?
在大多數情況下,xrange和range在功能方面完全相同,它們都提供了一種產生整數清單供您使用的方法。唯一的差別是range傳回一個Python列表對象,xrange回傳一個xrange對象。
這表示xrange其實不像run-time那樣產生靜態清單。它使用稱為yielding的特殊技術根據需要創建值。該技術與一種稱為生成器的物件一起使用。這意味著,如果你有一個非常巨大的範圍,你想要產生一個列表,例如10億,xrange就是要使用的功能。
如果你有一個真正的記憶體敏感系統,例如你正在使用的手機,尤其如此,因為range將使用盡可能多的記憶體來創建整數數組,這可能導致記憶體錯誤並導致崩潰程式。
22. Django,Pyramid和Flask之間的差異。
Flask是“microframework”,主要用於具有更簡單要求的小型應用程式。在Flask中,您必須使用外部庫。
Pyramid適用於大型應用程式。它提供了靈活性,並允許開發人員為他們的專案使用正確的工具。開發人員可以選擇資料庫,URL結構,模板樣式等。
Django也可以像Pyramid一樣用於更大的應用程式。
23. 列出Django中的繼承樣式。
在Django中,有三種可能的繼承樣式:
抽象基底類別:當您只希望父類別包含您不想為每個子模型鍵入的資訊時,請使用此樣式。
Multi-table繼承:使用此樣式如果您是sub-classing現有模型並且需要每個模型都有自己的資料庫表。
代理模型:您可以使用此模型,如果您只想修改模型的Python等級行為,而無需更改模型的欄位。
24. 什麼是Python monkey補丁?
在Python中,術語monkey補丁僅指run-time上的類別或模組的動態修改。
考慮以下範例:
# m.py
class MyClass:
def f(self):
#print "f ()"
#然後我們可以像這樣執行monkey-patch測試:
import m
def monkey_f(self):
print "monkey_f( )"
m.MyClass.f = monkey_f
obj = m.MyClass()
obj.f()
輸出如下:
monkey_f()
我們可以看到,在模組之外,我們確實對函數f()的行為做了一些改變,實際執行的是函數monkey_f(),。
25. 有兩個序列a,b,大小都為n,序列元素的值任意整形數,無序?
要求:透過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。
1. 將兩個序列合併為一個序列,並排序,為序列Source
2. 拿出最大元素Big,次大的元素Small
3. 在剩下的序列S[:-2]平分,得到序列max,min
4. 將Small加到max序列,將Big加大min序列,重新計算新序列和,和大的為max ,小的為min。
26. 如何用Python來傳送郵件?
可以使用smtplib標準函式庫。
以下程式碼可以在支援SMTP監聽器的伺服器上執行。
import sys, smtplib
fromaddr =raw_input(「From: 「)
toaddrs = raw_input(「To: 「)。 split(',')
print “Enter message, end with ^D:”
msg = ”
while 1:
line = sys .stdin.readline()
if not line:
break
msg = msg line
# 傳送郵件部分
#server = smtplib.SMTP('localhost')
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
#27. 請寫一個Python邏輯,計算一個檔案中的大寫字母數。
>>> import os
>>>os.chdir('C:\\ Users\\lifei\\Desktop')
>>> with open('Today.txt')astoday:
count=0
#for i in today.read():
if i.isupper():
count =1
print(count)
##執行結果:26
28. Python中的識別碼長度能有多長?
在Python中,標識符可以是任意長度。此外,我們在命名標識符時還必須遵守以下規則:
a. 只能以下劃線或A-Z/a-z 中的字母開頭
b. 其餘部分可以使用A-Z/a-z/ 0-9
c. 區分大小寫
d. 關鍵字不能作為標識符,Python中共有如下關鍵字:
29. 解釋一下Python中的//,%和** 運算子
//運算子執行地板除法(向下取整除),它會傳回整除結果的整數部分。
>>> 7//2
3
這裡整除後會回傳3.5。
同樣地,執行取冪運算。 ab會回傳a的b次方。
>>> 2**10
1024
最後,%執行取模運算,傳回除法的餘數。
>>> 13%7
6
#>>> 3.5%1.5
0.5
#30. 在Python中如何使用多進位數字?
我們在Python中,除十進位外還可以使用二進位、八進位和十六進位。
a. 二進位數字由0和1組成,我們使用 0b 或 0B 前綴表示二進位數。
>>> int(0b1010)
#10
b. 使用bin()函數將數字轉換為它的二進位形式。
>>> bin(0xf)
'0b1111'
c. 八進制數由數字0-7 組成,用前綴0o 或0O 表示8 進制數。
>>> oct(8)
'0o10'
d. 十六進數由數字0-15 組成,用前綴0x 或0X 表示16 進制數。
>>> hex(16)
'0x10'
>>> hex(15)
'0xf'
31. 怎樣取得字典中所有鍵的列表?
使用keys() 取得字典中的所有鍵
>>>mydict={'a':1,'b':2,'c': 3,'e':5}
>>> mydict.keys()
dict_keys(['a', 'b', 'c', 'e'] )
32. 怎樣宣告多個變數並賦值?
一共有兩種方式:
>>> a,b,c=3,4,5 #This assigns 3,4, and 5 to a, b, and c respectively
>>> a=b=c=3 #This assigns 3 to a,b, and c
33. 元組的解封裝是什麼?
首先我們來看解封裝:
>>> mytuple=3,4,5
>>> mytuple
(3, 4, 5)
這將3,4,5 封裝到元組mytuple 中。
現在我們將這些值解封裝到變數x,y,z 中:
>>> x,y,z=mytuple
>> ;> x y z
得到結果12.
34. 解釋如何在Django中設定資料庫。
可以使用指令edit mysite /setting.py,它是一個普通的python模組,模組層級代表Django設定。
Django預設使用SQLite;對於Django用戶來說這很容易,因此不需要任何其他類型的安裝。如果您的資料庫選擇不同,則必須使用DATABASE'default'項目中的下列鍵來符合您的資料庫連線設定。
引擎:您可以使用'django.db.backends.sqlite3','django.db.backeneds.mysql','django.db.backends.postgresql_psycopg2','django.db.backends.oracle'等來更改資料庫
名稱:資料庫的名稱。如果您使用SQLite作為資料庫,那麼資料庫將是您電腦上的文件,Name應該是完整的絕對路徑,包括該文件的文件名稱。
如果您沒有選擇SQLite作為資料庫,則必須新增密碼,主機,使用者等設定。 Django使用SQLite作為預設資料庫,它將資料儲存在單一檔案系統中。如果你有資料庫伺服器-PostgreSQL,MySQL,Oracle,MSSQL-並且想要使用它而不是SQLite,那麼使用資料庫的管理工具為你的Django專案建立一個新的資料庫。無論哪種方式,在您的(空)資料庫到位的情況下,剩下的就是告訴Django如何使用它。這是專案的settings.py檔案的來源。
我們將新增以下程式碼行檔:
DATABASES = {
'default': {
'ENGINE' : 'django.db.backends .sqlite3',
'NAME' : os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
35. 如何取得任何網址或網頁的Google快取時限?
使用以下URL格式:
http://webcache.googleusercontent.com/search?q=cache:URLGOESHERE
請務必將「URLGOESHERE」替換為要檢索其快取的頁面或網站的正確Web位址,並查看時間。例如,要查看edureka.co的Google Webcache年齡,您需要使用以下網址:
http://webcache.googleusercontent.com/search?q=cache:edureka.co
#36. 什麼是Python中的map函數?
Map函數執行作為第一個參數給出的函數,該函數遍歷第二個參數給出的迭代的所有元素的。如果給定的函數包含多於1個參數,則給出了許多迭代。
37. 如何在NumPy陣列中取得N個最大值的索引?
我們可以使用以下程式碼來取得NumPy陣列中N個最大值的索引:
import numpy as np
arr = np.array([1, 3, 2, 4, 5])
print(arr.argsort()[-3:][::-1])
輸出
[ 4 3 1 ]
38. 你如何用Python /NumPy計算百分位數?
我們可以使用以下程式碼計算百分位數
import numpy as np
a = np.array([1,2,3,4, 5])
p = np.percentile(a, 50) #Returns 50th percentile, e.g. median
##print(p)輸出##3
39. NumPy陣列(arrays)相對(嵌套)Python列表(lists)有哪些優點?a. Python的清單是高效率的general-purpose容器。它們支援(相當)有效的插入,刪除,追加和連接,Python的list comprehension使它們易於構造和操作。
b. Python列表的一些限制:它們不支援向量化「vectorized」操作,如元素加法和乘法,並且它們可以包含不同類型的物件這一事實意味著Python必須儲存每個元素的類型訊息,並且必須在每個元素上操作時執行類型調度代碼。
c. NumPy不僅效率更高;它也更方便。你可以免費獲得大量的向量和矩陣運算,有時可以避免不必要的工作。
d. NumPy數組更快,你可以使用NumPy,FFT,卷積,快速搜索,基本統計,線性代數,直方圖等內建方法。
40. NumPy和SciPy有什麼差別?a. 在理想的世界中,NumPy只包含陣列資料型別和最基本的運算:索引,排序,重塑,基本元素函數等。
b. 所有數字代碼都將駐留在SciPy中。但是,NumPy的一個重要目標是相容性,因此NumPy試圖保留其前任任何一個支援的所有功能。
c. 因此,NumPy包含一些線性代數函數,即使它們更恰當地屬於SciPy。無論如何,SciPy包含更多功能更全版本的線性代數模組,以及許多其他數值演算法。
d. 如果你使用python進行科學計算,你應該安裝NumPy和SciPy。大多數新功能屬於SciPy而非NumPy。
41. python程式中文輸出問題怎麼解決?用encode和decode,如:
import os.path
import xlrd,sys
Filename='/home/tom/ Desktop/1234.xls'
if not os.path.isfile(Filename):
raise NameError,”%s is not a valid filename”%Filename
bk =xlrd.open_workbook(Filename)
shxrange=range(bk.nsheets)
print shxrange
for x in shxrange:
#p=bk. sheets()[x].name.encode('utf-8′)
print p.decode('utf-8′)
方法二:
在檔案開頭加上
reload(sys)
sys.setdefaultencoding('utf8′)
42. 閱讀下面的程式碼,它的輸出結果是什麼?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()答案,輸出結果以註釋的形式表示:a.go()# go A go!b.go()# go A go!# go B go!c.go()# go A go!# go C go!##d .go()
# go A go!
# go C go!
# go B go!
# go D go!
e.go()
# go A go!
# go C go!
# go B go!
a. stop()
# stop A stop!
b.stop()
# stop A stop!
c.stop()
# stop A stop!
# stop C stop!
#d.stop()
# stop A stop!
## stop C stop!
# stop D stop!
e.stop()
# stop A stop!
a.pause()
## … Exception : Not Implemented
b.pause()
# … Exception: Not Implemented
c.pause()
## … Exception: Not Implemented
d.pause()
# wait D wait!
#e.pause()
…Exception: Not Implemented
43. 介紹一下Python中webbrowser的用法?
webbrowser模組提供了一個高級介面來顯示基於Web的文檔,大部分情況下只需要簡單的呼叫open()方法。
webbrowser定義瞭如下的例外:
exception webbrowser.Error, 當瀏覽器控制項發生錯誤是會拋出這個例外
webbrowser有以下方法:
webbrowser.open(url[, new=0[,autoraise=1]])
這個方法是在預設的瀏覽器中顯示url, 如果new = 0, 那麼url會在同一個瀏覽器視窗下打開,如果new = 1, 會打開一個新的窗口,如果new = 2, 會打開一個新的tab, 如果autoraise =true, 視窗會自動增長。
webbrowser.open_new(url)
在預設瀏覽器中開啟一個新的視窗來顯示url, 否則,在僅有的瀏覽器視窗中開啟url
# webbrowser.open_new_tab(url)
在預設瀏覽器中當開一個新的tab來顯示url,否則跟open_new()一樣
webbrowser.get([name])
根據name傳回瀏覽器對象,如果name為空,則傳回預設的瀏覽器
webbrowser.register(name, construtor[,instance])
註冊一個名字為name的瀏覽器,如果這個瀏覽器類型被註冊就可以用get()方法來取得。
44. Python中, list, tuple, dict, set有什麼差別, 主要應用在什麼樣的場景?
定義:
list:鍊錶, 有序的項目, 透過索引進行查找, 使用方括號"[]";
tuple: 元組,元組將多樣的物件集合在一起, 不能修改, 透過索引進行查找, 使用括號"()";
dict:字典, 字典是一組鍵(key)和值(value)的組合, 透過鍵(key)進行查找, 沒有順序, 使用大括號"{}";
set: 集合,無序, 元素只出現一次, 自動去重, 使用"set([])" ;
應用場景:
list, 簡單的資料集合,可以使用索引;
tuple, 把一些資料當做一個整體去使用, 不能修改;
dict, 使用鍵值和值進行關聯的資料;
set, 資料只出現一次, 只關心資料是否出現, 不關心其位置;
代碼:
mylist = [1, 2, 3, 4, 'Oh']
mytuple = (1, 2, 'Hello', (4, 5))
#mydict = { 'Wang' : 1, 'Hu' : 2, 'Liu' :4}
myset = set(['Wang', 'Hu', 'Liu', 4,'Wang'])
45. 寫一個函數, 輸入一個字串, 傳回倒序排列的結果: 如:string_reverse('abcdef'), 傳回: 'fedcba' (請採用多種方法實現, 並對實作方法進行比較)。
解答: 5種方法的比較。
1. 簡單的步長為-1, 即字串的翻轉;
2. 交換前後字母的位置;
3. 遞歸的方式, 每次輸出一個字元;
4. 雙端佇列,使用extendleft()函數;
#5. 使用for迴圈, 從左到右輸出;
程式碼:
string = 'abcdef'
def string_reverse1(string):
return string[::-1]
def string_reverse2(string):
t= list(string)
l= len(t)
for i,j in zip(range(l-1, 0, -1), range(l/ /2)):
t[i], t[j] = t[j], t[i]
return "".join(t)
def string_reverse3(string):
##if len(string) <= 1:return stringreturn string_reverse3(string[1:]) string[0]from collections import dequedef string_reverse4(string):d= deque()##d.extendleft(string)
# return ''.join(d)
def string_reverse5(string):
#return ''.join(string[len(string) - i] for i in range(1,len (string) 1))
return ''.join(string[i] for i in range(len(string)-1, -1, -1))
print(string_reverse1 (string))
print(string_reverse2(string))
#print(string_reverse3(string))
print(string_reverse4(string))
print (string_reverse5(string))
46. 下列哪一個語句建立字典? (多個正確的答案可能)a)d = {}
b)d = {“john”:40,“peter”:45}
c)d = {40:“john”,45:“peter”}
d)d =(40:“john”,45:“50”)
回答: b,c, d。透過指定鍵和值來建立字典。
47. 其中哪一個是floor division?a) /
b)//
C) %
d)沒有提到的
回答:b)//;例如,5.0/2 = 2.5,5.0//2 = 2
48. 標識符的最大可能長度是多少?
a)31個字元
b)63個字元
c)79個字元
d)以上都不是
回答:d)以上皆非;標識符可以是任意長度。
49. 為什麼不鼓勵以下劃線開頭的局部變數名稱?
a)它們用來表示類別的私有變數
b)他們混淆了口譯員
c)它們用來表示全域變數
#d)他們放慢執行速度
回答:a)它們用來表示類別的私有變數;由於Python沒有私有變數的概念,因此前導下劃線用來表示不能從類別外部存取的變數。
50. 下列哪一項是無效宣告?
a)abc = 1,000,000
b)a b c = 1000 2000 3000
c)a,b,c = 1000,2000,3000
#c)a,b,c = 1000,2000,3000 ##d)a_b_c = 1,000,000回答:b)a b c = 1000 2000 3000;變數名稱中不允許使用空格。51. 以下是什麼輸出?
try:if '1' != 1:raise "someError"else:print ("someError has not occured")except "someError":print ("someError has occured")a)發生了someError# b)沒有發生someErrorc)無效程式碼d)以上都不是回答:c)無效程式碼;新的例外類別必須從BaseException繼承。這裡沒有這樣的繼承。52. 假設list1是[2,33,222,14,25],什麼是list1 [-1]?
a)錯誤b)沒有c)25d)2回答:c)25 ;索引-1對應於列表中的最後一個索引。53. 要開啟檔案c:\ scores.txt進行編寫,我們使用:
a)outfile = open(“c:\scores.txt”, “r”)b)outfile = open(“c:\\scores.txt”,“w”)c)outfile = open(file = “c:\scores. txt”,“r”)d)outfile = open(file = “c:\\scores.txt”,“o”)回答:b)該位置包含雙斜槓(\$$,w用於指示正在寫入檔案。#54. 以下是什麼輸出?
##f = None
for i in range (5):
with open("data.txt", "w") as f:
if i > 2:##break
print f.closeda)Trueb)Falsec)Noned)Error#答:a)True;與open檔案一起使用時,WITH語句可確保在with區塊退出時關閉檔案物件。55. 何時執行try-except-else的else部分?
a)總是b)發生異常時c)沒有異常發生時d)當發生異常時至除了區塊回答:c)沒有異常發生時;當沒有異常發生時,執行else部分。56. a=1, b=2, 不用中間變數交換a和b的值。
兩種形式: 加法或異或;代碼:a = 1b = 2a = a bb = a - ba = a - bprint ('a = {0}, b = {1}'.format(a,b))a = a ^ bb = a ^ ba = a ^ bprint ('a = {0}, b = {1}'.format( a, b))
57. 請寫出列印結果
x = [0, 1]i = 0i, x[i] = 1, 2print(x)列印結果: [0, 2], python可以使用連續賦值, 從左到右。 g = lambda x, y=2, z : x y**zg(1, z=10) = ? 列印結果: 異常, 形參表末才可以有預設參數, z需要提供預設參數。58. Python的單例模式
單例模式是常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例類別的特殊類別。透過單例模式可以確保系統中一個類別只有一個實例而且該實例易於外界訪問,從而方便對實例個數的控制並節約系統資源。如果希望在系統中某個類別的物件只能存在一個,單例模式是最好的解決方案。 __new__()在__init__()之前被調用,用於產生實例物件。利用這個方法和類別的屬性的特點可以實現設計模式的單例模式。單例模式是指創建唯一對象,單例模式設計的類別只能實例 這個絕對常考啊。絕對要記住1~2個方法,當時面試官是要手寫的。 使用__new__方法class Singleton(object):def __new__(cls, *args, **kw):
if not hasattr(cls, '_instance '):
orig = super(Singleton, cls)
cls._instance = orig.__new__(cls, *args, **kw)
return cls._instance
class MyClass(S**ingleton):MyClass(S
a = 1
class MyClass2(Borg):
a = 1
裝飾版本
def singleton(cls):
instances = {}
def getinstance(*args, **kw):
if cls not in instances:
instances[cls] = cls(*args, **kw)
return instances[cls]
return getinstance
#@singleton
class MyClass:
…
#import方法
作為python的模組是天然的單例模式
# mysingleton.py
class My_Singleton(object):
def foo(self):
pass
my_singleton = My_Singleton()
# to use
from mysingleton import my_singleton
#my_singleton.foo()
59. A、B兩人分別在兩座島上。 B生病了,A有B需要的藥。 C有一艘小船和一個可以上鎖的箱子。 C願意在A和B之間運東西,但東西只能放在箱子裡。只要箱子沒上鎖,C都會偷走箱子裡的東西,不管箱子裡有什麼。如果A和B各自有一把鎖和只能開自己那把鎖的鑰匙,A該如何把東西安全遞交給B?
答案:A把藥放進箱子,用自己的鎖把箱子鎖上。 B拿到箱子後,再在箱子上加上一把自己的鎖。箱子運回A後,A取下自己的鎖。箱子再運到B手中時,B取下自己的鎖,取得藥物。
60. 有25匹馬,速度都不同,但每匹馬的速度都是定值。現在只有5條賽道,無法計時,即每賽一場最多只能知道5匹馬的相對快慢。問最少賽幾場可以找出25匹馬中速度最快的前3名?
答案:每匹馬都至少要有一次參賽的機會,所以25匹馬分成5組,一開始的這5場比賽是免不了的。接下來要找冠軍也很容易,每一組的冠軍在一起賽一場就行了(第6場)。最後就是要找第2和第3名。我們按照第6場比賽中得到的名次依序把它們在前5場比賽中所在的組別命名為A、B、C、D、E。即:A組的冠軍是第6場的第1名,B組的冠軍是第6場的第2名…每一組的5匹馬按照他們已經賽出的成績從快到慢編號:
A組:1,2,3,4,5
B組:1,2,3,4,5
C組:1,2,3, 4,5
D組:1,2,3,4,5
E組:1,2,3,4,5
從現在得到的訊息,我們可以知道哪些馬已經被排除在3名以外。只要已經能確定有3匹或3匹以上的馬比這匹馬快,那麼它就已經被淘汰了。可以看到,只有上表中粗體藍色的那5匹馬才有可能是2、3名的。即:A組的2、3名;B組的1、2名,C組的第1名。取這5匹馬進行第7場比賽,第7場比賽的前兩名就是25匹馬中的2、3名。故一共最少要賽7場。
以上是60道Python面試題&答案精選!年後找工作必看的詳細內容。更多資訊請關注PHP中文網其他相關文章!