Python程式設計常見問題與解答

Python_小屋發表於2019-02-03

1.問:Python程式碼執行速度和C語言相比,哪個更快?

答:一般來說,Python程式碼的執行速度比C語言的慢很多,但是如果充分運用內建函式、標準庫物件和函數語言程式設計模式的話,執行速度會提高很多,可以接近C語言。

2.問:學習Python程式設計,用哪個開發環境更好一些呢?

答:目前來看,Anaconda3和PyCharm用的相對來說多一些。

3.問:在哪裡執行pip命令安裝Python擴充套件庫?為什麼在IDLE中執行會提示語法錯誤呢?

答:應該在命令提示符環境執行,不是在Python開發環境中執行。並且,最好切換到Python安裝目錄中的scripts子目錄中執行,在安裝了多個Python版本時這一點非常重要。

4.問:為什麼使用pip命令安裝擴充套件庫是提示“不是內部或外部命令,也不是可執行的程式或批處理檔案”?

答:檢查系統環境變數path是否包含Python的安裝目錄以及scripts子目錄,如果不包含的話,新增進去,或者切換到Python安裝目錄的scripts子目錄中執行pip命令。

5.問:使用pip安裝擴充套件庫總是提示網路超時,該怎麼辦呢?

答:可以下載安裝包或whl檔案離線安裝,或者指定國內源,不使用pip預設的國外源。

6.問:使用pip安裝擴充套件庫時失敗,提示需要安裝VC++,該怎麼辦呢?

答:如果是Windows系統的話,可以使用瀏覽器開啟https://www.lfd.uci.edu/~gohlke/pythonlibs/下載合適版本的whl檔案,然後離線安裝。

7.問:我在https://www.lfd.uci.edu/~gohlke/pythonlibs/下載的檔名太長了,為了打字方便就改成了很短的名字,結果不能用了,必須使用原來的檔名嗎?

答:是的,不能修改檔名,必須保持原來的名字。

8.問:使用pip安裝擴充套件庫時,明明提示已經安裝成功了,但是使用import匯入時又提示沒有安裝該擴充套件庫,為什麼呢?

答:這樣的情況一般是因為安裝了多個Python版本。在一個版本下安裝的擴充套件庫不能在另一個版本中使用,需要分別進行安裝。

9.問:map物件不支援下標嗎?為什麼使用下標訪問其中的元素時提示“TypeError: 'map' object is not subscriptable”呢?

答:是的,map物件、enumerate物件、zip物件、filter物件、reversed物件和生成器物件這些具有惰性求值特點的物件都不支援使用整數下標訪問其中的元素。可以把這類物件轉換為列表、元組來一次性獲取其中的元素,或者使用for迴圈逐個遍歷其中的元素。

10.問:訪問列表中元素時,提示“IndexError: list index out of range”,這是什麼原因呢?

答:應該是下標指定的位置不存在,檢查下標是否有效。一個長度為L的列表,有效下標範圍是[-L, L-1]。

11.問:在我的程式碼中x是一個列表,我使用y=x.sort()語句把它排序後的結果賦值給y,然後使用y.index(3)檢視3在y中的下標時,為什麼會提示“AttributeError: 'NoneType' object has no attribute 'index'”呢?

答:列表的sort()方法是原地排序,沒有返回值。在Python中,沒有返回值的方法,都認為返回空值None,而空值是沒有index()方法的。

12.問:我建立了一個集合,想在裡面加入一個列表作為元素,結果提示“TypeError: unhashable type: 'list'”,這是什麼意思呢?

答:在Python中,不可雜湊(unhashable)和可變的意思是一樣的。整數、實數、複數、字串、元組這些是不可變的,或者說是可雜湊的。而列表、字典、集合是可變的,或者說是不可雜湊的。字典的“鍵”和集合的元素都要求必須是不可變的,也就是可雜湊的。

13.問:我呼叫函式時提示“TypeError: f() missing 2 required positional arguments: 'a' and 'b'”,該怎麼辦呢?

答:呼叫函式時,位置引數的數量必須符合函式定義,如果函式要求接收2個位置引數,那麼呼叫時也應傳遞2個位置實參。

14.問:執行程式碼時提示“SyntaxError: expected an indented block”,怎麼解決呢?

答:Python程式碼對縮排的要求非常嚴格,相同層次的程式碼必須具有同樣的縮排量。

15.問:執行程式碼時提示“AttributeError: 'list' object has no attribute 'add'”,為什麼呢?

