Python語法學習測試記錄(Python編程從入門到實踐——Eric Matthes著)

:工作之餘,學習一門腳本語言,選擇了當下火熱的Python。2020-05-27日開始學習Python基礎語法,期間參考《Python編程從入門到實踐——Eric Matthes著》一書,對書中涉及的部分語法、python關鍵字、內置函數、庫等進行試驗,在此做一簡單記錄,以備往後溫故知新。在函數/函數參數中,[]表示可選;<>表示必選;xxx.fun()表示對象方法;fun()表示內置函數。

目錄

【1】2020-05-27:Hellow Python

【2】2020-05-27:My First Logic Test

【3】2020-05-28:簡單數據類型

【4】2020-05-28:列表簡介與列表元素增、刪、改、排序測試

【5】2020-05-29:列表遍歷、for循環、range()內置函數、列表解析、切片、深淺拷貝、元組

【6】2020-05-29:對於【2】遍歷IP地址的代碼重構

【7】2020-05-30:對於if條件語句以及相關關鍵字的使用

【8】2020-05-30:字典定義與遍歷、增刪改查、字典與列表嵌套

【9】2020-05-30:while、continue、break的使用,input()的使用以及字典的鞏固

【10】2020-05-30:python函數、模塊、參數列表、以及相關內置函數的使用

【11】2020-05-31:基於前面所學,編寫的基礎版本圖書管理系統

【12】2020-05-31:Python中類的使用

【13】2020-05-30:文件讀寫、try...except異常處理,JSON文件操作

【14】2020-06-01:測試代碼,主要是Python的測試類簡單使用瞭解

【15】Python的常用方法、函數、庫、類等總結(時常更新):

1、常見字符串類型判斷方法:

2、需求驅動學習之子串判斷:

3、需求驅動學習之迭代器:

4、Pygame遊戲庫

5、Matplotlib數學繪圖庫、Pygal繪圖庫

 


【1】2020-05-27:Hellow Python

github: hello_python.p

涉及:print()內置函數的使用。

【2】2020-05-27:My First Logic Test

github: ip_addr_loop.py

涉及:import time、while循環、time.sleep()、str()內置函數的使用。

【3】2020-05-28:簡單數據類型

github: test_03_str_int_float.p

