
如何用六點教會老婆寫 Python
什么是code?
code就就是一種語言,一種計算機能讀懂的語言。計算機是一個傻逼,他理解不了默認兩可的任何東西。比如,你讓你老公去買個西瓜,你老公會自己決定去哪里買,買幾個,找個搞活動打折的買,總之,你給他錢,他就給你買回來讓你吃到爽的西瓜。但是,你想讓計算機買一個西瓜?你要告訴他:去門口的鮮豐水果店買,買沙瓤無子西瓜,若旁邊的店打折,就去旁邊的店買。總之,你不能讓計算機做任何決定,你要清楚的告訴他所有情況下的所有的行為。而code,就是你和計算機交流的語言,或者說是對計算機的命。
我們就把計算機理解為一個人,這個人很死板,只能按照你給他的詳細命令進行工作。而這個人工作速度特別特別快,并且保證工作結(jié)果都是正確的。
編程語言其實不重要,重要的是要明白如何和計算機交流,明白了這個也就能看懂代碼了。
編程 = 算法 + 數(shù)據(jù)結(jié)構(gòu)
python就是一種和計算機交流的語言,這種語言單詞(關(guān)鍵字)不多,規(guī)則也少。下面所有的內(nèi)容都基于python。
1 判斷
當你命令計算機做一件事情的時候,這件事情可能分一些情況進行處理。
判斷通常涉及到的關(guān)鍵字有:if , else, elseif, and, or,<, >,=,<=,>=,==
比如,你讓計算機買西瓜,希望買到打折的西瓜,不打折的話你就不吃了。
if 水果店打折:
買西瓜
else:
不買了
通過這個命令,計算機變得更智能了一些,他可以根據(jù)情況執(zhí)行你的命令。
水果店不打折你就吃不到西瓜,你不開心。那么,我們讓計算機更智能一些。假如西瓜打折,就買西瓜;不打折的話讓計算機跟老板講價,老板同意打折,就買西瓜;不同意,不吃了;
if 水果店打折:
買西瓜
else:
與老板講價
if 講價成功:
買西瓜
else:
不吃了。
雖然和老板講價一般都能講成功,但是有的老板給力給打五折,有的老板只給打九折。你就想了,若老板打五折,我就買兩個,今天吃一個,明天吃一個。若老板不給力,打折不到五折,就買一個,今天先吃,明天再說。
if 水果店打折:
買西瓜
else:
與老板講價
if 打折成功 and 打折力度<=5:
買兩個西瓜
elseif 打折成功 and 打折力度 > 5:
買一個西瓜
else:
不吃了。
此外,有沒有發(fā)現(xiàn),打著成功這段代碼其實也可以寫成:
if 打折成功:
if 打折力度<=5:
買兩個西瓜
else:
買一個西瓜
else:
不吃了。
由此可見,計算機也不是完全的一成不變,只要你給他的命令他能理解并且不會默認兩可,他都可以完成工作。
and的意思代表且,or的意思代表或。and和or的順序不同,結(jié)果也不同,可以通過括號來說明判斷條件的優(yōu)先級。
a==b是比較a和b是否相等的意思,而=代表賦值。賦值的含義,我在下面的變量章節(jié)介紹。
2 循環(huán)
python中涉及到循環(huán)的關(guān)鍵字包括:for…in… ,while,break,continue
上面的例子我們已經(jīng)讓電腦成功的可以根據(jù)不同的情況去水果店買西瓜了,但是若老板不打折,你就吃不到西瓜了。這時,你就想了,咱們小區(qū)門口有三家水果店,分別是鮮豐水果、四季水果和路邊攤,一家不打折不代表三家都不打折啊,所以你希望電腦可以去三家都去看看,挑一家打折的店買西瓜。
for 水果店 in (鮮豐水果、四季水果和路邊攤):
if 水果店 打折:
買西瓜
break(循環(huán)結(jié)束)
else:
啥都不做
帶西瓜回家
循環(huán)的意義在于,可以用電腦對不同的對象執(zhí)行相同的命令。
介紹下break,break的意思就是結(jié)束循環(huán)。比如,這段代碼中的break表示,我們一旦買了西瓜,那么就帶西瓜回家。
3 變量
現(xiàn)在時候介紹'變量'這個重要的東西了。
我們依然把電腦理解為幫我們工作的一個人,那么作為一個人,他需要有記憶力,而我們就可以通過變量去控制、利用計算機的記憶力。
變量可以理解為計算機的一個記憶單元,計算機擁有極好的記憶力,所以,可以隨心所欲的使用,用完了就扔,需要了就要。(當然,說隨心所欲是不嚴謹?shù)模悄憧梢岳斫鉃殡S心所欲)
那為什么叫變量呢,就是因為可以改變。為什么要改變呢?比如我們都有自己的年齡,我今年18,明年就19了。所以,'年齡'在我的記憶里是每年改變的。
變量對應(yīng)的一個東西叫常量,在我的記憶力,我的老婆是江江同學(xué)。而這個'老婆'這個記憶單元在我的腦子里是不會變的,她永遠都是江江同學(xué)。常量你現(xiàn)在可以不用理解,我寫主要是為了秀恩愛。
現(xiàn)在,計算機又要去買西瓜了。不過這次,你希望計算機可以在三個水果店中,找到一個打折力度最大的水果店去買水果。
之前所有水果店的最大折扣 = None
之前給最大折扣的水果店 = None
for 水果店 in (鮮豐水果、四季水果和路邊攤):
當前水果店折扣 = 老板給的折扣
if 當前水果店折扣 < 之前所有水果店的最大折扣:#4折比5折力度大
之前所有水果店的最大折扣 = 當前水果店折扣
之前給最大折扣的水果店 = 水果店
去 之前給最大折扣的水果店 買一個西瓜
以上有以下幾個記憶單元:
之前所有水果店的最大折扣
之前給最大折扣的水果店
當前水果店折扣
水果店 注意,for a in b,a也是一個變量,他在每次執(zhí)行的時候都是b中的當前執(zhí)行的一個元素。
這里需要介紹一些概念:
None 在python中表示空,表示這個記憶單元現(xiàn)在啥都沒有。比如在我情竇初開時,腦海中就已經(jīng)有了情人這個記憶單元,我一直在尋找,但遇到你之前一直沒有找到,所以那段時間這個記憶單元里面一直是空。
賦值符號:=。 注意,在計算機語言里面,一個'='號表示賦值,兩個等號'=='表示比較前后元素。賦值的意思是,把后面的元素,放到前面的變量里面。
變量的作用域
作用域這個東西非常重要,但是真心不想講,因為沒辦法結(jié)合現(xiàn)實的例子,不過還是大體說明下。
還是剛才的例子,我加了行號,并且我使用-代表空格,表示代碼的縮進。
1 之前所有水果店的最大折扣 = None
2 之前給最大折扣的水果店 = None
3 for 水果店 in (鮮豐水果、四季水果和路邊攤):
4 ---當前水果店折扣 = 老板給的折扣
5 ---if 當前水果店折扣 < 之前所有水果店的最大折扣:#4折比5折力度大
6 ------之前所有水果店的最大折扣 = 當前水果店折扣
7 ---之前給最大折扣的水果店 = 水果店
8 去 之前給最大折扣的水果店 買一個西瓜
你看這個例子可能納悶,為什么要先給'之前所有水果店的最大折扣'、'之前給最大折扣的水果店'這兩個變量賦值為None呢。就是因為作用域問題。
你看這個程序,每行代碼的縮進都是不一樣的。變量作用域可以理解為:一個變量,只有在其第一次出現(xiàn)的地方的縮進,以及縮進更多的代碼里面,才有效。我們第1、2行的變量,就可以用于3-8行,因為這些代碼的縮進都在1、2行的后面。而第四行的變量'當前水果店折扣',只在5、6、7行有效
1 A = None
2 ————B = None
3 ————..
4 ————————C = None
5 ————————..
6 ————D = None
7 ————..
8 ————————..
9 ————————..
10 ..
11 ..
再舉個例子,ABCD是變量,..代表某些代碼。A的作用域就是1-11行,即1-11行都可以使用A。B的作用域是2-9行,C的作用域只有4-5行,注意,8-9行就不能再使用C了,雖然他的縮進和4、5行一樣,作用域遇到第一個不能用縮進行代碼即結(jié)束。D的作用域就是6-9行。
4 函數(shù)
看懂以上幾節(jié),大概應(yīng)該明白計算機如何執(zhí)行代碼的了。
而函數(shù)和模塊,和之前的介紹不太一樣。之前是介紹如何讓計算機工作,是面向計算機的。而這一節(jié),是面向人的,是如何讓我們寫給計算機的代碼看起來更加簡潔、明了。函數(shù)和模塊都是對代碼結(jié)構(gòu)的優(yōu)化,否則一個稍微大點的項目,一大坨代碼,計算機看得懂人看不懂,不利于管理和交流。
首先說函數(shù)。函數(shù)是一系列代碼的集合,用函數(shù)一般是有幾個原因:
1.給一段代碼起個名字。
2.這段代碼和使用它的代碼關(guān)系不大,所以可以抽出來,抽出來后代碼更簡潔。關(guān)系不大的意思就是:使用函數(shù)的代碼通過傳給函數(shù)幾個參數(shù),函數(shù)就可以執(zhí)行。
3.代碼集合起來就可以在代碼的不同地方使用。
依然我們?nèi)ベI西瓜,不過我們希望電腦可以今天買完西瓜明天再買一個。按照之前的方式,這個邏輯應(yīng)該寫成這樣:
for 水果店 in (鮮豐水果、四季水果和路邊攤):
if 水果店打折:
買西瓜
else:
與老板講價
if 打折成功 and 打折力度<=5:
買兩個西瓜
elseif 打折成功 and 打折力度 > 5:
買一個西瓜
else:
不吃了。
休息一天。
for 水果店 in (鮮豐水果、四季水果和路邊攤):
if 水果店打折:
買西瓜
else:
與老板講價
if 打折成功 and 打折力度<=5:
買兩個西瓜
elseif 打折成功 and 打折力度 > 5:
買一個西瓜
else:
不吃了。
上面的代碼可以實現(xiàn)我們的要求,但是買西瓜的代碼其實是重復(fù)的,對于重復(fù)代碼,管理起來比較麻煩,比如你想改一點,那么就要去各個地方都改一次。
那么,我們把買西瓜的代碼弄成一個函數(shù),代碼就可以整理為:
def 買西瓜_函數(shù)():
for 水果店 in (鮮豐水果、四季水果和路邊攤):
if 水果店打折:
買西瓜
else:
與老板講價
if 打折成功 and 打折力度<=5:
買兩個西瓜
elseif 打折成功 and 打折力度 > 5:
買一個西瓜
else:
不吃了。
買西瓜_函數(shù)()
休息一天。
買西瓜_函數(shù)()
這一次,代碼整潔多了,而且,我們每次想修改買西瓜的代碼,都只需要改這個函數(shù)一處代碼都可以。
在python中,使用def function_name():定義函數(shù),函數(shù)下面所有的縮進都屬于這個函數(shù),叫函數(shù)體。
使用function_name()調(diào)用函數(shù)。
4.1 函數(shù)參數(shù)
現(xiàn)在你又不滿足與電腦只會買西瓜了,你又想吃柚子。怎么辦呢,那么是不是我們又要寫一個買柚子的函數(shù)呢。當然可以再寫一個買柚子函數(shù),但是買柚子函數(shù)的邏輯和買西瓜函數(shù)的邏輯都是一樣的,命令也一樣,唯一的區(qū)別就是之前是賣西瓜,現(xiàn)在是買柚子。如果再寫一個類似的買柚子函數(shù),那么又出現(xiàn)剛才說的問題,每次修改買水果的邏輯,都需要同時去修改買西瓜、買柚子函數(shù),如果柚子吃膩了,又要買香蕉、蘋果、梨,豈不是要寫非常多的函數(shù)?
為了解決這個問題,其實有一個更好的方法,就是使用函數(shù)參數(shù)。
由于我們買水果(無論是西瓜、還是柚子)的功能都是一樣的,所以我們可以寫一個買水果函數(shù),買水果函數(shù)定義了買一個水果的流程,當我們使用這個函數(shù)的時候,我們只要告訴這個函數(shù)我們要買什么水果,函數(shù)就可以根據(jù)你告訴他的水果名,去買對應(yīng)的水果。
買水果函數(shù)的代碼如下:
def 買水果函數(shù)(水果名):
for 水果店 in (鮮豐水果、四季水果和路邊攤):
if 水果店打折:
買[水果名]
else:
與老板講價
if 打折成功 and 打折力度<=5:
買兩個[水果名]
elseif 打折成功 and 打折力度 > 5:
買一個[水果名]
else:
不吃了。
買水果函數(shù)(西瓜)#讓電腦去買西瓜
買水果函數(shù)(柚子)#讓電腦去買柚子
在python中想使用函數(shù)參數(shù),只需要在函數(shù)定義的時候,在括號里面加上參數(shù)即可,我們這里的參數(shù)就是'水果名'。在函數(shù)體中代碼可以使用函數(shù)參數(shù)。
在調(diào)用函數(shù)的時候,把一個變量或者常量寫在函數(shù)名后面的括號里面,傳給函數(shù)。
注意,若是存在多個參數(shù),函數(shù)定義和調(diào)用函數(shù)的參數(shù)順序一定要一致。
在python中,還存在默認參數(shù)、關(guān)鍵字參數(shù)等稍微高級一點的使用方式,舉個例子,不詳細說明了。
def sum(a, b = 0,c = 1):#b/c是默認參數(shù)
return a+b+c
func(1,0,1)
func(1)
func(1,c=1)
這三個func調(diào)用的結(jié)果都是一樣的。
5 模塊
剛才我們已經(jīng)講了函數(shù),函數(shù)就是把代碼整合起來。而模塊,就是把更多代碼整合起來。
模塊和函數(shù)的引入是為了解決類似的問題:管理代碼段,并且給他們起一個名字。
一般來說,一把模塊就是一個py文件,里面可能包括很多函數(shù),也可以包括一些類的定義(這個我們后面講哦)。
模塊的引入就是為了將代碼更好地管理。
我們把代碼放在一個py文件中,這個py文件就是一個模塊,在其他py文件里面,我們就可以使用import關(guān)鍵字,將模塊引入。
比如,我們現(xiàn)在有一個a.py文件,里面有一些函數(shù),比如buyxigua,buyyouzi等,若我們想在b文件中使用這些函數(shù),那么我們必須在使用前,導(dǎo)入a模塊。
導(dǎo)入一個模塊并使用模塊里面的函數(shù)有很多方法,我把常見的方法列在下面.
方法一:
import a
a.buy_xigua()
a.buy_youzi()
這種方法導(dǎo)入模塊a,然后通過 模塊.函數(shù)調(diào)用函數(shù)。
方法二:
from a import *
buy_xigua()
buy_youzi()
這個方式導(dǎo)入模塊a中的所有內(nèi)容,可以直接使用。
方法三:
from a import buy_xigua,buy_youzi
buy_xigua()
buy_youzi()
這個方式導(dǎo)入模塊a中的指定內(nèi)容,可以直接使用,一般這種方法在軟件開發(fā)過程中使用的比較多,原因是我們只把需要的內(nèi)容導(dǎo)入使用,不需要的不導(dǎo)入。(按需使用別浪費,在哪里都是個好習(xí)慣,深層原因超出教程范圍)
6 類和對象
類和對象的概念,對于沒有接觸過編程的同學(xué)來說,可能稍微有些不好理解。我記得當年第一次接觸這個概念,也迷糊了段時間。
之前,我們介紹過'變量'。變量的引入,是為了描述程序內(nèi)的記憶單元。一個變量可以是一個數(shù)字,也可以是一個字符串(比如設(shè)置一個變量 名字='水風')。
但是,有些東西需要使用很多變量共同描述才可以。比如,一個買西瓜的人。買西瓜的人有很多特征,比如:名字、存款,持有西瓜數(shù)量。此外,買西瓜的人也有一些行為,比如
買西瓜這個行為。為了實現(xiàn)
買西瓜的人這個功能,我們引入類和對象的概念。注意,類/對象引入想解決的問題和函數(shù)、模塊所解決的問題不一樣。函數(shù)和模塊的引入更多的是為了管理代碼,而類/對象的引入是為了把狀態(tài)和行為封裝在一起。
那么,類和對象分別是什么意思呢。類是我們定義的一種東西有哪些狀態(tài)和行為,比如 買西瓜的人有狀態(tài)和行為,我們提前定義好他們,類的概念是一種虛擬的。而對象就是代碼在執(zhí)行的過程中,去動態(tài)創(chuàng)建、生成的一個實體。
比如 買西瓜的人
我們之前寫了買西瓜的流程,現(xiàn)在我們想創(chuàng)建兩個買西瓜的人,每人負責一天,這樣買西瓜的人也可以休息了。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03