




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
習題21.在交互式解釋器中給不同的變量賦予不同數據類型的值,如浮點數、字符串等,輸入變量名并按Enter鍵,然后針對相同的變量使用print()函數,“輸入變量名并按Enter鍵”與“用print()輸出變量”的操作有何區別?答案:在交互式解釋器中直接輸入一個變量會立即顯示它的值,這稱為“字面值”。對于數值類型,字面值和值是相同的;但是對于字符串,字面值包括字符串的邊界引號,而print()打印的內容不包括。所以,print()打印字符串的時候不會把邊界的引號顯示出來。2.用表達式來描述下列命題: (1)n是m的倍數 (2)n是小于正整數k的偶數 (3)x≥y或x<y (4)x,y中有一個小于z (5)x,y都小于z (6)x,y兩者都大于z,且為z的倍數答案:(1)n%m==0(2)k>0andk%1=0andn<kandn%2==0(3)x>=yorx<y(4)x<zory<z(5)x<zandy<z(6)x>zandy>zandx%z==0andy%z==03.手工計算(或心算)下列表達式的值,然后用代碼來驗證是否正確。 (1)16/4-2**5*8/4%5//2 (2)~30<<2*12**-6*22 (3)6**2+40&1*5答案略4.設計一個程序,讓用戶輸入平面坐標系中的兩個坐標,然后計算出兩點之間的距離。答案見代碼文件:Project02exercise4.py5.在2.4中我們認識了random模塊,它提供了很多有用的隨機函數。下面列舉了一些需求,請利用help函數查詢需要用什么函數來達成目的。(1)在容器對象中隨機選擇一個對象。(2)在容器對象中隨機選擇n個對象,并可以按照需求設置權重。(3)在容器對象中隨機抽取(不重復選擇)n個對象,并可以按照需求設置權重。(4)對可變類型的有序對象(例如列表)打亂其順序。答案:(1)在容器對象a中隨機選擇一個對象,可以使用多種方法,如:a[random.randrange(len(a))]random.choice(a)(2)在容器對象a中隨機選擇n個對象,可以使用random.choices()函數,并設置參數k=n,對于權重,使用一個權重列表,其長度和a相等,每個元素是一個代表權重的整數。(3)可以使用random.sample()函數,它的用法和random.choices()是一樣的,區別在于它是不重復的抽取。(4)要對可變類型的有序對象打亂其順序,可以使用random.shuffle()函數。習題31.寫出條件句與循環句的語句結構。答案:條件句是分支結構,根據條件表達式真或假來決定要執行的語句流;循環句是循環結構,分為while循環和for循環。while是傳統的循環結構,可以看成是一個條件判斷語句和一個向回轉向語句的組合。for循環通過遍歷一個可迭代對象來進行有限次數的循環,并在循環的過程中遍歷這個對象。2.break和continue控制語句的區別。答案:break是徹底結束循環;continue是結束當前這一輪循環,進入到下一輪循環。3.寫出if...if和if...elif的區別,并舉例編程說明。答案:if…if是兩個獨立的分支結構,互不影響,有可能兩個分支都會執行到;if…elif是一個單獨的多分支結構,是多選一的分支,不可能兩個分支都執行,也可以理解為在執行時遵循短路邏輯。4.求1~100之間的所有素數,并統計素數的個數。答案見代碼文件:Project03exercise4.py5.內置函數max()、min()可用于求最大值、最小值。請忽略這兩個函數,用你自己的方式實現下述任務:任意輸入5個數字,計算它們的最大值,最小值和平均值。答案見代碼文件:Project03exercise5A.py和Project03exercise5B.py兩種方法實現。6.模塊math中的floor()和ceil()函數分別用于求一個浮點數的地板數和天花板數,也就是向下取整和向上取整。請利用這兩個函數實現四舍五入的功能(考慮由用戶輸入任意的浮點數)。答案見代碼文件:Project03exercise6.py習題41.解釋容器的數據類型及其分類。答案:容器是內置的數據結構,包括序列、映射和集合。序列包括列表、元組和字符串;映射類型只有一種,即字典;集合包括可變集合和不可變集合。2.使用range()函數生成一個數列,然后將它們變成單一的數字,例如通過range(10)得到[0,1,2,3,4,5,6,7,8,9],如何將它轉換為單個數字123456789?要求不使用循環結構。答案見代碼文件:Project04exercise2.py3.輸入一段英文文章,計算其長度,并統計包含的單詞數。答案見代碼文件:Project04exercise3.py4.實現一個同學錄,要求提供基于字符的菜單選項,用戶可以選擇顯示所有同學、按關鍵字查找同學、添加同學、刪除同學、退出程序等功能。同學信息保存在字典中,要求有學號、姓名、專業、班級等信息。鍵必須具有唯一性,因此學號作為鍵。用戶可以通過關鍵字來查詢對應的同學信息,例如用戶輸入姓名王強,若有該同學存在,則返回他的相關信息,否則提示未找到該同學的信息。答案見代碼文件:Project04exercise4.py5.給出下列語句的執行結果。答案:abc[100]11111211314161341………每個數等于它上方兩數之和每行數字左右對稱,由1開始逐漸變大。第n行的數字有n項。第n行數字和為2(n-1)。】楊輝三角形的圖形表示如右圖所示。請通過編程實現楊輝三角形,用普通循環和列表推導式均可。答案見代碼文件:Project04exercise6A.py、Project04exercise6B.py兩種方法實現習題51.列舉文件緩沖的幾種形式,包括程序員主動進行的緩沖和因為其他原因造成的緩沖。答案:文件保存依靠緩沖來實現,可以使用f.flush()方法來進行緩沖,也可以使用f.close()方法關閉文件,在程序結束時會自動緩沖。此外,當f被賦值為其他類容時,會導致原本引用的文件對象減少引用計數,一旦引用計數為0,Python垃圾回收機制會關閉文件對象,從而完成緩沖。2.小明在公司信息安全部門工作,最近公司淘汰了一批老舊的服務器硬盤,為了避免商業對手利用數據恢復手段獲取硬盤中的數據,部門領導讓小明為這些硬盤寫入垃圾數據。請你幫小明寫一個腳本,在當前目錄下創建1000個文件,文件名隨機,文件中的內容是1000個隨機字符。答案見代碼文件:Project05exercise2.py3.在畢業季,每個學生都要完成畢業設計并參加答辯,假如學院要求每個班分成六組參加畢業答辯。班級名單保存在名為“students.txt”的文件里,每一行一個姓名,請編寫一個程序來實現隨機的分組。答案見代碼文件:Project05exercise3.py4.編寫一個程序,由用戶輸入自己的生日,然后自動計算離下次生日還有多長時間。答案見代碼文件:Project05exercise4.py代碼中自行實現了將代表日期的字符串解析為標準日期格式,也可以通過第三方庫dateutil中的parser()函數來實現日期文本的解析。習題61.寫出調用函數時可使用的參數類型并解釋。答案:位置參數,也叫必備參數,傳遞參數的時候,參數的數量和順序,都必須和定義時保持一致。關鍵字參數,是指傳遞參數的時候,按照賦值表達式的方式,函數定義時規定的參數名稱在等號左側,傳遞的值在右側。這樣,就可以不按順序傳遞參數了。默認參數,是指在函數定義時,可以通過復制表達式給予該參數一個初始的默認值,如果我們在調用函數時,不傳遞這個參數,那么該參數將使用默認值。可變參數,是指在函數定義時不能確定將來調用時要使用幾個參數,因此可以定義一個數目可變的參數集,用戶可以傳遞多個參數,這些參數將作為一個元組被傳遞使用。關鍵字收集器,類似于可變參數,但用戶在傳遞參數時,每一個參數都使用賦值表達式的形式,這樣的話,多個關鍵字參數將會作為一個字典被傳遞使用。參數組,指的是在一個函數中,同時使用以上兩種或多種參數傳遞的方式。2.寫出創建一個生成器的兩種方法,并舉例說明。答案:可以使用推導式格式的生成器,也可以使用函數定義中的yield語句。例如,要快速生成1-9中每個數字的平方,有下面兩種方法:#第一種方法:g1=(i**2foriinrange(1,10))#第二種方法defsquare():foriinrange(1,10):yieldi**2g2=square()3.編寫一個函數計算圓柱體的體積。答案見代碼文件:Project06exercise3.py4.如果沒有os.walk(),你是否能以自己的方式實現對多層目錄的遞歸訪問?請設計一個函數,能對多層目錄進行遍歷,顯示出每一層目錄的全部子目錄和文件的名稱。答案見代碼文件:Project06exercise4.py5.利用map()函數,把用戶輸入的不規范的英文名字,變為首字母大寫,其他小寫的規范名字。輸入:['adam','LISA','barT'],輸出:['Adam','Lisa','Bart']。答案見代碼文件:Project06exercise5.py習題71.設計一個同學錄,用類來定義同學,每個同學是一個實例。類中需要有姓名、班級、學號、聯系電話等屬性。答案:defClassMate():def__init__(self,name,num,grade,tel):=nameself.num=numself.grade=gradeself.tel=telcm1=ClassMate("李雷",20200705433,"云計算2020",)2.改寫你的同學錄類定義,要求外界不能直接訪問除了姓名之外的其它屬性,必須通過一個特定的方法來作為訪問這些屬性的接口。答案見代碼文件:Project07exercise2.py3.按照下面描述的方式創建一個繼承分級結構。在基類中提供適用于所有哺乳動物對象的方法,并在派生類中覆蓋它們,從而根據不同的動物采取不同的行動。哺乳動物:貓科:獅子、豹、虎犬科:狼答案:classMammal():#哺乳動物def__init__(self):passdefviviparity(self):print("Viviparity")classFelid(Mammal):#貓科defmiaow(self):#貓叫print("mewmewmew...")classCanidae(mammal):#犬科defbark(self):print("bowwow!bowwow!")classTiger(felid):#虎deftigerRoar(self):#虎嘯print("roar!")4.將第二章和第六章出現過的PPI計算程序改寫為使用類來實現的版本。答案見代碼文件:Project07exercise4.py5.我們在本項目中設計的鏈表是可變對象,所以應該有一個copy()方法用來返回當前對象的淺拷貝。同時,為了方便清空數據,請再為它設計一個clear()方法,用來清除所有結點,把當前鏈表變成一個空鏈表。答案見代碼文件:Project07exercise5.py詳見其中的LinkList.copy()和LinkList.clear()方法習題81.導入“importmoduleName”和“frommoduleNameimport*”有什么不同?答案:使用第二種語句的時候,會將模塊中的所有名稱直接加入到現有的全局名稱空間里,之后就不再需要使用諸如“模塊名.函數名”這樣的語法,而是直接使用后面的名稱。但是,缺少模塊名作為前綴,可能會因為重名而導致內建的或先前導入過的名稱被覆蓋。2.創建一個importAs()函數。這個函數可以把一個模塊導入到你的名稱空間,但使用你指定的別名,而不是原始名字。也就是說,用你自己的方式,在一個函數中實現importmoduleNameasnewName的效果。答案:在函數中調用__import__()并返回即可:defimportAs(module):return__import__(module)3.將本章的用戶賬戶登錄系統打包成二進制可執行文件,使其能獨立運行。答案:先進入到用戶賬戶登錄系統的源代碼文件所在的目錄,假設其它模塊也在同目錄下,使用以下命令:pyinstaller-Flogin.py習題91.當你使用try語句處理異常時,如何根據需要選擇合適的異常類?如果面對不熟悉的錯誤情況,你打算如何查詢對應的錯誤?答案:可以先讓程序出錯一次,根據拋出的錯誤信息,選擇捕獲對應的錯誤類型。2.下面這些交互解釋器下的Python代碼段分別會引發什么異常(參閱表9-1給出的內建異常清單):代碼請寫下答案>>>if3<4then:print'3islessthan4!'SyntaxError:invalidsyntax>>>aList=['Hello','World!','Anyone','Home?']>>>print('thelaststringinaListis:',aList[len(aList)])IndexError:listindexoutofrange>>>xNameError:name'x'isnotdefined>>>x=4%0ZeroDivisionError:integerdivisionormodulobyzero>>>importmath>>>i=math.sqrt(-1)ValueError:mathdomainerror3.在項目8里,我們在用戶賬戶登錄系統中,用一個文本文件來記錄用戶-密碼對列表,為了防止文件不存在導致程序異常,即使只為了讀取數據,無需寫入,我們也使用了a+模式打開文件。現在你已經了解了捕獲異常,請改寫程序,如果只需要讀取,就使用r模式,并使用try-except語句來防止文件不存在導致的異常。答案:try:userInf=open('./userpasswd.txt','r')exceptIOError:userInf=open('./userpasswd.txt','w')4.封裝以下內建函數,在發生異常時返回None。float(arg):請考慮兩種錯誤,參數是一個帶有非數字字符的字符串,或參數是一個其他不受支持的類型。raw_input(string):同樣考慮兩種錯誤,用戶輸入了EOF(在Unix下是由于按下了<Ctrl+D>,在Windows命令行下是因為按下了<Ctrl+Z>)或是通過鍵盤中斷事件退出了程序(一般是由于按下了<Ctrl+C>)。答案:對于float(arg),封裝代碼如下:defmy_float(argv):try:returnfloat(argv)except(ValueError,TypeError):returnNone對于input(),代碼如下:defmy_input(string):try:input(string)exceptKeyboardInterrupt:print("YousentaKeyboardInterrupt.")exceptEOFError:print("YousentaEOF.")while1:#下面是測試,一旦執行就無法出來了my_input('string')習題101.請描述wxPython窗口對象中子對象和父對象的關系。答案:wxPython窗口對象中的父對象是一種窗口容器,例如框架、面板等,而子對象是父對象中包含的組件或子容器。例如在一個窗口中,框架是面板的父對象,面板是框架的子對象;而對于面板中的一個按鈕來說,面板是父對象,按鈕則是子對象。2.創建一個同學錄管理程序,用靜態文本框來顯示姓名,用文本框來顯示其他信息,如性別、學號、電話等。答案見代碼文件:Project10exercise2.py3.改寫上面的同學錄管理程序,文本框中的信息處于只讀模式,只有提供管理員密碼,才能編輯。答案見代碼文件:Project10exercise3.py,管理員密碼是admin1234.哪些控件可以提供選擇功能?答案:有單選按鈕、復選框、列表框、下拉框、組合框、樹形控件。5.嘗試為項目8的用戶賬戶登錄系統實現GUI界面。答:原有代碼 作用 使用或修改情況captcha.py 生成驗證碼 原封不動encrypt.py 將密碼加密成密文 原封不動sinput.py 在控制臺輸入字符時遮蓋 GUI不需要使用控制臺,此代碼廢棄newuser.py 創建新賬戶 完全重寫,提供創建新賬戶的操作窗口lock.py 對超過24小時的鎖定賬戶自動解鎖 有部分改動match.py 核對用戶名和密碼,并判斷是否鎖定 有部分改動login.py 登錄 完全重寫,提供登錄的操作窗口上述代碼位于文件夾Project10exercise5中。習題111.還有很多其它持久存儲的方案,例如使用文本、使用電子表格,為什么要使用數據庫,數據庫的優勢是什么?答案:1)數據庫可以結構化存儲大量的數據信息,方便用戶進行有效的檢索和訪問。2)數據庫可以有效地保持數據信息的一致性、完整性、降低數據冗余。3)數據庫可以滿足應用的共享和安全方面的要求,把數據放在數據庫中在很多情況下也是出于安全的考慮。4)數據庫技術能夠方便智能化地分析,產生新的有用信息。2.請列舉幾個Python支持的數據庫。答案:主流的數據庫系統都支持,包括SQLite、MySQL、MariaDB、SQLServer、PostgreSQL、Oracle、Redis等3.簡單描述Python操作數據庫的流程。答案:Python使用PythonDB-API來操作數據庫,操作流程大致可以分為4個步驟:1)引入API模塊。2)獲取與數據庫的連接。3)執行SQL語句和存儲過程。4)關閉數據庫連接。4.改寫第8章的用戶賬戶系統,使用SQLite數據庫來代替文本文件存儲數據。答案:第10章已經實現了圖形界面的版本,現在在其基礎上繼續開發:原有代碼 作用 使用或修改情況captcha.py 生成驗證碼 原封不動encrypt.py 將密碼加密成密文 原封不動sqlitedb.py 代替文本存儲用戶賬戶信息 新內容newuser.py 創建新賬戶 部分改動,涉及到數據庫操作的方法由sqlitedb.py提供lock.py 對超過24小時的鎖定賬戶自動解鎖 由主程序或sqlitedb.py中的方法代替match.py 核對用戶名和密碼,并判斷是否鎖定 由主程序或sqlitedb.py中的方法代替login.py 登錄 部分改動,涉及到數據庫操作的方法由sqlitedb.py提供上述代碼位于文件夾Project11exercise4中。5.讓你的用戶賬戶系統改用MySQL數據庫,只改寫程序本身,不用考慮舊數據從SQLite遷移到MySQL的問題。答案略,由讀者自行研究實現。習題121.在使用套接字編程的時候,TCP和UDP中哪一種服務器在接受連接后,把連接交給不同的套接字來處理與客戶的通信?答案:TCP服務器。TCP服務器使用socket.accept()方法接收一個連接請求,返回一個套接字對象和一個遠程地址元組,服務器使用這個套接字對象來處理(發送和接收)與客戶端的通信。2.編寫一個程序,讓客戶端能夠發送消息使服務器休眠,客戶端指定休眠多久,服務器就休眠多久。答案:使用了TCP服務器和客戶端,代碼詳見文件夾Project12exercise2。3.對于12.3.3的文件傳輸程序,是否可以使用無連接通信的方式?答案:不可以,無連接通信方式不適用于文件傳輸。習題131.進程和線程的區別是什么?答案:正在運行的程序稱為“進程”,除了程序自身的指令,進程還包括地址空間、內存、數據棧及其他記錄其運行軌跡的輔助數據。進程在運行的過程中,其執行控制流稱為線程,線程是程序執行流的最小單元。線程不像進程那樣擁有完整的系統資源,只擁有一點兒在運行中必不可少的資源,但它可與同屬一個進程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 私下鑒定協議書
- 理財收益協議書
- 家具公司加盟協議書
- 建筑施工意向協議書
- 離婚多種協議書
- 祖產分配協議書
- 白蟻治理協議書
- 離職人員協議書
- 小麥出售合同協議書
- 市場攤位退租協議書
- 2024年反洗錢知識競賽參考題庫400題(含答案)
- 2024年移動網格經理(認證考試)備考試題庫大全-上單選、多選題匯
- 教師考核評分表
- 胸外科護理常規(全本) 胸外科疾病護理常規
- 2024年安徽合肥東部新中心建設投資限公司招聘8人高頻500題難、易錯點模擬試題附帶答案詳解
- 醫學課件內科胸腔鏡術
- 第11關:記敘文閱讀(含答案與解析)-2024年中考語文一輪復習題型專練
- 醫學課件血吸蟲病防治
- 2024米面油供貨合同
- 職業學院大數據與財務管理專業人才需求與專業改革的調研報告
- 《公有制為主體多種所有制經濟共同發展》名師課件
評論
0/150
提交評論