答:列表物件沒有add()方法,集合才有add(),仔細檢查物件的型別。

16.問:我想刪除元組當中的一個元素,提示“TypeError: 'tuple' object doesn't support item deletion”,是什麼意思呢?

答:在Python中,元組和字串這樣的容器類物件是不可變的,不支援其中元素的增加、修改和刪除操作。

17.問:我想使用下標訪問集合中的第一個元素,執行程式碼時提示“TypeError: 'set' object does not support indexing”,是因為集合不支援下標嗎?

答:是的。Python集合裡面的元素是無序的,不能使用下標訪問特定位置的元素。

18.問:我想使用切片操作修改列表中的部分元素,執行程式碼時提示“ValueError: attempt to assign sequence of size 1 to extended slice of size 3”,該怎麼辦呢?

答:使用切片操作修改列表中部分元素時,如果第三個數字step的值不等於1,那麼等號左側的切片長度和等號右側的列表長度必須一致。

19.問:已知x是一個字元,我想使用x+1得到下一個字元,為什麼提示“TypeError: can only concatenate str (not "int") to str”呢?

答:Python不支援字元和整數相加,如果想得到下一個字元,可以使用表示式chr(ord(x)+1)。

20.問:執行程式碼時提示“NameError: name 'value' is not defined”,怎麼辦呢?

答:根據提示資訊來看,是說變數value沒定義。很可能是拼寫錯誤,仔細檢查變數是否拼寫正確。

21.問:我的程式碼可以執行,但是結果不對,怎麼辦呢?

答:程式碼可以執行表示沒有語法錯誤,不代表沒有邏輯錯誤。遇到這種情況時,仔細檢查程式碼的邏輯和問題的要求是否一致,是否把>寫成>=了,或者忽略了range()函式返回的是左閉右開區間了,是不是把運算子**寫成*了,是不是程式碼縮排有錯誤。

22.問:明明記事本程式檔案是存在的,為什麼會提示“FileNotFoundError: [WinError 2] 系統找不到指定的檔案。: 'C:\\Windows\notepad.exe'”呢?

答:在這個路徑中,第二個反斜線和後面的字母n恰好組成轉義字元\n,應該使用兩個反斜線或者使用原始字串。

23.問:訪問檔案時,提示“PermissionError: [WinError 5] 拒絕訪問。: 'test.txt'”,怎麼辦呢?

答:應該是檔案具有“只讀”之類的特殊屬性,或者當前登入的使用者賬號沒有許可權訪問該檔案。

24.問:我機器上明明是有test.txt這個檔案的,為什麼使用內建函式open()開啟時提示檔案不存在呢?

答:如果檔案test.txt不在當前資料夾中,在開啟或讀寫時必須指定完整路徑。

25.問:從“資源管理器”來看,我當前資料夾中明明有test.txt檔案,但是使用內建函式open()開啟時還是提示檔案不存在,可能是哪裡錯了呢?

答:預設情況下,“資源管理器”會隱藏一些常見型別檔案的副檔名,去掉這個隱藏,檢查一下檔案的名字是不是test.txt.txt。

26.問:執行程式碼讀取文字檔案內容時,提示“UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 0: invalid start byte”,是什麼錯誤呢?

答:如果檔案中包含中文字元,應使用正確的編碼格式開啟,也就是明確使用內建函式open()的encoding引數指定編碼格式。如果不知道檔案採用什麼編碼格式,可以使用記事本開啟之後使用“另存為”功能儲存成特定的編碼格式。

27.問:我已經使用“pip install docx”命令安裝了擴充套件庫docx,為什麼無法執行書上的程式碼操作Word檔案呢?

答:操作Word檔案的擴充套件庫名字叫python-docx,不是docx。另外要注意,擴充套件庫python-docx只能操作Word 2007或更新版本的文件,不能處理Word 2003之前的文件。

28.問:使用open()函式開啟檔案往裡寫入內容時,提示“TypeError: write() argument must be str, not bytes”,是什麼原因呢?

答:如果要寫入文字檔案的話,可以使用'w'模式;如果寫入二進位制檔案的話,應該使用'wb'模式。

29.問:使用內建函式open()開啟檔案之後,只能按照順序從前往後讀取內容嗎?

答:也不是,如果需要讀取前面已經讀取過的內容,可以使用檔案物件的seek()方法修改檔案指標的位置。

