一、學習知識點概要
本次是Python訓練營的測試,在45分鐘內完成25題,滿分100分及格80分。題目主要考察Task1到Task3里面的Python基礎知識。在我隨到的25道題里,知識點有:
- 變量(包括數據類型和容器類型)
- 運算符
- 基本語句
- 基本方法(包括變量類型的內置方法)
- 類與對象
- 函數(包括魔法方法)
二、學習內容
以下圖片為我的測試題和我的答案
第一題,在Task1的異常處理中可以知道,可以用raise語句手動拋出一個異常,配合try - except語句可以讓代碼正常運行。
第二題,考察模塊導入和常用模塊的內置屬性,沒什么好說的
第三題,也是考察模塊導入。要只導入模塊里具體的類的話是用? ?from 模塊?import 類名? ?的方式導入,D選項反了。
第四題,考察基本內置方法,type(obj)用于查看obj的數據類型
?
第五題,考察函數和循環語句。for循環中,in后面跟的是一個可迭代對象,題中為形參numbers。ABC三個選項中傳入的參數分別是列表、字符串、元組,都是可迭代的對象,而D選項傳入的參數1234是數值型,不是可迭代對象。
第六題,可以用id()查看是不是同一個內存地址。AB選項是通過分別賦值產生的,生成的分別是列表和整型數據,其在內存開辟了不同的空間,內部指向的是相同的內存地址。C雖然也是分別賦值產生,但是C生成的是字符串,這樣使得s1與s2是同一個內存地址。D選項產生的是整形數據,而不是元組。
第七題,final在Java中用于表示類不能被繼承。但在Python中并沒有final關鍵字。
第八題,要注意Python是嚴格按照縮進分語句塊的,這樣print("Hello"*2)是屬于myfun()函數內部的代碼。雖然調用時已經pass了中間部分,但是還是會執行print("Hello"*2)。*號是容器類型表示重復的符號,于是就輸出了HelloHello
第九題,考察變量和運算符的使用。第一個部分x>=y易知結果為True;而第二部分ch<'b'是字符串的比較,單個字符比較的是其ASCII碼值,大寫字母的ASCII碼值比小寫字母的小,于是ch<'b'的結果也是True;第三部分是y,y=1,這樣整個運算式就可以表示為True and True and 1。在布爾變量和邏輯運算的學習中可知,當布爾變量參與數字運算時由0代表False,1代表True。True and True and 1運算至下一步變為True and 1,由于數字1在and后面,返回值為數值,于是運算結果為1。
第十題,考察基本類型的內置函數。列表的append()函數是將參數當成一個整體添加至列表的末尾,列表長度總是+1的,于是輸出列表的長度是5。
第十一題,break語句用于跳出循環,如果不在循環體內使用的話會報錯。
第十二題,計算機基本原理,沒什么好說的。
第十三題,Python中若變量不先創建和賦值就使用會報錯。
第十四題,若用try - except語句,拋出的異常被except語句攔截就不會終止程序。
第十五題,字典中的鍵只能用不可變類型充當,C選項中的鍵是列表,列表是可變類型。
第十六題,容器類型的切片操作。s是字符串,s[::2]表示選取s從第一個字符開始,每隔兩步(即一個字符)選取一次,最后選取結果是'aceg'。
第十七題,考察的是類與對象。要注意的是,當通過對象調用方法時,會向方法傳入自身這個參數,如果方法定義時沒有self這個參數,則只能通過類名調用。題目中D類所擁有的a(),b(),c(),方法均沒有參數,不能通過對象調用。
第十八題,在類里定義了實例化方法__init__(),在每次創建對象時會自動調用,如果創建對象時沒有參數傳給name,則會出錯。而定義的showInfo()方法只有self一個參數,當通過對象調用時會將自身傳給self,因此通過對象調用該函數時無需再添加參數。
不過我在做這題時本來是選擇了C選項,但是到交卷的時候這題就變成了D選項,導致我這題錯了。不知道是系統的問題還是在我點下一題之前點錯了。
第十九題,主要考察作用域。global關鍵字將函數內的counter聲明為全局變量,于是調用函數doLotsOfStuff()時會對第一句聲明的counter產生影響。
第二十題,考察類與對象。實例方法是和對象密切相關的,每個對象調用的結果可能不一樣,必須指定一個對象作為參數才能調用,所以實例方法必須在創建對象后才可以調用,B錯誤。
第二十一題,正確選項是AC。這題有點沒搞懂,我不知道是不是出題人不小心把self打成了sef。如果寫的是self的話,應該是可以實例化,然后再在類外給? 對象.x? 賦值的話是可以正常通過對象調用的。但如果寫的就是sef的話,showInfo()方法內的self.x中的self就不會被認為是self指針了,所以pycharm會說self沒有定義,類的定義中出現語法錯誤,也就不可以實例化了。
第二十二題,考察魔法方法。魔法方法是內置的方法,可以通過在類中重寫增加新的行為,但是并不表示如果類中不定義的話就沒有任何方法,類中是即包含__dir__()也包含__hash__()的。
第二十三題,考察字符串類的內置方法。count()方法就是用于統計字符串中某個子字符串的出現次數。而find()方法和index()方法類似,都是查找子字符串的位置,如果找到就返回索引值,但是如果沒有找到子字符串,find()會返回-1,index()會報錯,選項BC是反了。
第二十四題,考察Python基本語法。A選項是用了三目運算符,是正確的。而B中的?在Python中沒有定義。C選項中,如果用不是三目運算符的話,if(condition)后面要跟冒號,并且換行縮進,x放在print()小括號里面作為參數,這樣才符合Python語法。D選項的語法是正確的,不過While循環體用Pass的話會無法跳出循環,程序會一直運行下去。
第二十五題。A選項中每次循環都會輸出兩個數字,最終輸出結果是0,1,1,2,2,3。B選項明顯正確。C選項只輸出1,2,因為當i=3時 i<3的結果是False,會跳出循環,沒有輸出3。D選項也是正確的,range(3)生成包含0,1,2 三個數字的可迭代對象,輸出時用print(i+1)是正確的。
最終我由于十八題和二十一題兩題錯誤,獲得了92分。
三、學習問題與解答
本次測驗的題目只考Task1~Task3里的內容,都是Python里很基礎的東西。第十八題我一開始是選C的,可能是我在點下一題的時候不小心點錯更改了一次選項選到D導致錯誤。而二十一題也是被題目誘導了,再加之我沒有用過pycharm,之前一直用IDEL進行學習。發現二十一題寫錯之后我下載了pycharm編輯器試了題目的代碼,才知道是怎么回事。
四、學習思考與總結
Python訓練營差不多就要結束了,學習了很多Python的基礎內容。測驗測的都是Python基礎,也順利通過了,以后要提升還得繼續學習Python的進階內容,例如Task4里的東西。用了一會pycharm發現這個比IDEL要好用得多,以后還是用pycharm進行學習好了🤣