初窺Python門縫了解入門路徑
此之謂入門,其標(biāo)準(zhǔn)是,在不計效率的情況下,可以使用這門語言實現(xiàn)一個不太復(fù)雜的功能。
當(dāng)然,這個不計效率也不是毫無原則的不計,比如我可以1小時搞定,那么剛?cè)腴T的新手需要1天甚至2天,他將需要大量的時間去查庫查類查函數(shù),但絕不至于用上一周半周的。
我從來都沒學(xué)過python,當(dāng)年只是受夠了Matlab,而想把一個用Matlab寫的類轉(zhuǎn)成其他語言,結(jié)果用了一周,就把一個涵蓋圖像處理、數(shù)據(jù)擬合等功能的一千來行Matlab代碼順利轉(zhuǎn)成了Python。過了沒幾年,Matlab就對我們禁用了,可見當(dāng)年的選擇是極為英明的。
那么如今讓我重寫一遍那個類,大概只需要一天不到。這就是新手和老手的區(qū)別,但也僅僅是新手和老手的區(qū)別。
從入門到熟練運用,需要的不是什么思維的提升,而僅僅是是一個字——用,或者更直觀地說,就是看代碼量。從這個意義上來說,越快入門,就可以更早地堆積代碼量,從而更早地熟練運用Python,而不是按部就班地從入門到放棄。學(xué)習(xí)編程最可怕的事情就是:每天寫一遍Hello World并感覺收獲滿滿。
接下來,快速入門Python。
1 環(huán)境配置與基本運算
正所謂天下武功、唯快不破。學(xué)Python,講求的就是一個快字。
盡管下載Python并安裝并不麻煩,但新手往往會在使用過程中出現(xiàn)各種讓人費解的問題。所以,如果想1小時入門,我推薦這個。
在線Jupyter編輯工具,進入之后,點擊中間的Try JupyterLab,就可以進入在線Notebook的界面。

點擊Python3,快速進入jupyter notebook的環(huán)境。然后按照直覺,寫一些四則運算表達式,例如這些:
x = 100 y = 50 z = 2.5 print(x + y * z) print(x - y / z) print(x * y**2)
然后同時按下Ctrl+回車,就能運行python代碼。

然后按下alt+回車,開啟下一段代碼。
如果用shift+回車,則會綜合上面的兩個功能,本節(jié)耗時:3分鐘。
如果覺得在線Jupyter工具不好用,還有這個ideone,進入之后選擇python,輸完代碼后選擇run。

2 調(diào)用各種包
在python中,通過import來完成包的調(diào)用。例如,我想調(diào)用一個日歷的包,然后打印日歷
import calendar calendar.prcal(2021,m=4) #2021年,每行4個月
然后shift+回車,就可以看到日歷了。

如果想通過python進行科學(xué)計算,應(yīng)用最多的包是numpy和matplotlib中的pyplot,前者用于計算,后者用于繪圖。通常二者被重命名為np和plt。接下來演示一下二者的用法。
import numpy as np from matplotlib import pyplot as plt x = np.random.rand(100) #python中通過#進行注釋 y = np.random.rand(100) #用于生成100個隨機數(shù) plt.scatter(x,y) #繪制散點圖,并存放在內(nèi)存 plt.show() #調(diào)用內(nèi)存中的圖,show給我們

本節(jié)需要記住的單詞:import、as、numpy、matplotlib.pyplot、random.rand、scatter、plt.show。
本節(jié)耗時:5分鐘。
3 判斷、循環(huán)
如果想統(tǒng)計剛剛新建的x和y中,有多少大于0.5,那么方法很簡單,:新建兩個變量用于存儲二者的個數(shù),然后跑一個循環(huán)進行判斷。
xNum = 0 yNum = 0 for i in range(100): if x[i]>0.5:xNum += 1# xNum += 1 即 xNum = xNum + 1 if y[i]>0.5:yNum += 1# python中通過方括號進行索引 print(xNum,yNum)
可以把range(100)理解為0到99這100個數(shù)組成的一個集合,for i in range(100)意味著i對這個集合進行遍歷,遍歷就是逐個復(fù)制給i,所以就完成了循環(huán)。
在python中,判斷、循環(huán)結(jié)構(gòu)通過:與其內(nèi)容進行分隔,且子代碼塊需要通過空格進行標(biāo)記。如果程序塊中只有一行代碼,則可以直接寫在:后面。
如果想知道,x中處于 ( 0 , 0.3 ] , ( 0.3 , 0.6 ] , ( 0.6 , 1 ] (0,0.3],(0.3,0.6],(0.6,1] (0,0.3],(0.3,0.6],(0.6,1]這三個區(qū)間的數(shù)分別是多少,則需要用到if..elif
n1,n2,n3 = 0,0,0 #按照直覺理解即可 for i in x: if i>0.6 : n3 += 1 elif i>0.3 : n2 += 1 else: n1 += 1 print(n1,n2,n3)
for..in的作用是遍歷某個集合,而x本身也是一個集合,所以也可以接受遍歷。
本節(jié)需要記住的單詞:if, else, elif, for, +=,,耗時5分鐘。
4 函數(shù)
如果想反復(fù)統(tǒng)計一組隨機數(shù)的分布情況,顯然不能每次都寫一遍那么老長的代碼,而是應(yīng)該把代碼封裝到一個函數(shù)里面。
def statis(x): xNum = 0 for i in x: if i>0.5: xNum += 1 return xNum
在Python中,通過def新建一個函數(shù),函數(shù)名字后的括號里是這個函數(shù)需要輸入的變量。最后通過return來返回一個值。如果按照數(shù)學(xué)的那種表達式,以上代碼差不多類似xNum=statis(x)這樣的感覺。
在建了一個函數(shù)之后,就可以調(diào)用了,本節(jié)用時5分鐘,需要記住def和return。

