歡迎光臨
每天分享高質量文章

11道面試中不常見卻一定會問到Python題解析

(點擊上方快速關註並設置為星標,一起學Python)

來源:http://www.51testing.com/html/62/n-4457962.html

我們知道網上有非常多面試題的解析,但是其中往往是前幾年的老題了。 為了幫助小伙伴們能夠在Python工作面試中脫穎而出,再此特別奉上2019年11道最新Python面試大題及答題思路解析。

1、請用python編寫函式find_string,從文本中搜索並打印內容,要求支持通配符星號和問號。

例子:

>>>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,你可否說說Python到底是什麼樣的語言?你可以比較其他技術或者語言來回答你的問題。

解析:這裡是一些關鍵點:Python是解釋型語言。這意味著不像C和其他語言,Python運行前不需要編譯。其他解釋型語言包括PHP和Ruby。

1.Python是動態型別的,這意味著你不需要在宣告變數時指定型別。你可以先定義x=111,然後 x=”I’m a string”。

2.Python是面向物件語言,所有允許定義類並且可以繼承和組合。Python沒有訪問訪問標識如在C++中的public, private, 這就非常信任程式員的素質,相信每個程式員都是“成人”了~

3.在Python中,函式是一等公民。這就意味著它們可以被賦值,從其他函式傳回值,並且傳遞函式物件。類不是一等公民。

4.寫Python代碼很快,但是跑起來會比編譯型語言慢。幸運的是,Python允許使用C擴展寫程式,所以瓶頸可以得到處理。Numpy庫就是一個很好例子,因為很多代碼不是Python直接寫的,所以運行很快。

5.Python使用場景很多 – web應用開發、大資料應用、資料科學、人工智慧等等。它也經常被看做“膠水”語言,使得不同語言間可以銜接上。

6.Python能夠簡化工作 ,使得程式員能夠關心如何重寫代碼而不是詳細看一遍底層實現。

本題解析來源:@David 9,鏈接:http://nooverfit.com/wp/15

3、請寫出一段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

4、a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3],編程用 sort 進行排序,然後從最後一個元素開始判斷刪除重覆的元素?

解析:

a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]

a.sort()
last=a[-1]
for i in range(len(a)-2,-1,-1):
    if last==a[i]:
        del a[i]
    else:
        last=a[i]
print(a)

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裡面如何實現tuple和list的轉換?

解析:直接使用tuple和list函式就行了,type()可以判斷物件的型別

7、什麼是lambda函式?它有什麼好處?

解析:

lambda 運算式,通常是在需要一個函式,但是又不想費神去命名一個函式的場合下使用,也就是指匿名函式

lambda函式:首要用途是指點短小的回呼函式

lambda [arguments]:expression 
>>> a=lambdax,y:x+y 
>>> a(3,11)

8、輸入一個字串 傳回滿足以下條件的字串

由字串的最前面兩個字母和最後兩個字母組成的字串。例如: ‘spring’ 傳回 ‘spng’, ‘is’ 傳回 ‘is’當輸入的字串長度小於2時,傳回空字串

解析:

s=input('input:') 
l=len(s) 
if l<2: 
    print('') 
else : 
    if l>3: 
        s=s[:2]+s[-2:] 
    print(s)

9、把每個合數分解成幾個質數相乘的形式,例如:100=225*5,並把代碼封裝成函式的形式

解析:

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))

對n進行分解質因數,應先找到一個最小的質數k,然後按下述步驟完成:

(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,打印出即可。

(2)如果n<>k,但n能被k整除,則應打印出k的值,並用n除以k的商,作為新的正整數你n,重覆執行第一步。

(3)如果n不能被k整除,則用k+1作為k的值,重覆執行第一步。

10、請用Python手寫實現冒泡排序

解析:

冒泡排序的原理不難,假定要將被排序的陣列R[1..n]從大到小垂直排列,每個數字R可以看作是重量為R.key的氣泡。

根據輕氣泡在上、重氣泡在上的原則,從下往上掃描陣列R:凡掃描到違反本原則的輕氣泡,則使其向上”飄浮”。如此反覆進行,直到最後任何兩個氣泡都是輕者在上、重者在下為止。

然後將所有氣泡逆序,就實現了陣列從小到大的排序。

步驟:

1 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

2 對第0個到第n-1個資料做同樣的工作。這時,最大的數就到了陣列最後的位置上。

3 針對所有的元素重覆以上的步驟,除了最後一個。

4 持續每次對越來越少的元素重覆上面的步驟,直到沒有任何一對數字需要比較。

Python實現

def bubble_sort(arry): 
    #獲得陣列的長度 
    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是迴文數字解析:

s=input('pls input a string of numbes:') 
s_=s[::-1] 
answer='isn't' 
if s_==s: 
    answer='is' 
print(s,answer,'Palindrome number') 
赞(0)

分享創造快樂