2020 年最全 Python 面试题汇总 (一)
@Author:Runsen
大四刷題拼offer系列,不拼不行啊。我先刷下牛客網(wǎng)的Python的題目和知識點,適當(dāng)?shù)挠涗浵伦约鹤鲥e的題目。
文章目錄
- 1、Pythno邏輯運算符
- 2、求100億有多少素數(shù)
- 3、深淺復(fù)制
- 4、裝飾器
- 5、random模塊
- 6、元組的定義
- 7、類定義
- 8、函數(shù)對象定義
- 9、字典的聲明定義
- 10、字符串格式化
- 11、 內(nèi)存管理
- 12、正則表達(dá)式
- 13、切片
- 14、復(fù)數(shù)
- 15、 切片不受內(nèi)建類型的限制
- 16、關(guān)鍵詞return
- 17、轉(zhuǎn)義字符串
- 18、global
- 19、標(biāo)識符
- 20、socket
1、Pythno邏輯運算符
下列代碼運行結(jié)果是? a = 'a' print a > 'b' or 'c' # 'C'由于比較運算符優(yōu)先級大于邏輯運算符,根據(jù)上表,當(dāng) a > ‘b’,即 ‘a(chǎn)’ > ‘b’ 為 Fasle 時(‘a(chǎn)’ 的 ASCII 碼比 ‘b’ 小),返回值為 ‘c’,故答案選C。
2、求100億有多少素數(shù)
假設(shè)可以不考慮計算機(jī)運行資源(如內(nèi)存)的限制,以下 python3 代碼的預(yù)期運行結(jié)果是:()
import math def sieve(size):sieve= [True] * sizesieve[0] = Falsesieve[1] = Falsefor i in range(2, int(math.sqrt(size)) + 1):k= i * 2while k < size:sieve[k] = Falsek += ireturn sum(1 for x in sieve if x) print(sieve(10000000000))A、455052510 B、455052511 C、455052512 D、455052513本題是求0-100億之間的素數(shù)的個數(shù),首先你要讀懂代碼。讀懂代碼后,自己編寫Meissel-Lehmer 算法快速求出0-100億內(nèi)的素數(shù)個數(shù)。百度100億以內(nèi)的素數(shù),百度沒有。但是我們可以記住這個值,關(guān)于Meissel-Lehmer算法。
3、深淺復(fù)制
本題考查的是 dict 類型中 copy() 方法的使用。
kvps = { '1' : 1, '2' : 2 } theCopy = kvps.copy() kvps['1'] = 5 sum = kvps['1'] + theCopy['1'] print(sum) # 6下面,我們看一個容易出錯的例子。
import copyd = {'1': [1, 1, 1], '2': 2} # 方法1:賦值引用,copy1和d指向同一個對象 copy1 = d # 方法2:淺復(fù)制,復(fù)制生成新對象copy2,但是只復(fù)制一層,[1, 1, 1]為兩者共同子對象, copy2 = d.copy() # 方法3:淺復(fù)制,調(diào)用copy模塊中的方法,同方法2 copy3 = copy.copy(d) # 方法3:深復(fù)制,復(fù)制生成新對象copy4,并且遞歸復(fù)制所有子對象,所以d中原來指向[1, 1, 1]的改動不會影響深復(fù)制生成的子對象[1, 1, 1] copy4 = copy.deepcopy(d)d['1'][0] = 3 d['2'] = 3 print(copy1, copy2, copy3, copy4) 打印結(jié)果 {'1': [3, 1, 1], '2': 3} {'1': [3, 1, 1], '2': 2} {'1': [3, 1, 1], '2': 2} {'1': [1, 1, 1], '2': 2}4、裝飾器
以下程序輸出為:
def w1():print('正在裝飾')def inner():print('正在驗證權(quán)限')return inner()w1() # 正在裝飾 正在驗證權(quán)限如果外層函數(shù)返回的是一個函數(shù)名的話,運行結(jié)果應(yīng)該是:正在裝飾
如果外層函數(shù)返回的是函數(shù)調(diào)用的話,運行結(jié)果是:正在裝飾 正在驗證權(quán)限
5、random模塊
下面的python3函數(shù),如果輸入的參數(shù)n非常大,函數(shù)的返回值會趨近于以下哪一個值
import random def foo(n): random.seed()c1 = 0c2 = 0for i in range(n):x = random.random()y = random.random()r1 = x * x + y * yr2 = (1 - x) * (1 - x) + (1 - y) * (1 - y)if r1 <= 1 and r2 <= 1:c1 += 1else:c2 += 1return c1 / c2random.random()生成0和1之間的隨機(jī)浮點數(shù)float,上面代碼是計算兩個四分之一的圓的交集,最終得到的結(jié)果是
π?24?π\(zhòng)frac{\pi-2}{4-\pi}4?ππ?2?。
具體解決的如下圖所示。
6、元組的定義
下列哪種不是Python元組的定義方式?
A、(1) B、(1, ) C、(1, 2) D、(1, 2, (3, 4))Python 中的 tuple 結(jié)構(gòu)為 “不可變序列”,用小括號表示。為了區(qū)別數(shù)學(xué)中表示優(yōu)先級的小括號,當(dāng) tuple 中只含一個元素時,需要在元素后加上逗號。(1)會被python認(rèn)為是int類型,所以正確答案必須是(1)
>>> print(type((1,))) <class 'tuple'> >>> print(type((1))) <class 'int'>7、類定義
有如下類定義,下列描述錯誤的是?
class A(object):passclass B(A):passb = B()A、isinstance(b, A) == True B、isinstance(b, object) == True C、issubclass(B, A) == True D、issubclass(b, B) == True 答案isinstance(object,classinfo),用于判斷object是否是classinfo的一個實例,或者object是否是classinfo類的子類的一個實例,如果是返回True。類似 type()。如果要判斷兩個類型是否相同推薦使用 isinstance()。
issubclass(class,classinfo),用于判斷class是否是classinfo類的子類,如果是返回True.
class A(object):pass class B(A):pass b = B() print(isinstance(b,A)) # True print(isinstance(b,B)) # True print(type(b) is B) # True print(type(b) is A) # False print(issubclass(B,A)) # True print(issubclass(b,B)) # TypeError: issubclass() arg 1 must be a class8、函數(shù)對象定義
Python中函數(shù)是對象,描述正確的是?
A、函數(shù)可以賦值給一個變量 B、函數(shù)可以作為元素添加到集合對象中 C、函數(shù)可以作為參數(shù)值傳遞給其它函數(shù) D、函數(shù)可以當(dāng)做函數(shù)的返回值上面選擇全部正確。在 Python 中萬物皆為對象,函數(shù)也不例外,函數(shù)作為對象可以賦值給一個變量、可以作為元素添加到集合對象中、可作為參數(shù)值傳遞給其它函數(shù),還可以當(dāng)做函數(shù)的返回值,這些特性就是第一類對象所特有的。
9、字典的聲明定義
下面有關(guān)字典的聲明錯誤的是:
A、dic = {} B、dic = {100:200} C、dic = {(1,2,3):'test'} D、dic = {[1,2,3]:'test'} 答案字典本身是可變數(shù)據(jù)類型,字典的鍵記住兩點:
- 唯一:同一個字典中的鍵必須唯一,如果出現(xiàn)多個相同的鍵,則最新的鍵會被記住;
- 不可變:鍵是不可變數(shù)據(jù)類型,使用可以是int,string,float,tuple
補充可變(mutable)對象類型 :list、dict、set、bytearray、user-defined classes
不可變(immutable)對象類型: int、float、decimal、complex、bool、str、tuple、range、bytes
10、字符串格式化
下述字符串格式化語法正確的是?
正確答案: D A、'GNU's Not %d %%' % 'UNIX' B、'GNU\'s Not %d %%' % 'UNIX' C、'GNU's Not %s %%' % 'UNIX' D、'GNU\'s Not %s %%' % 'UNIX'python里面%d表數(shù)字,%s表示字符串,%%表示一個%。單引號內(nèi)嵌套單引號需要轉(zhuǎn)義字符/;單引號內(nèi)嵌套雙引號不需要嵌套。雙引號內(nèi)嵌套雙引號需要轉(zhuǎn)義字符/;雙引號內(nèi)引用單引號不需要轉(zhuǎn)義字符。
11、 內(nèi)存管理
關(guān)于Python內(nèi)存管理,下列說法錯誤的是
正確答案: B A、變量不必事先聲明 B、變量無須先創(chuàng)建和賦值而直接使用 C、變量無須指定類型 D、可以使用del釋放資源本題答案選 B,原因如下:
Python 是弱類型腳本語言,變量就是變量,沒有特定類型,因此不需要聲明。
但每個變量在使用前都必須賦值,變量賦值以后該變量才會被創(chuàng)建。
用 del 語句可以釋放已創(chuàng)建的變量(已占用的資源)。
12、正則表達(dá)式
下列程序打印結(jié)果為
import re str1 = "Python's features" str2 = re.match( r'(.*)on(.*?) .*', str1, re.M|re.I) print( str2.group(1))正確答案: B 你的答案: B (正確)
A、Python B、Pyth C、thon’s D、Python‘s featuresre模塊實現(xiàn)正則的功能 :re.match(正則表達(dá)式,要匹配的字符串,[匹配模式])
要匹配的字符串為str1 = "Python's features"
正則表達(dá)式r'(.*)on(.*?) .*'
- r表示后面的字符串是一個普通字符串(比如\n會譯為\和n,而不是換行符)
- ()符號包住的數(shù)據(jù)為要提取的數(shù)據(jù),通常與.group()函數(shù)連用。
- .匹配單個任意字符
- *匹配前一個字符出現(xiàn)0次或無限次
- ?匹配前一個字符出現(xiàn)0次或1次
- (.*)提取的數(shù)據(jù)為str1字符串中on左邊的所有字符,即Pyth
- (.*?)提取的數(shù)據(jù)為str1中on右邊,空格前面,即’s
- .group(0)輸出的是匹配正則表達(dá)式整體結(jié)果.
- .group(1) 列出第一個括號匹配部分,.group(2) 列出第二個括號匹配部分
13、切片
若 a = range(100),以下哪些操作是合法的?
正確答案: A B C D 你的答案: A B C (錯誤)
A、a[-3] B、a[2:13] C、a[::3] D、a[2-3]首先:a=range(100)的意思的a是一個1到100排序
A:a[-3] D:a[2-3]-->a[-1]取a當(dāng)中倒數(shù)第i個數(shù)–>a[-1]=99;a[-2]=98;a[-3]=97。
所以A的輸出結(jié)果是97,D的輸出結(jié)果是99
B:a[2:13]取排列a第2到13個數(shù),其結(jié)果是2到13的一個排列, 不包括13,前閉后開
C:a[::3]實際上是a[start:end:step]。根據(jù)a=range(100)可得start的默認(rèn)值是1,end的默認(rèn)值是100,step的默認(rèn)值是1。
14、復(fù)數(shù)
關(guān)于Python中的復(fù)數(shù),下列說法錯誤的是()
正確答案: C 你的答案: B (錯誤)
A、表是復(fù)數(shù)的語法是real + image j B、實部和虛部都是浮點數(shù) C、虛部必須后綴j,且必須小寫 D、方法conjugate返回復(fù)數(shù)的共軛復(fù)數(shù)關(guān)于python中的復(fù)數(shù):
1、虛數(shù)不能單獨存在,它們總是和一個值為 0.0 的實數(shù)部分一起構(gòu)成一個復(fù)數(shù)
2、復(fù)數(shù)由實數(shù)部分和虛數(shù)部分構(gòu)成
3、表示虛數(shù)的語法:real+imagej
4、實數(shù)部分和虛數(shù)部分都是浮點數(shù)
5、虛數(shù)部分必須有后綴j或J
15、 切片不受內(nèi)建類型的限制
對于以下代碼,描述正確的是:
list = ['1', '2', '3', '4', '5'] print (list[10:])正確答案: D 你的答案: A (錯誤)
A、導(dǎo)致 IndexError B、輸出['1', '2', '3', '4', '5'] C、編譯錯誤 D、輸出[]D 切片不受內(nèi)建類型的限制。如果出現(xiàn)了[index:],返回是[]
16、關(guān)鍵詞return
關(guān)于return說法正確的是( )
正確答案: B D 你的答案: A B D (錯誤)
A. Python函數(shù)可以沒有return,比如直接pass
C. return沒有返回值時,函數(shù)自動返回None,Python沒有Null。None是空對象,Null是空字符串!
- return會跳出函數(shù)(遇到它,函數(shù)就結(jié)束)
- break會跳出當(dāng)前循環(huán)
- continue 跳出當(dāng)前循環(huán)并執(zhí)行下一次
17、轉(zhuǎn)義字符串
What gets printed?()
print (r"\nwoow")正確答案: C 你的答案: C (正確)
A、new line then the string: woow B、the text exactly like this: r"\nwoow" C、the text like exactly like this: \nwoow D、the letter r and then newline then the text: woow E、the letter r then the text like this: nwoowPython 中字符串的前導(dǎo) r 代表原始字符串標(biāo)識符,該字符串中的特殊符號不會被轉(zhuǎn)義,適用于正則表達(dá)式中繁雜的特殊符號表示。
最典型的例子,如要輸出字符串\n,由于反斜杠的轉(zhuǎn)義,因此一般的輸出語句為:
print("\\n")這里的\\將被轉(zhuǎn)義為\。而采用原始字符串輸出時,則不會對字符串進(jìn)行轉(zhuǎn)義:
print (r"\n")因此本題答案為 C,輸出 \nwoow。注意前導(dǎo)標(biāo)識符r 不會被輸出,只起標(biāo)記作用。
18、global
What gets printed?()
counter = 1 def doLotsOfStuff(): global counterfor i in (1, 2, 3): counter += 1 doLotsOfStuff() print (counter)正確答案: C 你的答案: C(正確)
A、1 B、3 C、4 D、7此題不難,主要是考察 global 的意義,即在局部作用域 doLotsOfStuff() 函數(shù)中,聲明對全局作用域中的 counter 變量的引用,當(dāng)內(nèi)部作用域想修改外部變量時,需要使用global聲明。
最后要注意第 5 行的坑,是 counter += 1 而不是 counter += i ,因此答案是 4 而不是 7,選答案 C。
19、標(biāo)識符
下面哪個不是Python合法的標(biāo)識符
正確答案: B 你的答案: B (正確)
A、int32 B、40XL C、self D、namePython 中的標(biāo)識符不能以數(shù)字開頭,這也是普遍編程語言的通用規(guī)則:
1)第一個字符必須是字母表中字母或下劃線 _ 。
2)標(biāo)識符的其他的部分由字母、數(shù)字和下劃線組成。
3)標(biāo)識符對大小寫敏感。
4)不可以是python中的關(guān)鍵字,如False、True、None、class等。
注意:self不是python中的關(guān)鍵字。類中參數(shù)self也可以用其他名稱命名,但是為了規(guī)范和便于讀者理解,推薦使用self。
20、socket
下列關(guān)于python socket操作敘述正確的是( )
正確答案: C D 你的答案: C (錯誤)
A、使用recvfrom()接收TCP數(shù)據(jù) B、使用getsockname()獲取連接套接字的遠(yuǎn)程地址 C、使用connect()初始化TCP服務(wù)器連接 D、服務(wù)端使用listen()開始TCP監(jiān)聽sk.recv(bufsize[,flag]):接受套接字的數(shù)據(jù)。數(shù)據(jù)以字符串形式返回,bufsize指定最多可以接收的數(shù)量。flag提供有關(guān)消息的其他信息,通常可以忽略。
sk.recvfrom(bufsize[.flag]):與recv()類似,但返回值是(data,address)。其中data是包含接收數(shù)據(jù)的字符串,address是發(fā)送數(shù)據(jù)的套接字地址。
sk.getsockname():返回套接字自己的地址。通常是一個元組(ipaddr,port)
sk.connect(address):連接到address處的套接字。一般,address的格式為元組(hostname,port),如果連接出錯,返回socket.error錯誤。
sk.listen(backlog):開始監(jiān)聽傳入連接。backlog指定在拒絕連接之前,可以掛起的最大連接數(shù)量。
如果你想跟博主建立親密關(guān)系,可以關(guān)注博主,或者關(guān)注博主公眾號“Python之王”,了解一個非本科程序員是如何成長的。
博主ID:潤森,希望大家點贊、評論、收藏
總結(jié)
以上是生活随笔為你收集整理的2020 年最全 Python 面试题汇总 (一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 借呗的钱在哪里
- 下一篇: 二战苏联反坦克摩托车?