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
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]
例:
x,y = 25,50
big = x if x
如果x
8. 用一個例子解釋Python中的繼承。
繼承允許一個類獲得另一個類的所有成員(比如屬性和方法)。繼承提供代碼可重用性,使創建和維護應用程序變得更容易。我們繼承的類稱為super-class,繼承的類稱為派生/子類。
以下是Python支持的不同類型的繼承:
a. 單一繼承 - 派生類獲取單個超類的成員。
b. Multi-level繼承 - 從基類base1繼承的派生類d1,d2繼承自base2。
c. 分層繼承 - 從一個基類可以繼承任意數量的子類
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)
return string
return string_reverse3(string[1:]) + string[0]
from collections import deque
def 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
d)a_b_c = 1,000,000
回答:b)a b c = 1000 2000 3000;變量名稱中不允許使用空格。
51. 以下哪項是無效聲明?
a)abc = 1,000,000
b)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;變量名稱中不允許使用空格。
52. 以下是什么輸出?
try:
if '1' != 1:
raise "someError"
else:
print("someError has not occured")
except "someError":
print ("someError has occured")
a)發生了someError
b)沒有發生someError
c)無效代碼
d)以上都不是
回答:c)無效代碼;新的異常類必須從BaseException繼承。這里沒有這樣的繼承。
53. 假設list1是[2,33,222,14,25],什么是list1 [-1]?
a)錯誤
b)沒有
c)25
d)2
回答:c)25;索引-1對應于列表中的最后一個索引。
54. 要打開文件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用于指示正在寫入文件。
55. 以下是什么輸出?
f = None
for i in range (5):
with open("data.txt", "w") as f:
if i > 2:
break
print f.closed
a)True
b)False
c)None
d)Error
回答:a)True;與open文件一起使用時,WITH語句可確保在with塊退出時關閉文件對象。
56. 何時執行try-except-else的else部分?
a)總是
b)發生異常時
c)沒有異常發生時
d)當發生異常時至除了塊
回答:c)沒有異常發生時;當沒有異常發生時,執行else部分。
57. a=1, b=2, 不用中間變量交換a和b的值.
兩種形式: 加法或異或;代碼:
a = 1
b = 2
a = a + b
b = a - b
a = a - b
print ('a = {0}, b = {1}'.format(a,b))
a = a ^ b
b = a ^ b
a = a ^ b
print ('a = {0}, b = {1}'.format(a, b))
58. 請寫出打印結果
x = [0, 1]
i = 0
i, x[i] = 1, 2
print(x)
打印結果: [0, 2], python可以使用連續賦值, 從左至右.
g = lambda x, y=2, z : x + y**z
g(1, z=10) = ?
打印結果: 異常, 形參表末尾才可以有默認參數, z需要提供默認參數。
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場。
編輯:hfy
評論
查看更多