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], )、list.pop([index])、list.remove([data])、list.sort([reverse=True])方法的使用;len()、sorted(, [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(, )和type(, )的区别与使用等。

#-----------------------------------------------------------------------
#可变个数参数列表
#通过"*para_list"来实现,通过元组将可变参数列表封装并传递
#判断参数类型的内置函数:
#    isinstance(, )
#    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

你可能感兴趣的:(Python基础)