5 數(shù)據(jù)結(jié)構(gòu)
我們剛剛說x是集合,這是不準(zhǔn)確的。數(shù)學(xué)上的集合要求不能有重復(fù)元素,但x是隨機生成的一個數(shù)組,所以并不能保證這一點。
在本節(jié),我們要弄懂python中最常用的5種數(shù)據(jù)結(jié)構(gòu):元組、列表、字典、集合、數(shù)組,同時要掌握python推導(dǎo)式,預(yù)計耗時15分鐘。
tpl = (1,2,3,4) #此為元組tuple
lst = [1,2,3,4,5]#此為列表list
dct = {"a":1, "b":2, "c":3} #此為字典dict
st = {1,2,3,3}#此為集合
arr = np.array([1,2,3,4])#此為數(shù)組

可以看到,盡管我們在新建集合的時候給了1,2,3,3,但集合中沒有重復(fù)元素,所以只剩下一個3。
一句話區(qū)分這五種類型:
- 只有數(shù)組
np.array可以計算 - 字典通過
鍵值對(key-value)進行索引 - 集合無重復(fù)元素,且不可索引
- 元組可以作為字典的鍵,列表則不能。
這五種數(shù)據(jù)類型的詳細(xì)區(qū)別如下(這個其實用不著記)。
| 索引方式 | 可計算 | 可哈希 | 元素可重復(fù) | 指針式 | |
|---|---|---|---|---|---|
| tuple | tpl[0] |
❌ | ✅ | ✅ | * |
| list | lst[0] |
❌ | ❌ | ✅ | * |
| dict | dct["a"] |
❌ | ❌ | ❌ | ** |
| set | ❌ | ❌ | ❌ | ❌ | * |
| np.array | arr[0] |
✅ | ❌ | ✅ | ❌ |
其中,可哈希暫時可理解為能夠作為字典的key。
所謂指針式是我亂取的一個名字,意思是可以像指針一樣把元素取出來。其中,集合與字典因為元素不可重復(fù),所以并沒有什么變化。

至于可計算就比較容易理解了,例如+測試,字典和集合干脆就報錯了,而元組、列表將+重載為合并,只有arr執(zhí)行了加法操作。

在python中,可通過len來獲取這些數(shù)據(jù)結(jié)構(gòu)的長度。
6 字符串
在字典中我們其實已經(jīng)用過了字符串,在python中,用單引號或雙引號來代表字符串,二者是等價的。
x = 'abc' y = "abc" print(x==y)
因為引號被用于字符串的標(biāo)志,所以如果想在字符串中輸入引號,則需要轉(zhuǎn)義,轉(zhuǎn)移符號為\。又因為\用于轉(zhuǎn)義,所以\也需要轉(zhuǎn)義。
print('\'')
print('\\')
print("\"")
7 回到本地
下載python,或者下載anaconda。
如果下載之后,可通過win+r,輸入cmd進入命令行,輸入python進入python環(huán)境。
如果下載的是python,則通過pip isntall numpy安裝numpy,總之其命令格式為pip install XXX;如果下載的是anacoda,則還可以通過conda install numpy來進行安裝——當(dāng)然,anaconda的基本環(huán)境已經(jīng)安裝了大部分常用包。
如果把python的代碼封裝到一個.py格式的文件中,然后就可以通過python XX.py進行調(diào)用,并執(zhí)行。
8 命令行版2048小游戲
按理說看到這里,并寫到這里,就應(yīng)該算是完成了入門,那么接下來就要用入門學(xué)會的知識,寫一個命令行版的2048小游戲。
2048的邏輯無非是操作4x4的方格,每個方格中有一個數(shù),我們可以操作這些數(shù)字進行移動,如果兩個相同的數(shù)字在我們的操作下相撞了,那么它們就可以合并了。
而這個4x4的方格,無非是一個矩陣。
我們的操作可以理解為輸入字符,用wsad代表上下左右,y代表確定,n代表取消。
python接收字符的函數(shù)是input,例如
>>> x = input("input a number")
input a number5
>>> x
'5'
而創(chuàng)建矩陣,可以用np.zeros([4,4]).astype(int),表示創(chuàng)建一個 4 × 4 4\times4 4×4的全0矩陣,并化為整形。
矩陣中只有16個元素,盡管循環(huán)效率低下,但足以滿足人的操作速度了。
如果讀者從頭到尾敲了所有的代碼,那么如今必然有能力獨立寫出這樣的程序。所以具體的代碼將在下篇文章給出。
到此這篇關(guān)于初窺Python門縫了解入門路徑的文章就介紹到這了,更多相關(guān)Python 入門內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信