涉及:字符串的定義('',“”,'\'三符號在字符串表達中的使用方式);string.title()、string.upper()、string.lower()的使用;字符串的拼接“+”的使用;刪除多餘空白方法lstrip()、rstrip()、strip()的使用;+、-、*、/、**(乘方)、%運算符的使用;浮點數、整數、字符串的混合使用與運算等,以及python之禪。

【4】2020-05-28:列表簡介與列表元素增、刪、改、排序測試

github: test_04_list_operator_1.py

涉及:列表的格式與定義;list.append([data])、list.reverse()、list.insert([index], <data>)、list.pop([index])、list.remove([data])、list.sort([reverse=True])方法的使用;len(<list>)、sorted(<list>, [reverse=True])內置函數的使用;del、while、if、or等關鍵字的使用。

【5】2020-05-29:列表遍歷、for循環、range()內置函數、列表解析、切片、深淺拷貝、元組

github: test_04_list_operator_2.py

涉及:二維列表的格式與定義、訪問;全局變量和局部變量的使用以及注意點描述;def、global、if、is、“for ... in ... :”、關鍵字使用;list()、range(start, end [,step])、min()、max()、sum()、id()、hex()等內置函數的使用;列表切片list[start:end]list[start:]list[:end]list[:]以及列表解析:list = [(value ** 2) for value in range(1,20,2)]for value in list[-10:]的靈活應用;列表的引用(淺拷貝)和副本(深拷貝)測試;元組和局部變量賦值的差異以及id()查看差異的方法測試。

【6】2020-05-29:對於【2】遍歷IP地址的代碼重構

github: test_04_list_ip_addr_loop.py

涉及:for value in range():在【2】例程代碼重構中的使用。

【7】2020-05-30:對於if條件語句以及相關關鍵字的使用

github:test_05_if_elif_else.py

涉及:if、if ... elif ... else語句的簡單測試,關於innot inif語句中的使用,以及in配合for循環的使用;isand not ... is ...測試以及is==的區別(is表示判斷對象id是否相等,==表示判斷對象值是否相等),對應的 not ... is ... 和 != 也有類似區別;TureFlase的測試以及其對象類型爲BOOL,不像C中BOOL其實就是整型數據。

【8】2020-05-30:字典定義與遍歷、增刪改查、字典與列表嵌套

github:test_06_dictionary.py 【2020年6月1日00:02:55使用json進行優化】

涉及:字典的語法,key-value格式,key是唯一的,而value是不唯一的,不同key可能有同一個value,key一般取整數、字符串等,而value可以是任何對象類型(數字、字符串、列表、字典等);字典的遍歷:dict.items()、key的遍歷:dict.keys()、value的遍歷dict.values()、由於value涉及重複,因此會用set()內置函數剔除重複元素,而字典是無序的,可以通過sorted()內置函數對dict.keys()進行排序等操作,基本操作如下(詳細測試見github):

#***********************************************************************
#字典索引:    dict[key]
#字典遍歷:
#	遍歷key-vlaue鍵值對--> for k,v in dict.items():
#	遍歷key-->             for k in dict.keys():
#	遍歷value-->           for v in set(dict.values()):
#我們可以用
#	if xxx not in dict.keys(): 
#	if xxx in dict.keys():
#	來確定某個key是否在字典的現有key裏
#	因爲dict.keys()、dict.values()實際上都是獲取一個列表
#set()內置函數用來提供一個集合,集合中所有元素都是唯一的,即剔除重複值
#***********************************************************************

【9】2020-05-30:while、continue、break的使用,input()的使用以及字典的鞏固

github:test_07_while_input.py

涉及:while、continue、break的相關關鍵字(基本沒啥看的,只是和其他語言的格式不一樣罷了),input()獲取用戶輸入的函數測試,input([User input information])函數用於獲取用戶輸入,返回值爲用戶輸入string,括號內可以輸出提示信息,提示信息後爲用戶輸入空間,回車結束,直接回車則返回""。此外涉及int()、float()、long()等內置函數。這一節主要是一些結構:列表、字典、循環、遍歷等的綜合應用,鞏固了之前所學。

【10】2020-05-30:python函數、模塊、參數列表、以及相關內置函數的使用

github:test_08_function.py

涉及:python函數與def、return等 關鍵字,模塊導出與import、as等關鍵字;默認形參、可變參數列表、制度參數列表(通過完全副本實現,導致效率低下,所以一般由函數自行保證內部只讀); isinstance(<value>, <type>)和type(<value>, <type>)的區別與使用等。

#-----------------------------------------------------------------------
#可變個數參數列表
#通過"*para_list"來實現,通過元組將可變參數列表封裝並傳遞
#判斷參數類型的內置函數:
#    isinstance(<value>, <type>)
#    type(<value>, <type>)
#    如:isinstance(10,int)判斷10是否是int的整數,返回True
#    isinstance和type的區別在:
#    1、type是用來獲取類型的,isinstance是用來判斷類型的;
#    2、type() 不會認爲子類是一種父類類型,不考慮繼承關係,
#    而isinstance() 會認爲子類是一種父類類型,考慮繼承關係
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
#模塊導入、函數導入:
#    有一個文件:module_name.py
#    "import module_name" 即可導入該文件(模塊)
#    "module_name.function()"來使用其中的函數
#    要是指向導入部分函數,則可以使用:
#    "from import module_name fun1, fun2, fun3, ..."
#    按如上方式導入個別函數,則可以直接使用函數名,不需要"module_name." 
#    若導入個別函數與本文件函數名衝突,
#    可在導入的時候用as關鍵字爲該導入的函數指定別名,
#    如果不想用"module_name."調用函數,但是所有函數都要導出,
#    不可能一個個導出,則使用:"import module_name *"來導出所有函數
#    同樣可以給模塊指定別名,以更合適的名字來操作模塊中的函數
#    指定別名後,原名字不能直接使用,除非重新導入原名字
#    規範:import儘量放在文件開頭(不包括開頭註釋等)
#-----------------------------------------------------------------------

【11】2020-05-31:基於前面所學,編寫的基礎版本圖書管理系統

github:test_08_book_management.py

涉及:①函數/方法:前面所學print()、input()、int()、float()、str()、abs()、sleep()、isinstance()、str.strip()、str.upper()、dict.keys()、dict.items()、dict.values()、value.isdigit()等系統內置函數/方法、庫函數、以及自定義函數;②關鍵字:if、elif、else、for、in、while、return、def、continue、break、not、or、and、False、True、as、import、del、from、is、try、except等關鍵字;③數據類型:整數、浮點數、字符串、列表、字典、以及多種數據結構的嵌套使用;④知識點:主要是列表、字典的結構組織方式、操作方法以及函數的定義與使用。

【12】2020-05-31:Python中類的使用

github:test_09_class.py、test_09_class_equip.py、test_09_class_role.py

涉及:Python2.7和Python3.8中關於父類、子類的定義與使用,包括__init__()初始化函數、self的使用,子類繼承父類,子類重寫父類方法、基於模塊化的類,類的import和標準類庫collections.OrderedDict的使用等。

#-----------------------------------------------------------------------
#類的繼承:
#    1、B繼承A則必須保證A在B之前聲明
#    2、父類A也稱爲超類(supercalss),因此在子類的__init__()中,
#    應該調用super().__init__()先完成對父類的初始化,再初始化子類自己
#    3、類名用駝峯命名法,函數用下劃線命名法
#
#    4、python3.8父類和子類創建語法:
#    class Father():
#        def __init__(self, pa, pb, pc)
#        ......
#    class Son(Father):
#        def __init__(self, pa, pb, pc, pd, pe)
#            super().__init__(pa, pb, pc)
#        ......
#
#    5、python2.7父類和子類創建語法:
#        (創建子類會給父類傳遞self,幫助python把父子類關聯起來):
#    class Father(object):
#        def __init__(self, pa, pb, pc)
#            ......
#    class Son(Father):
#        def __init__(self, pa, pb, pc, pd, pe)
#            super(Son, self).__init__(pa, pb, pc)
#            ......
#-----------------------------------------------------------------------

【13】2020-05-30:文件讀寫、try...except異常處理,JSON文件操作

github:文件打開讀寫操作、異常處理、JSON數據dump和load操作

涉及:①文件的打開、關閉、讀寫等操作:open()、close()、read()、write()、readline()、readlines();文件路徑注意點(對於Windows中的路徑符號'\'可能會被識別爲轉義符號,因此可能需要自行對'\'進行轉義);關於"with open() as obj"操作的使用,replace()函數的使用、read()和readlines()的區別,前者返回字符串,後者返回列表,對於字符串可用split()函數,對於列表就用不了了。②異常的處理,包括try、except、else、pass的使用,split()函數的使用,以及常見異常:FileNotFoundError、ZeroDivisionError、TypeError、NameError、ValueError等;③基於JSON類庫的dump和load操作,可以用來保存數據到文件中,或者從文件中解析數據。保存是帶格式的,解析要格式對應。

優化以往代碼(在退出時使用json類保存書店的字典信息,在啓動時從保存的json文件中再按字典將歷史數據讀取出來,注意保存和讀取時指定編碼方式,此外讀取時先讀取到字符串中,再解析字符串):

#-----------------------------------------------------------------------
#功能函數:退出書店,系統總入口
#-----------------------------------------------------------------------
def book_quit_sys(customer_name, file_name):
    global g_book_set
    book_set = g_book_set
    try:
        with open(file_name, 'w', encoding='utf-8') as file_object:
            print("-------------------------------------")
            print(customer_name + "正在退出圖書管理系統,請稍等!")
            json.dump(book_set, file_object)
            print("-------------------------------------")
            print("json dump dictionary to " + file_name + " succeed!")
    except FileNotFoundError:
        print(file_name + "file or dirctory is not exist")


#-----------------------------------------------------------------------
#功能函數:進入書店,初始化系統總入口
#-----------------------------------------------------------------------       
def book_system_init(customer_name='', file_name=''):
    global g_book_set
    try:
        with open(file_name, 'r', encoding='utf-8') as file_object:
            print("-------------------------------------")
            print(customer_name + "正在初始化圖書管理系統,請稍等!")
            print("-------------------------------------")
            
            json_str = file_object.read()
            if len(json_str) > 0:
                g_book_set = json.loads(json_str)
                print("json load dictionary to " + file_name + " succeed!")
            else:
                print("沒有庫存數據!!")
    except FileNotFoundError:
        print(file_name + "file or dirctory is not exist")

 

【14】2020-06-01:測試代碼,主要是Python的測試類簡單使用瞭解

github:基於圖書管理系統的python測試類簡單使用

涉及:Python的unittest類的使用。

#-----------------------------------------------------------------------
#圖書管理系統的簡單測試用例
#覈實結果爲 a == b    :assertEqual(a,b)
#覈實結果爲 a != b    :assertNotEqual(a,b)
#覈實結果爲 True      :assertTrue(a)
#覈實結果爲 False     :assertFalse(a)
#覈實item在list中     :assertIn(item,list)
#覈實item不再list中   :assertNotIn(item,list)
#每一個函數都可以創建多個用例,避免程序修改後需要手動一個個去測試
#但是這種測試方法是白盒測試,針對函數/類,可以直接訪問程序的數據
#-----------------------------------------------------------------------

Python基礎語法已經學習完畢(2020年6月1日22:52:48)

【15】Python的常用方法、函數、庫、類等總結(時常更新):

1、常見字符串類型判斷方法:

s.isalnum() #所有字符都是數字或者字母,爲真返回 Ture,否則返回 False。
s.isalpha() #所有字符都是字母,爲真返回 Ture,否則返回 False。
s.isdigit() #所有字符都是數字,爲真返回 Ture,否則返回 False。
s.islower() #所有字符都是小寫,爲真返回 Ture,否則返回 False。
s.isupper() #所有字符都是大寫,爲真返回 Ture,否則返回 False。
s.istitle() #所有單詞都是首字母大寫,爲真返回 Ture,否則返回 False。
s.isspace() #所有字符都是空白字符,爲真返回 Ture,否則返回 False。

2、需求驅動學習之子串判斷:

#需求驅動學習:
#1、查找字符串裏是否存在指定子串,如果指定begin和end範圍,則檢查是否包含在指定範圍內,
#如果包含子字符串返回開始的索引值,否則返回-1。這個會在刪除指定串開始到指定串之間的文本時會用到
#(比如最近項目需求刪除源文件中函數頭部統一格式的註釋信息,只保留對外頭文件的一份註釋,
#由於適配層文件較多,這種情況就可以寫個腳本批量操作,節省許多不必要的時間),雖然正則可能會更方便,
#但是暫時不熟悉正則~.~,改天做個學習專題。

import string
string.find(str, beg=0, end=len(str))

3、需求驅動學習之迭代器:

#2、迭代器模塊( 爲高效循環而創建迭代器的函數)
#全排列和全組合函數
from itertools import permutations
from itertools import combinations

應用參見基於撲克的24算式

關於itertools的更詳細描述與使用參見itertools --- 爲高效循環而創建迭代器的函數

4、Pygame遊戲庫

#-----------------------------------------------------------------------
#前期工作:確保python安裝、pygame安裝
#升級pip(不升級也可以,只要確保安裝了pip即可)
#    python -m pip install --upgrade pip
#查看version
#    python -m pip --version
#執行下載安裝pygame模塊操作
#    python -m pip install pygame
#關於pygame的使用可參考:
#    https://www.pygame.org/
#-----------------------------------------------------------------------

相關資料GITHUB 、 Pygame DOCS

《Python編程從入門到實踐》遊戲練習alien_invasion

5、Matplotlib數學繪圖庫、Pygal繪圖庫

#-----------------------------------------------------------------------
#前期工作:確保python安裝、matplotlib、pygal安裝
#升級pip(不升級也可以,只要確保安裝了pip即可)
#    python -m pip install --upgrade pip
#查看version
#    python -m pip --version
#執行下載安裝matplotlib、pygal模塊操作
#    python -m pip install matplotlib
#    python -m pip install pygal
#
#關於matplotlib的、pygal使用可參考:
#    https://matplotlib.org
#    https://matplotlib.org/contents.html
#    https://http://www.pygal.org
#-----------------------------------------------------------------------

相關資料matplotlib官網學習資料pygal官網學習資料(例程)

《Python編程從入門到實踐》相關練習:data_view

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章