30.問:我用字串方法startwith()測試一個字串是否以另一個字串為字首,怎麼會提示“AttributeError: 'str' object has no attribute 'startwith'”這樣的錯誤呢?

答:字串沒有startwith()方法,應該是startswith()。同理,也沒有endwith()方法,而是endswith()。

31.問:表示式{1, 2, 3}<{1, 2, 4}的值怎麼會是False呢?

答:關係運算子作用於集合時,表示集合之間的包含關係。對於集合A和B,只有A是B的真子集時,A<B的值才是True。

32.問:兩個列表是怎麼比較大小的呢?

答:列表比較大小時,是從前往後依次比較其中的每個元素,直到得到明確的結論為止。以[1, 2, 3]和[1, 2, 4]為例,第一個元素相等,第二個元素也相等,第三個元素3<4,所以[1, 2, 3]<[1, 2, 4]。以[1, 2, 3, 4]和[1, 2, 3]為例,兩個列表中前三個元素是相等的,但第一個列表中還有多餘的元素,所以[1, 2, 3, 4]>[1, 2, 3]。以[4, 2, 1]和[3, 5, 1]為例,第一個元素4>3,此時可以直接得出結論[4, 2, 1]>[3, 5, 1],後面的元素不再比較。元組和字串也使用同樣的方式比較大小。

33.問:程式中有個map物件,第一次使用是正常的,但是再使用時好像裡面就沒有元素了,這是怎麼回事呢?

答:map物件、enumerate物件、zip物件、filter物件、reversed物件和生成器物件這些具有惰性求值特點的物件,其中的元素只能使用一次,訪問過的元素無法再次訪問。

34.在IDLE中執行程式,提示錯誤“UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 96-96: Non-BMP character not supported in Tk”,但是程式碼怎麼檢查都是對的,怎麼辦呢?

答:IDLE中有些字元無法正常輸出,換個開發環境,或者在命令提示符環境中執行程式就可以了。



溫馨提示

進入公眾號,通過選單“最新資源”==>“歷史文章”可以快速檢視分專題的文章列表,通過“最新資源”==>“微課專區”可以觀看Python微課,通過“最新資源”==>“培訓動態”可以檢視近期Python培訓安排,通過“最新資源”==>“教學資源”可以檢視Python教學資源。

640?wx_fmt=png



--------董付國老師Python系列圖書--------

1)《Python程式設計(第2版)》清華大學出版社

2)《Python可以這樣學》清華大學出版社

3)《Python程式設計基礎(第2版)》清華大學出版社

4)《中學生可以這樣學Python》清華大學出版社,配套微課:《中學生可以這樣學Python》84節微課免費觀看地址

5)《Python程式設計開發寶典》清華大學出版社

6)《玩轉Python輕鬆過二級》清華大學出版社

7)《Python程式設計基礎與應用》機械工業出版社

8)《Python程式設計實驗指導書》清華大學出版社(預計2019年1月出版)

9)《Python程式設計基礎與案例集錦(中學版)》電子工業出版社(預計2019年2月出版)


《中學生可以這樣學Python》84節微課免費觀看地址

非計算機專業《Python程式設計基礎》教學參考大綱

計算機相關專業“Python程式設計”教學大綱(參考)

《Python程式設計》實驗指導書(30個實驗)

《Python程式設計基礎與應用》課後習題答案

Python課程期末考試程式設計題自動批卷原理與實現模板

“Python小屋”免費資源彙總(截至2018年11月28日)


系列教學PPT:

1900頁Python系列PPT分享一:基礎知識(106頁)

1900頁Python系列PPT分享二:Python序列(列表、元組、字典、集合)(154頁)

1900頁Python系列PPT分享三:選擇與迴圈結構語法及案例(96頁)

1900頁Python系列PPT分享四:字串與正規表示式(109頁)

1900頁Python系列PPT分享五:函式設計與應用(134頁)

1900頁Python系列PPT分享六:物件導向程式設計(86頁)

1900頁Python系列PPT分享七:檔案操作(132頁)

1900頁Python系列PPT分享八:異常處理結構與程式除錯、測試(70頁)

報告PPT(163頁):基於Python語言的課程群建設探討與實踐

報告PPT(123頁):Python程式設計基礎精要

2000頁Python系列PPT分享九:(GUI程式設計)(122頁)

Python實驗專案1例:使用程式池統計指定範圍內素數的個數

(PPT)Python程式設計課程教學內容組織與教學方法實踐


相關文章