11道面試中不常見(jiàn)卻一定會(huì)問(wèn)到Python題解析
Python面試題解析
編者按:
恰逢金三銀四招聘季,很多朋友都在忙著跳槽找工作,不斷的面試……我們知道網(wǎng)上有非常多面試題的解析,但是其中往往是前幾年的老題了。 為了幫助小伙伴們能夠在Python工作面試中脫穎而出,再此特別奉上2019年11道***Python面試大題及答題思路解析。
1、請(qǐng)用python編寫(xiě)函數(shù)find_string,從文本中搜索并打印內(nèi)容,要求支持通配符星號(hào)和問(wèn)號(hào)。
例子:
- >>>find_string('hello\nworld\n','wor')
- ['wor']
- >>>find_string('hello\nworld\n','l*d')
- ['ld']
- >>>find_string('hello\nworld\n','o.')
- ['or']
解析:
- def find_string(str_in,pat):
- import re
- return re.findall(pat,str_in,re.I)
2、看你T恤上印著:人生苦短,我用Python,你可否說(shuō)說(shuō)Python到底是什么樣的語(yǔ)言?你可以比較其他技術(shù)或者語(yǔ)言來(lái)回答你的問(wèn)題。
解析:
這里是一些關(guān)鍵點(diǎn):Python是解釋型語(yǔ)言。這意味著不像C和其他語(yǔ)言,Python運(yùn)行前不需要編譯。其他解釋型語(yǔ)言包括PHP和Ruby。
1.Python是動(dòng)態(tài)類型的,這意味著你不需要在聲明變量時(shí)指定類型。你可以先定義x=111,然后 x=”I’m a string”。
2.Python是面向?qū)ο笳Z(yǔ)言,所有允許定義類并且可以繼承和組合。Python沒(méi)有訪問(wèn)訪問(wèn)標(biāo)識(shí)如在C++中的public, private, 這就非常信任程序員的素質(zhì),相信每個(gè)程序員都是“成人”了~
3.在Python中,函數(shù)是一等公民。這就意味著它們可以被賦值,從其他函數(shù)返回值,并且傳遞函數(shù)對(duì)象。類不是一等公民。
4.寫(xiě)Python代碼很快,但是跑起來(lái)會(huì)比編譯型語(yǔ)言慢。幸運(yùn)的是,Python允許使用C擴(kuò)展寫(xiě)程序,所以瓶頸可以得到處理。Numpy庫(kù)就是一個(gè)很好例子,因?yàn)楹芏啻a不是Python直接寫(xiě)的,所以運(yùn)行很快。
5.Python使用場(chǎng)景很多 – web應(yīng)用開(kāi)發(fā)、大數(shù)據(jù)應(yīng)用、數(shù)據(jù)科學(xué)、人工智能等等。它也經(jīng)常被看做“膠水”語(yǔ)言,使得不同語(yǔ)言間可以銜接上。
6.Python能夠簡(jiǎn)化工作 ,使得程序員能夠關(guān)心如何重寫(xiě)代碼而不是詳細(xì)看一遍底層實(shí)現(xiàn)。
本題解析來(lái)源:@David 9,鏈接:http://nooverfit.com/wp/15
3、請(qǐng)寫(xiě)出一段Python代碼實(shí)現(xiàn)刪除一個(gè)list里面的重復(fù)元素。
解析:
1.使用set函數(shù),set(list)
2.使用字典函數(shù),
- >>>a=[1,2,4,2,4,5,6,5,7,8,9,0]
- >>> b={}
- >>>b=b.fromkeys(a)
- >>>c=list(b.keys())
- >>> c
本題解析來(lái)源:@Tom_junsong
4、a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3],編程用 sort 進(jìn)行排序,然后從***一個(gè)元素開(kāi)始判斷?
解析:
- a.sort()
- last=a[-1]
- for i inrange(len(a)-2,-1,-1):
- if last==a[i]:
- del a[i]
- else:last=a[i]
- print(a)
本題解析來(lái)源:@Tom_junsong
5、Python里面如何生成隨機(jī)數(shù)?
解析:
random模塊
隨機(jī)整數(shù):random.randint(a,b):返回隨機(jī)整數(shù)x,a<=x<=b
random.randrange(start,stop,[,step]):返回一個(gè)范圍在(start,stop,step)之間的隨機(jī)整數(shù),不包括結(jié)束值。
隨機(jī)實(shí)數(shù):random.random( ):返回0到1之間的浮點(diǎn)數(shù)
random.uniform(a,b):返回指定范圍內(nèi)的浮點(diǎn)數(shù)。
本題解析來(lái)源:@Tom_junsong
6、Python里面如何實(shí)現(xiàn)tuple和list的轉(zhuǎn)換?
解析:
直接使用tuple和list函數(shù)就行了,type()可以判斷對(duì)象的類型
7、什么是lambda函數(shù)?它有什么好處?
解析:
lambda 表達(dá)式,通常是在需要一個(gè)函數(shù),但是又不想費(fèi)神去命名一個(gè)函數(shù)的場(chǎng)合下使用,也就是指匿名函數(shù)
lambda函數(shù):首要用途是指點(diǎn)短小的回調(diào)函數(shù)
- lambda [arguments]:expression
- >>> a=lambdax,y:x+y
- >>> a(3,11)
8、- 輸入一個(gè)字符串 返回滿足以下條件的字符串
- 由字符串的最前面兩個(gè)字母和***兩個(gè)字母組成的字符串。
- 例如: 'spring' 返回 'spng', 'is' 返回 'is’
- 當(dāng)輸入的字符串長(zhǎng)度小于2時(shí),返回空字符串
解析:
- s=input('input:')
- l=len(s)
- if l<2:
- print('')
- else :
- if l>3:
- s=s[:2]+s[-2:]
- print(s)
9、把每個(gè)合數(shù)分解成幾個(gè)質(zhì)數(shù)相乘的形式,例如:100=2*2*5*5,并把代碼封裝成函數(shù)的形式
解析:
- def f(n):
- result = []
- i = 2
- str1 = str(n) + '='
- while n > 1:
- if n % i == 0:
- n /= i
- result.append(str(i))
- i -= 1
- i += 1
- str1 += '*'.join(result)
- return str1
- if __name__ == '__main__':
- for i in range(100, 120):
- print(f(i))
對(duì)n進(jìn)行分解質(zhì)因數(shù),應(yīng)先找到一個(gè)最小的質(zhì)數(shù)k,然后按下述步驟完成:
(1)如果這個(gè)質(zhì)數(shù)恰等于n,則說(shuō)明分解質(zhì)因數(shù)的過(guò)程已經(jīng)結(jié)束,打印出即可。
(2)如果n<>k,但n能被k整除,則應(yīng)打印出k的值,并用n除以k的商,作為新的正整數(shù)你n,重復(fù)執(zhí)行***步。
(3)如果n不能被k整除,則用k+1作為k的值,重復(fù)執(zhí)行***步。
10、請(qǐng)用Python手寫(xiě)實(shí)現(xiàn)冒泡排序
解析:
冒泡排序的原理不難,假定要將被排序的數(shù)組R[1..n]從大到小垂直排列,每個(gè)數(shù)字R可以看作是重量為R.key的氣泡。
根據(jù)輕氣泡在上、重氣泡在上的原則,從下往上掃描數(shù)組R:凡掃描到違反本原則的輕氣泡,則使其向上"飄浮"。如此反復(fù)進(jìn)行,直到***任何兩個(gè)氣泡都是輕者在上、重者在下為止。
然后將所有氣泡逆序,就實(shí)現(xiàn)了數(shù)組從小到大的排序。
步驟:
1 比較相鄰的元素。如果***個(gè)比第二個(gè)大,就交換他們兩個(gè)。
2 對(duì)第0個(gè)到第n-1個(gè)數(shù)據(jù)做同樣的工作。這時(shí),***的數(shù)就到了數(shù)組***的位置上。
3 針對(duì)所有的元素重復(fù)以上的步驟,除了***一個(gè)。
4 持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。
Python實(shí)現(xiàn)
- def bubble_sort(arry):
- #獲得數(shù)組的長(zhǎng)度
- n = len(arry)
- for i in range(n):
- for j in range(1,n-i):
- #如果前者比后者大
- if arry[j-1] > arry[j] :
- #則交換兩者
- arry[j-1],arry[j] = arry[j],arry[j-1]
- return arry
11、- 判斷是否為回文
- 提示:回文:62426是回文數(shù)字
解析:
- s=input('pls input a string of numbes:')
- s_=s[::-1]
- answer='isn\'t'
- if s_==s:
- answer='is'
- print(s,answer,'Palindrome number')
如果您還想看更多關(guān)于Python的面試題,我們推薦你點(diǎn)擊“閱讀原文”到七月在線AI面試題題庫(kù),題庫(kù)里目前擁有上千道AI面試題解析,涵蓋所有考點(diǎn),包括機(jī)器學(xué)習(xí)、深度學(xué)習(xí)、Python、NLP、數(shù)據(jù)挖掘、算法等個(gè)方面。