Python基礎入門

學習Python的秘訣:多敲代碼 + 學會使用搜索引擎

一、搭建編程環境

工欲善其事,必先利其器,要想學習一門技能,先找到一樣趁手的工具,我這裡推薦兩種:

1)側重項目開發:Anaconda + PyCharm

參考的書籍《Python編程從入門到實踐》、《父與子的編程之旅 與小卡特一起學Python》;更多的基礎語法詳見菜鳥python3教程 或Python 2基礎教程 | 菜鳥教程,如果實在弄不懂如何搭建編程環境,也沒關係,學習python最重要是實踐,也可以先敲代碼,我這裡推薦一個python2.7的在線編程環境:Execute Python Online 或者python3的在線編程環境:Online Python3 Compiler - Online Python3 Editor - Online Python3 IDE - Python3 Coding Online - Practice Python3 Online - Execute Python3 Online - Compile Python3 Online - Run Python3 Online

上面Python2和Python3隻需要選一個來學就好。

2)側重數據分析:Anaconda + Jupyter notebook

我下面都會使用Anaconda + Jupyter notebook,編程環境是python3,具體的安裝方法我推薦猴子老師的初學python者自學anaconda的正確姿勢是什麼??jupyter notebook 可以做哪些事情?,更多的基礎語法詳見菜鳥python3教程,參考的書籍《Python編程從入門到實踐》、《父與子的編程之旅 與小卡特一起學Python》。

二、Python的四個關鍵點

1、數據的基本類型

數據類型有:字元串(String)、數字(Number)、容器、布爾、空值(None)

(1)字元串(String)

字元串:就是一系列字元。在Python中,用引號括起的都是字元串,其中的引號可以是單引號,也可以是雙引號,如下所示:

(2)數值(Number)

python3中常見的數字類型為int(整數),float(浮點數),bool(布爾值),complex(複數)。

(3)容器

① 列表(List)

列表的優勢在於有序且可以修改,方便查詢、增加、修改和刪減數據。

② 元組(Tuple)

Python的元組與列表類似,不同之處在於元組的元素不能修改。

元組使用小括弧,列表使用方括弧。

③ 集合(Sets)

集合是一個無序不重複元素的序列

④ 字典(Dictionary)

字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括弧({})中。字典的好處就是它的每一個關鍵字都對應一個值,就像我們查英語字典一樣。

(4)布爾(Booleans)和空值(None)

2、函數

函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的代碼段。函數能提高應用的模塊性,和代碼的重複利用率。

定義函數時使用def語句:

函數不可變的數據類型和可變數據類型實例:

變數作用域:

Python的作用域一共有2種:全局作用域,局部作用域。

定義在函數內部的變數擁有一個局部作用域,定義在函數外的擁有全局作用域。 局部變數只能在其被聲明的函數內部訪問,而全局變數可以在整個程序範圍內訪問。

3、條件判斷

條件判斷中的核心都是一個值為True或False的表達式,這種表達式被稱為條件測試,其主要應用就是篩選出我們要的結果,其執行過程如圖所示:

4、循環

循環有兩種:for循環while循環,常用的語句是for循環語句。

for循環用於針對集合中的每個元素都一個代碼塊,是批量處理數據,可以把容器中每一個數據都按照特定的規則進行重複處理,而while循環不斷地運行,直到指定的條件不滿足為止。在循環中常用到break語句和continue語句,如下實例。

Continue和break語句用於退出循環:

三、類(Class)

類: 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。

四、模塊和包

模塊是擴展名為.py的文件,包含所有你定義的函數和變數的文件。模塊可以被別的程序引入,以使用該模塊中的函數等功能。

導入模塊常用的一種導入方法:只需編寫一條import語句並在其中指定模塊名,就可在程序中使用該模塊中的所有函數。

模塊包括Python內置模塊和第三方模塊(或自己編寫的模塊),下面列出了我自己安裝Python3的內置模塊路徑:

下面的代碼是導入第三方模塊pandas的一個演示,我以讀取存放在自己電腦

D:Python
otebook 上的一個叫 B9 USB QV數據.xlsx的文件為例:

五、常用數據結構

1、隊列(queue)

隊列就像在銀行排隊辦理業務,新來的人在隊列尾部加入,叫做入隊。辦理完業務的人從隊列首部離開隊列,叫做出隊。

口訣:先入先出

2、棧(stack)

