標題無意冒犯,就是覺得這個廣告挺好玩的
上面這張思維導圖喜歡就拿走,反正我也學不了這麼多
好,切入正題
本系列文預設各位有一定的C或C++基礎,因為我是學了點C++的皮毛之後入手的Python,這裡也要感謝齊鋒學長送來的支援。
本系列文預設各位會百度,會用線上編譯器,因為我是突擊學Python的,之前的編譯環境都刪了,但是吧,我發現線上編譯是真的爽,浪費那時間去搭那環境幹啥,學好了Python,會差那點請人搭環境的錢嗎?
我要的不多,點個關注就好啦
然後呢,本系列的目錄嘛,說實話我個人比較傾向於那兩本 Primer Plus,所以就跟著它們的目錄結構吧。
本系列也會著重培養各位的自主動手能力,畢竟我不可能把所有知識點都給你講到,所以自己解決需求的能力就尤為重要,所以我在文中埋得坑請不要把它們看成坑,那是我留給你們的鍛鍊機會,請各顯神通,自行解決。
老生常談了,但是追本溯源有時候會有它意想不到的好處,全在個人悟性了。
Python的作者,Guido von Rossum,確實是荷蘭人。1982年,Guido從阿姆斯特丹大學(University of Amsterdam)獲得了數學和計算機碩士學位。然而,儘管他算得上是一位數學家,但他更加享受計算機帶來的樂趣。用他的話說,儘管擁有數學和計算機雙料資質,他總趨向於做計算機相關的工作,並熱衷於做任何和程式設計相關的活兒。
在那個時候,他接觸並使用過諸如Pascal、C、 Fortran等語言。這些語言的基本設計原則是讓機器能更快執行。所有的編譯器的核心是做優化,以便讓程式能夠執行。為了增進效率,語言也迫使程式設計師像計算機一樣思考,以便能寫出更符合機器口味的程式。在那個時代,程式設計師恨不得用手榨取計算機每一寸的能力。
然而,這種思考方式讓Guido感到苦惱。Guido知道如何用C語言寫出一個功能,但整個編寫過程需要耗費大量的時間 。他的另一個選擇是shell。然而,shell的本質是呼叫命令。它並不是一個真正的語言。比如說,shell沒有數值型的資料型別,加法運算都很複雜。總之,shell不能全面的調動計算機的功能。
Guido希望有一種語言,這種語言能夠像C語言那樣,能夠全面呼叫計算機的功能介面,又可以像shell那樣,可以輕鬆的程式設計。
1989年,為了打發聖誕節假期,Guido開始寫Python語言的編譯/直譯器。Python來自Guido所摯愛的電視劇Monty Python’s Flying Circus 。他希望這個新的叫做Python的語言,能實現他的理念(一種C和shell之間,功能全面,易學易用,可拓展的語言)。Guido作為一個語言設計愛好者,已經有過設計語言的(不很成功)的嘗試。這一次,也不過是一次純粹的hacking行為。
1991年,第一個Python編譯器(同時也是直譯器)誕生。它是用C語言實現的,並能夠呼叫C庫(.so檔案)。從一出生,Python已經具有了:類(class),函數(function),例外處理(exception),包括表(list)和詞典(dictionary)在內的核心資料型別,以及模組(module)為基礎的拓展系統。
int 整型 (正整形 0 負整型)
float 浮點型即小數
bool 布林型 (True 真 False假)
插一個
complex 複數型別(這個我寫程式碼兩年多,也是沒用過了)
#表達方式一:
complexvar = 5 + 6j
complexvar = 3 - 2j
print(type(complexvar))
print(id(complexvar))
#表達方式二:
complex(實數,虛數)
res = complex(14,2)
print(res) => (14,2)
'''用引號引起來的就是字串,三種引號:單引號 雙引號 三引號'''
跳脫字元:\ (1)把有意義的字元轉變為無意義的字元
(2)把無意義的字元轉變的有意義
\n 或者 \r\n : 代表"換行"意思
\t : 代表"一個縮排"意思
\r : 代表將\r後面得所有字元拉到該行首
至於其他跳脫字元,這裡不多贅述
特徵:可以獲取,但不可以修改,有序排列
獲取字串中的資料:跟列表list 元組tuple的取值一模一樣(正向下標,反向下標)
‘’‘元字串可以讓跳脫字元失效’’’
「%d %f %s」 語法 : 「字串」 % (實際值)
%d 預留位置 d代表整型資料,%nd表示佔n個位置
結果:XXX買了3個充氣娃娃
%f 預留位置 f代表浮點型資料 預設保留6位小數點,f前面有數值,則根據數值是多少保留對應小數點
結果:今天大白菜2.35元一斤
結果:今天大白菜2.3元一斤
%s 預留位置 代表字串
‘’‘特徵:可以獲取和修改資料,排列有序’’’
‘’‘特徵:可以獲取但不能修改資料,排列有序’’’
獲取元組中的資料 : 跟列表list的取值一模一樣 (正向下標,反向下標)
setvar = {} 資料型別顯示是一個dict 字典
特徵:不可獲取,也不可以修改,無序排列,自動去掉重複資料
冒號左邊是鍵,右邊是值,鍵值對之間用逗號隔開
特徵 : 可以獲取,可以修改,無序排列
底層使用了雜湊演演算法,儲存的資料是雜湊,鍵值對儲存的資料
獲取字典當中的資料:可以獲取,直接輸入冒號左邊的鍵即可取值的資料
修改字典當中的資料:可以修改,直接將要改的值替換掉 鍵 就可實現修改
一般在命名字典的鍵時,推薦使用字串,按照變數命名的字串.
獲取資料型別的函數:type()
獲取變數地址的函數:id()
不過,對於這麼多的算術運運算元,我建議你先看一遍,有個大致的印象就行。你可以先把這張圖儲存上,等用的時候再找出來,對應著查閱就可以。
咱們再說說一樣的——運算優先順序:Python世界的運算優先順序,和我們平時的計算優先順序是一樣的。
Python有一個很優秀的點我很喜歡,那就是它的字串拼接。
曾經有人說,程式設計,說到底就是對字串的操作,我覺得他說的很有道理,別看那些花裡胡哨的,說到底都是操作字串。
反正C/C++裡的字串操作已經讓我喝好幾壺了,還沒喝夠。
Python裡面字串拼接的方法可簡單了,就是利用字串拼接符號【+】,將需要拼接的變數連在一起就行了。
但是,既然是字串拼接,那它的限制其實就很明顯了,你得拿字串來拼接。
那如果我要拿去拼的東西參差不齊呢?怎麼辦?別急
負責轉換資料型別的函數一共有3種:str()、 int()和float()。
str()函數能將資料轉換成其字串型別,不管這個資料是int型別還是float型別,只要放到括號裡。這個資料就能搖身一變,成為字串型別。
是不是挺簡單的?我們只需通過str(number)一個步驟,便可以將整數型別的【153】轉化為字串型別的【153】,成功完成資料拼接。
將資料轉換為整數型別的方法也很簡單,就是int()函數。其使用方法同str()一樣,將你需要轉換的內容放在括號裡就行,像這樣:int(轉換的內容)。
不過對於int()函數的使用,大家要注意一點:只有符合整數規範的字串類資料,才能被int()強制轉換。
別看它雖然只有一句話,但它其實帶有三層含義:
首先,整數形式的字串比如'6'和'1',可以被int()函數強制轉換。
其次,文字形式,比如中文、火星文或者標點符號,不可以被int()函數強制轉換。
最後,小數形式的字串,由於Python的語法規則,也不能使用int()函數強制轉換。
雖然浮點形式的字串,不能使用int()函數。但浮點數是可以被int()函數強制轉換的(去尾法)
首先float()函數的使用,也是將需要轉換的資料放在括號裡,像這樣:float(資料)。
其次,float()函數也可以將整數和字串轉換為浮點型別。但同時,如果括號裡面的資料是字串型別,那這個資料一定得是數位形式。
那麼,經過之前str()和int()操練,float()函數是不是好懂了一些?
好滴吧,可能有的人會犯嘀咕,為什麼不講輸入輸出。莫急嘛
括號內是數位的情況
print(520)
括號內是單引號的情況。
print('一起玩吧')
括號內是雙引號的情況。
print("一起玩吧")
括號內單雙引號同時存在的情況。
print("Let's play")
當然,括號內也可以是三引號,參考上面單雙同時出現的情況就知道了。
之所以現在才說輸入輸出,是因為這裡面實在可以包含太多東西了,不要被上面的這幾個例子所迷惑,print可以列印各種資料型別,參考本文前面出現的print()以及後面將會出現的print()
首先,讓我們通過一段程式碼,來看一看input()函數是如何使用的:
input('請在以下四個選項【格蘭芬多;斯萊特林;拉文克勞;赫奇帕奇】中,輸入你想去的學院名字:')
input()函數是輸入函數。就上面例子來講,它需要你輸入針對括號內’請在以下四個選項【格蘭芬多;斯萊特林;拉文克勞;赫奇帕奇】中,輸入你想去的學院名字:'的答案。
所以,當你在函數的括號內寫出問題時,input()函數會將此問題原樣顯示在螢幕上,並在終端區域等待你針對此問題的回答。
可是,我們為什麼要在終端處輸入回答呢?不輸入行不行?
事實上,我們可以把input()函數當作一扇連結現實世界與程式碼世界的門。
當問題從程式碼世界傳遞給我們,可我們卻沒有回答時,這扇等待輸入的input()大門,就會一直處於敞開狀態,一直等著你往裡送回答。
對於input()函數來說,不管我們輸入的回答是什麼,不管你輸入的是整數1234,還是字串『隱形斗篷是我最想擁有的魔法』,input()函數的輸入值(蒐集到的回答),永遠會被【強制性】地轉換為【字串】型別。
這時候就要對輸入的資料進行強制型別轉換了:choice = int(input('請輸入您的選擇:'))
在這裡,你可能注意到了一個細節:在條件判斷程式碼中的冒號:後、下一行內容的前面,會空幾個格,但這是為什麼呢?
首先,在計算機的溝通語言中,空格的學名叫縮排,比如我們寫文章都要空兩個格,這就叫首行縮排。
icon
對於Python而言,冒號和縮排是一種語法。它會幫助Python區分程式碼之間的層次,理解條件執行的邏輯及先後順序。【注:縮排是四個空格】這裡建議不要用tab,就四個空格的事情嘛,年輕人那麼懶幹嘛,養成習慣之後很多地方受限制。
很多時候,我們不能把雞蛋放在一個籃子裡,要做好兩手準備:如果不滿足條件時,我們要怎麼辦。
Python則很貼心地,讓我們借用if…else…語句,讓碼農們有了另一種選擇——【如果…不滿足,就…】
在if…else條件語句中,if和else各自抱團,形成兩個不同的程式碼塊。表示的是條件和其他條件的互斥關係——如果不滿足if條件,就執行else其他條件。
在判斷3個或3個以上的條件時,我們就需要藉助Python中的多向判斷命令:if…elif…else…。
當判斷的條件超過3個時,中間的多個條件都可以使用elif。
elif後可不接else
像這種如果底下還有如果(即條件裡還套條件)的情況,我們如何用Python把上面的規則寫出來,並得出評價呢?
答案就是——巢狀條件。
Python for迴圈可以遍歷任何序列的專案,如一個列表或者一個字串。
for迴圈的語法格式如下:
for iterating_var in sequence:
statements(s)
for letter in 'Python': # 第一個範例
print '當前字母 :', letter
fruits = ['banana', 'apple', 'mango']
for fruit in fruits: # 第二個範例
print '當前水果 :', fruit
print "Good bye!"
可以看出,模板中的iterating_var
是不用提前賦值的。
使用range(a,b) 函數,你可以生成了一個【取頭不取尾】的整數序列。
例如:
for i in range(13,17):
print(i)
結果:13、14、15、16
、
range()函數還有一種用法,我們來直接體驗一下:
for i in range(0,10,3):
print(i)
這是一種切片方式,第三個引數被稱作「步長」,即間隔多少取一個數。
那麼這個程式碼執行的結果就是:0、3、6、9
在 python 中,for … else 表示這樣的意思,for 中的語句和普通的沒有區別,else 中的語句會在迴圈正常執行完(即 for 不是通過 break 跳出而中斷的)的情況下執行,while … else 也是一樣。
for num in range(10,20): # 迭代 10 到 20 之間的數位
for i in range(2,num): # 根據因子迭代
if num%i == 0: # 確定第一個因子
j=num/i # 計算第二個因子
print '%d 等於 %d * %d' % (num,i,j)
break # 跳出當前迴圈
else: # 迴圈的 else 部分
print num, '是一個質數'
while迴圈和for迴圈差不多,不過這裡的計數變數要初始化:
慄:
a = 0 #先定義變數a,並賦值
while a < 5: #設定一個放行條件:a要小於5,才能辦事
a = a + 1 # 滿足條件時,就辦事:將a+1
print(a) # 繼續辦事:將a+1的結果列印出來
很明顯,while迴圈有2個要點:1.放行條件;2.辦事流程。
和for迴圈一樣,冒號和內部程式碼的縮排都是必不可少的。
我們先來看看break語句。break的意思是「打破」,是用來結束迴圈的,一般寫作if…break。它的寫法長這樣:
# break語句搭配for迴圈
for...in...:
...
if ...:
break
# break語句搭配while迴圈
while...(條件):
...
if ...:
break
在這裡,if…break的意思是如果滿足了某一個條件,就提前結束迴圈。記住,這個只能在迴圈內部使用。
continue的意思是「繼續」。這個子句也是在迴圈內部使用的。當某個條件被滿足的時候,觸發continue語句,將跳過之後的程式碼,直接回到迴圈的開始。
# continue語句搭配for迴圈
for...in...:
...
if ...:
continue
...
# continue語句搭配while迴圈
while...(條件):
...
if ...:
continue
...
pass語句就非常簡單了,它的英文意思是「跳過」。
for迴圈和while迴圈最大的區別在於【迴圈的工作量是否確定】,for迴圈就像空房間依次辦理業務,直到把【所有工作做完】才下班。但while迴圈就像哨卡放行,【滿足條件就一直工作】,直到不滿足條件就關閉哨卡
接下來,我想先和你談談一個專案一般是怎麼完成的。更具體的說,程式設計師是如何思考和解決問題的呢?
icon
我認為其中一個很重要的能力是【問題拆解】。問題拆解,指的是在做一件事或面對一個問題的時候,將其拆解成多個步驟或多個層次,逐步執行和解決問題,直至達到最終效果。
寫個什麼小專案呢?
這樣吧,猜數位遊戲都玩過吧,就寫一個猜數位遊戲:
功能需求:
實現一個猜數位小遊戲,隨機生成一個0~100以內的資料,由玩家來猜,每次猜完之後計算機告訴玩家是猜大了還是猜小了,共5次機會,5次猜不出來宣佈遊戲失敗。
很簡單吧。
寫好的也可以發在評論區哦
建議收藏,不然划著划著就找不到了嘞。