天天看點

這些年,你們一起踩過的坑(1)

程式設計教室建立5年多了,回答的問題不說上萬也有好幾千了。盡管大多數的問題在過去的文章以及論壇上都有講過不止一遍,但因為不斷有新人到來,難免還是被這些小坑磕磕絆絆一番。

這些年,你們一起踩過的坑(1)

今天就把平常被提問頻率較高的一些問題整理出來,再次統一回答。基本都是非常早期階段的問題,其中一定有你遇到過或将會遇到的。已經有一定基礎的同學也可以對照下,這些問題涉及的概念,自己是否都已清楚。

因為篇幅問題,會分幾篇來講,如果你們有希望我講解的,請在留言中提出。如果是普遍問題,我會放在後續中。

去官網 python.org 下載下傳最新版本即可,無需嚴格按照教程裡的小版本。如果連不上官網,也可以從文末“閱讀原文”進入“學習資源”-“相關下載下傳”,找到網盤裡替你們下載下傳好的安裝包(不是實時最新版,但可以用)。

如果官網上的最新版本按鈕沒有替你自動下載下傳,可從清單中選擇 executable installer。如果你确信自己的系統是 64 位的,可以選 x86-64,否則選 x86 也沒有問題。

這些年,你們一起踩過的坑(1)

我剛發現現在官網已經不再預設放置 2.7 版本的下載下傳按鈕了。是以關于 2 還是 3 的老問題也别糾結了,順應潮流裝 3 吧。我們的教程文章也逐漸更新中(曆史文章無法更新,請從“閱讀原文”或回複 python 進入)。已經用了 2 的同學也不用擔心,從文法上來說,真的沒有什麼差别,學會任何一個版本後都可以秒轉。

這些年,你們一起踩過的坑(1)

這個界面叫做 python shell,不是開發寫代碼的地方,每輸入一行它都會自動執行并輸出結果。是以要寫代碼,請參考課程《第3課 - IDE》裡的說明,通過視窗上方菜單欄的 File - New File(或 New Window)建立一個新視窗,在裡面寫代碼。

類似的問題還有,為什麼教程裡有輸出,我代碼裡就沒有?上面說了,python shell 會自動輸出,而在代碼中,你需要 print。

這些年,你們一起踩過的坑(1)

可能有人會說,這也算問題?但确實有相當多的人在這一步會産生誤解:以為 input 後面括号裡的内容就是“使用者輸入”。

這裡要明确:input 擷取的是“使用者”輸入,是程式運作時才得到的資料,是以不是開發者在代碼裡預先寫好的。input 括号裡的文字,隻是用來作為輸入前的“提示語”。真正的輸入,是要程式執行後,在控制台裡輸入,按回車結束。

如果對上述文字描述還沒能了解的,可以公衆号對話裡回複關鍵字 輸入,有一個視訊示範。

報錯提示 <code>TypeError: unorderable types: str() &lt; int()</code>

這些年,你們一起踩過的坑(1)

py3 的 input,不管你輸入什麼内容,都會被當做字元串來處理。而字元串是不能跟數字之間比大小的。是以需要手動轉換一下:

py2 也會有類似的問題(發生在 raw_input),而且更坑的是用 str 和 int 比大小并不會報錯,而是傳回一個并不是你預想的結果,這個需要額外注意。

報錯提示 <code>SyntaxError: Missing parentheses in call to 'print'</code>

這是 Python 版本 3 和 2 的“重大”差異之一:print 要把後面輸出的内容加上括号。後面學到函數,你就了解為什麼要這樣了:print 也是一個函數,參數就是輸出的内容。

類似的一個問題是:

這些年,你們一起踩過的坑(1)

會有人覺得我這裡不是加了括号了嗎,為什麼還不行?這個式子在程式中的執行是:1. 輸出 <code>'num is %s'</code>,2. 把 print 的傳回值做 % 11 操作。但 print 函數沒有傳回值,也就是 None,是以就報錯了。應該用括号把要輸出的所有内容外層括起來。

報錯提示 <code>AttributeError: module 'random' has no attribute 'randint'</code>

這些年,你們一起踩過的坑(1)

這個情況如果發生了,你可能很難找到問題所在,通過網上搜尋也不行。原因是你的代碼用了系統子產品一樣的名字:random。類似的,如果你給自己的代碼取名 math.py、list.py、str.py 等,或者變量名用 sum、time、str、list 等,都有可能因命名沖突帶來意想不到的 bug。是以,遠離系統保留字。好的編輯器會給你高亮提示出來。如果你自己拿不準,取名時盡量用合成詞,比如 my_random 之類。

可能有同學看出來了,這幾個問題是到我們教程前半部分到“猜數字”小遊戲這裡可能踩到的坑。再往後有兩個大坑,一個是函數,另一個是編碼,我後面再來講。

PS:本文封面圖那個問題:‘python’不是内部或外部指令,也不是可運作的程式或批處理檔案。在公衆号(Crossin的程式設計教室)對話裡回複關鍵字 安裝,看下文中的幾點“注意”,我要提醒的都在那裡了。