棧就像儲錢罐,往儲錢罐里丟入一枚硬幣,就是入棧,後面丟入的硬幣總是在最上面。

口訣:先入後出

3、排序字典OrderedDict

排序字典能夠按照字典中插入key的順序,對字典進行排序。

4、計數器Counter

Counter(計數器):用於追蹤值的出現次數。

從結果中可以看出,在統計出現次數最多的3個字時,原字元串中所有標點符號都屬於字元串,因此也會計算在內,可以採用切片+拼接的方法,刪除poem中的標點符號再來統計:

附一張python學習的腦圖總結:

附源碼:

# coding: utf-8# # 字元串(String)# In[1]:# 定義字元串nameStr = "我"gameStr = "愛吃雞遊戲"# 將字元串合併print("使用+將字元串合併:",nameStr + gameStr)# In[2]:# 用%s格式化字元串str = "我叫%s,我會%s,還喜歡%s" % ("馬雲","賺錢","拍電影")print(str)# # 數值(Number)# In[3]:# 1)整形:一天有24小時day = 24# 2)浮點型:我用微信支付9.9元money = 9.9# # 容器-列表(List)# In[4]:"""容器:列表(List)"""# 定義列表:富豪榜nameList = ["馬化騰","馬雲","王健林","李彥宏"]# 列表的長度nameLen = len(nameList)print("富豪數目:",nameLen)# In[5]:#1)容器操作:增加元素nameList.append("劉強東")print("增加一個元素",nameList)# In[6]:#2)容器操作:刪除元素del nameList[2]print("刪除第三個元素:",nameList)# In[7]:#3)容器操作:查詢:使用下標索引來訪問列表中的值,下標從0開始name1 = nameList[0]print("查詢第一個元素:",name1)# In[8]:#4)容器操作:修改:直接指定下標的值print("修改前第一個元素是:",nameList[0])nameList[0] = "王思聰"print("修改後第一個元素是:",nameList[0])# In[9]:# 此時列表情況print(nameList)# # 容器-元組(Tuple)# In[10]:"""容器:元組(Tuple)是一個不能修改值的列表,用小括弧標識"""# 定義元組:一組人名namesTuple = ("馬雲","馬化騰","王健林")# In[11]:#1)訪問單個元組元素aTuple = namesTuple[2]print("單個元組元素:",aTuple)#2)使用for循環訪問所有元組元素print("
所有元組元素:")for allTuple in namesTuple: print(allTuple)# In[12]:#3) 元組中的元素值是不允許修改的,如果修改將會報錯#namesTuple[2] = "王思聰"#print(namesTuple)# # 容器-集合(Sets)# In[13]:"""容器:集合(Sets)是一個沒有重複元素的容器"""# 定義集合:6家公司的股票gafataSets = {"谷歌","蘋果","Facebook","亞馬遜","騰訊","阿里巴巴","阿里巴巴"}print(gafataSets)# In[14]:#1)容器操作:增加#定義一個空的集合stockSets = set()# 使用update增加元素stockSets.update(["騰訊","阿里巴巴","京東"])print(stockSets)# In[15]:#2)容器操作:使用discard刪除stockSets.discard("京東")print(stockSets)# In[16]:#3)容器操作:查找txBool="騰訊" in stockSetsprint(txBool)# In[17]:#4)容器操作:修改# 第1步:先刪除stockSets.discard("京東")# 第2步:再添加stockSets.update(["百度","京東"])print(stockSets)# # 容器-字典(Dictionary)# In[18]:"""容器-字典(Dictionary)"""# 定義字典:點餐編號和姓名的映射關係coffeeDic={"001":["馬雲",34,"拿鐵","大杯"], "002":["馬化騰",52,"卡布奇諾","中杯"], "003":["李彥宏",49,"摩卡","小杯"], "004":["劉強東",43,"拿鐵","中杯"]}# In[19]:#1)容器操作:增加coffeeDic["005"]=["王思聰",30,"摩卡","中杯"]print(coffeeDic)# In[20]:#2)容器操作:刪除del coffeeDic["005"]print(coffeeDic)# In[21]:#3)容器操作:查詢,根據點餐編號查詢每個人喜歡的口味valueList = coffeeDic["001"]print(valueList)# In[22]:#4)容器操作:修改print("修改之前,點餐信息:",coffeeDic["003"])coffeeDic["003"]=["李彥宏",49,"摩卡","大杯"]print("修改之後,點餐信息:",coffeeDic["003"])# In[23]:print(coffeeDic)# # 布爾類型# In[24]:age = 10if age == 5: print("判斷條件為True")else: print("判斷條件為False")# # 空值None# In[25]:age = Noneif age == None: print("年齡是空值")else:print("年齡不是空值")# # 條件判斷案例# In[1]:# 《摔跤吧,爸爸》豆瓣評分scoreNum=9.1if scoreNum >=8: print("我要看這部電影")else: print("電影太爛,不去看了")# In[2]:# 邊界條件:邏輯判斷# 定義列表nameList = ["王思聰","馬雲","王健林","馬化騰"]if "王思聰" not in nameList: print("列表中沒有叫王思聰的人")else: print("列表中有個叫王思聰的人")# In[3]:# 多個條件判斷age = int(input("輸入狗狗的年齡,按Enter鍵獲取對應人類的年齡:"))if age < 0: print("狗狗年齡不能小於0")elif age == 1: print("相當於14歲的人")elif age == 2: print("相當於22歲的人")else: human = 22 + (age - 2) * 5 print("相當於人類年齡",human)# # 如何使用循環批量處理數據?# # 案例1:抽查產品尺寸# In[1]:# 重複性工作print("第1次抽查")print("第2次抽查")print("第3次抽查")# In[2]:# 使用for循環實現重複性工作checkList = ["第1次抽查","第2次抽查","第3次抽查"]for i in checkList: print(i)# In[3]:# 使用while循環times = 1while times < 4: print("抽查次數:",times) times += 1# # 案例2:清洗GAFATA股票數據# In[4]:"""定義字典:6家公司(GAFATA)的股票key是公司名稱,value是股票代碼"""gafataDic = {"谷歌":"GOOGLE","蘋果":"Apple","Facebook":"fb", "亞馬遜":"amzn","騰訊":"HK:00700","阿里巴巴":"baba"}# 將股票代碼全部大寫for key,value in gafataDic.items(): # items()返回一個鍵-值對列表 # 對股票代碼轉換成大寫 newvalue = value.upper() # 將轉換後新的股票代碼賦值給key gafataDic[key] = newvalue print(gafataDic)# # continue用於跳出當前循環# In[5]:for key,value in gafataDic.items(): if(key=="蘋果"): continue # 停止key=="蘋果"這一步,其他都執行 print("當前公司:",key,"當前股票代碼:",value)# # break用於退出整個循環# In[6]:# 查找蘋果公司的股票代碼number = 0for key,value in gafataDic.items(): number = number + 1 if (key == "蘋果"): print("查找",key,"公司的股票代碼是:",value) break print("當前公司是:",key,"當前股票代碼",value)# # 如何自定義函數?# In[1]:"""定義函數函數的功能:求出兩個數相乘的結果輸入:x,y是兩個要相乘的數輸出:兩個數相乘的積"""def mul(x,y): z = x * y return z# # 如何使用函數?# In[2]:"""由上面自定義函數可知:只需要給函數add()提供兩個參數,即可求出它們的積"""a = 2b = 3c = mul(a,b) print("2*3=",c)# # 函數參數:不可變數據類型# 字元串、數字,元祖這3種是不可變數據類型,其他的都是可變數據類型# In[3]:# 定義函數:改變數據的值def changeIn(a): a = a + 1 return a"""使用函數:參數是不可變的數據類型(字元串、數字、元組)傳遞的只是該數據類型的值(相當於複製一份) """b = 1print("調用函數之前b的值=",b)c = changeIn(a=b)print("調用函數之後b的值=",c)# 從結果看出,調用函數前後的值雖然不同,但數據類型不變都是整形# # 函數參數:可變數據類型# In[4]:# 定義函數:改變字典的值def changeDic(inputDic): inputDic["校花"] = ["奶茶妹妹"] return inputDic """使用函數參數是可變數據類型:傳遞的是該變數的引用地址"""nameDic = {"阿里巴巴創始人":"馬雲","京東CEO":"劉強東"}print("調用函數之前的字典:",nameDic)changeDic(inputDic=nameDic)print("調用函數之後的字典:",nameDic)# # 變數作用域# Python的作用域一共有2種:全局作用域,局部作用域。# 定義在函數內部的變數擁有一個局部作用域,定義在函數外的擁有全局作用域。 局部變數只能在其被聲明的函數內部訪問,而全局變數可以在整個程序範圍內訪問。# In[5]:# 變數作用域def aStr(): aStr = "他強任他強,清風拂山崗,他橫任他橫,明月照大江." numaStr = len(aStr) # len()統計字數 print(numaStr)aStr() # aStr為全局變數print(numaStr) # numaStr為局部變數,只能在函數aStr()內部使用# ## 類的使用# In[1]:# 創建類class User(): """一次模擬問候用戶的嘗試""" def __init__(self,name,sex,age): """初始化屬性name,sex,age""" self.name = name self.sex = sex self.age = age def describe_user(self): """描述用戶的方法""" print(self.name + " " + self.sex + " " + str(self.age) + "歲") def greet_user(self): """問候用戶的方法""" print(self.name + "您好!吃了么?") # In[2]:# 根據類創建實例並調用類的方法ma = User("馬雲","男",54)ma.describe_user()# In[3]:ma.greet_user()# # 什麼是模塊# # Python內置模塊使用# In[1]:"""Python內置模塊"""# 第1步引入模塊import sys# 使用模塊中的函數、屬性pathList = sys.pathprint("Python路徑為:
",pathList)# # 第三方模塊使用# In[2]:"""使用第三方模塊:pandaspandas是數據分析工具"""# 引入模塊import pandas as pd# In[3]:#文件路徑(在本地運行時替換成文件實際路徑)fileNameStr = "D:\Python\notebook\B9 USB QV數據.xlsx"# In[4]:"""pandas的ExcelFile類支持讀取存儲在Excel2003(或更高版本)中的表格型數據通過parse讀取到DataFrame"""# 導入excel文件xl = pd.ExcelFile(fileNameStr)sizeDf = xl.parse("Sheet1")# In[5]:print(sizeDf)# ## 介紹Python的collections包,了解常用的數據結構# ## 隊列(queue)# 隊列就像在銀行排隊辦理業務,新來的人在隊列尾部加入,叫做入隊。辦理完業務的人從隊列首部離開隊列,叫做出隊。# 口訣:先入先出# In[1]:#導入collections包from collections import deque# In[2]:# 定義隊列:給排隊的人編號queue = deque(["001","002","003","004","005"])# In[3]:# 入隊:新來一人在隊尾排隊queue.append("006")print(queue)# In[4]:# 出隊:從隊列頭部刪除一個元素queue.popleft()# In[5]:# 此時隊列的情況print(queue)# # 棧(stack)# 棧就像儲錢罐,往儲錢罐里丟入一枚硬幣,就是入棧,後面丟入的硬幣總是在最上面。# 口訣:先入後出# In[6]:# 定義棧: 瀏覽個人知乎主頁順序stack = deque(["知乎動態","知乎回答","知乎文章"])# In[7]:# 入棧:在棧頂加入元素stack.appendleft("知乎專欄")print(stack)# In[8]:# 從棧底刪除元素stack.pop()print(stack)# # 排序字典OrderedDict# In[9]:"""OrderedDict:按照插入key的順序,對字典進行排序"""from collections import OrderedDict# In[10]:# 定義有序字典gafataOrDic = OrderedDict({"谷歌":"GOOGLE","蘋果":"Apple","Facebook":"fb", "亞馬遜":"amzn","騰訊":"HK:00700","阿里巴巴":"baba"})gafataOrDic# # 計數器Counter# In[11]:"""計數器"""from collections import Counterpoem = "花舞花落淚,花開花瓣飛。花開為誰謝,花謝為誰悲。"cDict = Counter(poem)cDict["花"] # 統計"花"字出現了幾次# In[12]:# 統計出現次數最多的3個字cDict.most_common(3)# In[13]:# 採用切片+拼接的方法,刪除poem中的標點符號poem2 = poem[:5] + poem[6:11] + poem[12:17] + poem[18:23]print("poem2: ",poem2)# In[14]:# 再統計出現最多的3個字c2Dict = Counter(poem2)c2Dict.most_common(3)

推薦閱讀:

Python Generator漫談
在 Pycom 使用 Python + Micropython + MQTT 進行物聯網編程
Python 字元編碼的二三事
乾貨|Scikit-Learn的五種機器學習方法使用案例(python代碼)
文獻引文分析利器 HistCite 詳細使用教程(精簡易用免安裝版本 HistCite Pro 首發頁面)

TAG:Python | Python入门 |