通过百度网盘分享的文件:
链接:https://pan.baidu.com/s/12hT6P2kKaDe_8JeFwuQrrA
提取码:f12b
编程入门阶段,不用花时间学习和记忆细枝末节,这样会分散新手去理解核心逻辑的精力,而且很常用的知识也很容易被遗忘。真实世界里的编程不是闭卷考试,不需要把语言的细节全部记住,因为随时可以上网搜索和查阅技术文档。写多代码的人最后都会意识到,更重要的是具备搜索问题、发现答案和高效解决的能力,而不是成为记忆大师。
入门编程语言选择,建议Python、Java、JavaScript、C。其中优先选择Python,Python容易教,容易学,其一:语法简洁;其二:封装得更适合新手,对于新手来说,更应该先专注于理解逻辑,而不是计算机底层构造,Python无需了解指针和内存管理等计算机偏底层的内容;其三:内置函数非常多,已写好的工具较多。
Python的主要应用:脚本、网站后端、数据分析、机器学习等。
Java有完善的工具库和框架,稳定性高,适合做网站后端、安卓应用、桌面应用。
JavaScript主要应用在网站前端,也可以做网站后端、移动端、小程序。
C的好处自由度高,可以直接操作内存和计算机硬件,帮助了解底层构造。C的主要应用:硬件、嵌入式、操作系统等底层软件开发。
下图是以目的为导向的编程语言分类图。
总结:新手不用花过多时间纠结第一门语言学什么,因为很多编程语言的语法定义差别不大。只要学会第一门语言,之后的语言更容易上手。比起选择什么语言,更关键的是什么时候动起来。
名言:种一棵树最好的时间是十年前,其次是现在。
第一章 软件安装 一、Python解释器机器是无法直接读懂编写的Python代码的,而是需要一个解释器作为中间的翻译,把代码转换为字节码后再执行,Python的运行过程为翻译一行,执行一行。
一般常说的安装Python,本质上指的是安装Python解释器。
用于编写程序代码,代码编辑器种类非常多。
推荐使用PyCharm。
基于Windows安装 Python解释器 和 PyCharm代码编辑器。
1、Python解释器 安装Python官方网址: Welcome to Python.org
PyCharm官方网址:
注:上部分白色背景区域为专业版,需付费,仅30天免费试用期。下方黑色背景区域为社区版,为免费版本。
注:如果在项目文件夹内无法找到venv文件夹。
原因大概率是在新建项目步骤时,勾选了“先前配置的解释器”,而不是“使用此工具新建环境Virtualenv”。
虚拟环境的好处是可以让不同项目使用不同解释器版本、第三方库等,适用于程序员做多个项目以及团队合作的情况。但对新手来说,用虚拟环境不是必要的,所以如果没有venv文件夹,也不用专门回去修改。
三、新建Python代码文件
print(“爸!!”)
全英文输入法输入相应代码,符号也必须再因为状态下输入,否则会出错。
注:引号可以是双引号,也可以是单引号。引号以及引号内的内容为字符串。即使里面写的数字,也会被视为字符串。
打印显示 爸!!
注意:文件名要求以英文、数字、下划线组成;不要有空格、表情包等;
注:如果不知道错误原因,可以复制错误提示的最后一行到百度内,粘贴并搜索,能找到别人也遇到过相似的问题的处理方式和原因。(上图错误内容复制:SyntaxError: invalid character ‘(’(U+FF08))。
二、字符串与字符串连接符 1、字符串连接字符串之间用“+”号作为连接符。
例如:print(“Hello”+” World”+”!”)
2、单双引号转义print(“He said “good!””)
此行程序会出错,默认为前面两个引号为一组,后面两个引号为一组,第二个到第三个引号之间的内容会出错。
需要改为以下指令:
print(‘He said “good!”’)
print(“He said ‘good!’”)
如果一句话内有单引号和双引号,例如:
“He said “Let’s go!””
需要在引号前加反斜杠\,表示后面的引号为引号符号,是内容的一部分,不是结束符。
print(“He said \“Let\’s go!\””)
上一句打印出来是:He said “Let’s go!”
3、换行\n 表示换行
print(“Hello!\nHi!”)
打印出来的内容如下图,Hi!显示在下一行。
三个连在一起单引号或双引号。
""" """ ''' '''
变量名称规则:字母、数字、下划线组成;不能有除了下划线以外的符号;不能有空格;不能以数字开头;不能用双引号包括;变量区分大小写;不能使用专用关键字。
变量命名建议:不要使用拼英,使用英文单词组命名,Python3.0版本后支持中文变量,但是不建议使用中文变量,可能存在乱码。
Python变量命名约定俗成使用下划线命名法。
1、字母全部小写。
2、不同单词用下划线分隔。
例如:user_age user_gender
变量赋值操作用单等号,例如 my_love = 123456789
代码是一行一行执行的,故使用变量时,变量必须在此之前定义,否则会出错。
四、数学运算带双引号的数字是字符串 "6",
带小数点的数字都是浮点数 6.0,
不带小数的数字为整数 6。
加(+) 减(-) 乘(*) 除(/) 乘方(**)
在程序前添加 import math指令,可以将Python内置的函数库加载到程序内。
使用内置函数可以直接访问,例如 math.sin(1)
内置函数库网址:math --- 数学函数 — Python 3.13.0 文档
# 为注释符,仅当前行注释。
快捷键:ctrl+/
如果需要撤销注释,选择注释行,按 ctrl+/ 将撤销注释。
快捷键注释方法适用于一次性注释连续的多行或连续的撤销注释。
三引号注释,""" """,也适用于多行注释。
如果将多行注释前面加上变量名和等号,将代表将此内容赋值给一个变量。
str = """一二三四 五六七八 九十""" 六、数据类型Python语言在定义变量时,不需要指定变量的数据类型,Python程序会根据变量值,自动确定变量类型。
1、字符串 str字符串特点是被双引号或单引号包裹,例如:”字符串” ‘字符串’
例如: len(“Hello”),返回长度5,
len(“哟!”),返回长度2。
len(“\n”),返回长度1。\n为一个完整的转义符,即 换行。
“Hello”[4] 返回为 o
字符串编码从0起始。
2、整数 int、浮点数 float6 -32 整数 int
6.0 10.07 浮点数 float
3、布尔类型 bool只有以下两种值:
真 假
Ture False (区分大小写)
4、空值类型 NoneType只有一种值:None
表示完全没有值
None 不是0,不是空字符串””,也不是False。
当不确定变量数据类型时,可以使用type指令反馈变量类型。
执行input指令时,读取用户输入的数据。
== 比较运算符 等于。
!= 比较运算符 不等于。
条件判断语法结构:
执行语句需要缩进四个空格,如果不缩进,默认为条件语句已经执行结束。
下图表示多条件嵌套写法,注意缩进数量。
条件判断语句内可以使用连续的判断符号 if 0<= score <= 100:
三目运算符:是 if…else… 双分支结构的缩写形式。
格式: 结果1 if 条件 else 结果2
结果1:条件成立时返回的结果
结果2:条件不成立时返回的结果
例子: second_max = num1 if num1 > num2 else num2
判断num1是否大于num2,如果成立,则返回num1的值赋值给左边的变量,否则返回num2的值给左边的变量。
十、逻辑运算与(and) 所有条件为True,才会返回True;只要有一个为False,就为False。
或(or) 只要有一个条件为True,就会返回True;所有条件为False,才为False。
非(not) 操作对象为True,则返回Flase;操作对象是Flase,则返回True。
优先级顺序 not ——> and ——> or
也可以使用括号改变运算顺序
not(x>5 and (x<10 or x==12))
十一、列表 []列表 特点:有序,可重复,可扩展
shopping_list = []
一个空列表用 中括号 [] 表示。
shopping_list = [“键盘”,”鼠标”]
在列表内添加内容的方法
shopping_list.append = [“显示器”]
在列表内删除内容的方法
shopping_list.remove = [“显示器”]
shopping_list = [“键盘”,”鼠标”,”硬盘”]
len(shopping_list),返回为3
shopping_list = [“键盘”,”鼠标”,”硬盘”]
print(shopping_list[0]),返回为 键盘,列表索引也是从0开始。
元组 特点:有序,可重复,不可扩展
不可变但又很像列表的数据结构。
元组内可放多个元素。
列表用方括号;元组用圆括号()。
元组不可变,添加、删除等操作都不能操作
可以把元组作为键使用:
集合 特点:无序,不可重复,可扩展
以上程序运行输出内容:
键 : 值
key value
contacts = {}
一个空字典用 花括号 {} 表示。
如果键不存在,指令会报错。
等同于
break终止当前循环,,使程序跳出循环体。
continue结束当前循环剩余语句,继续下一轮循环
pass 在Python中是一个空语句,什么都不做,占位语句,它的主要目的是为了保持程序结构的完整性。当你在编写代码时,可能只想先搭建起程序的整体逻辑结构,而暂时不去实现某些细节。在这种情况下,你可以使用pass语句来占位,这样就可以避免因为语句块为空而导致的语法错误。pass语句不会执行任何操作,它只是一个空白的语句块。
十六、range整数序列range 表示整数序列
range(5,10)
第一个数字为起始值,第二个数字为结束值,注:结束值不在序列范围内。
range(5,10,2)
range的第三个参数为步长,不指明的时候默认为1
以下三段程序效果相同
有明确的循环对象或次数时用for循环。
循环次数未知时用while循环。
十八、格式化字符串 1、format方法
函数运行完成后,没有写返回值,默认返回值为 None。
print、append、len、sum等函数的返回值均为None
自定义函数返回值示例
Python含有很多的函数模块,不同模块内存不同功能的函数,可以在程序里面引入使用。
import 加上模块名 引入模块
需要使用模块的函数或变量的时候格式如下:
模块名.函数名
模块名.变量名
示例:
import statistics
print(statistics.median([19, -5, 36]))
print(statistics.mean([19, -5, 36]))
2、from…import… 语句from 模块名 import 函数名,变量名 引入模块的某些函数或变量
from后面添加模块名,import后面添加函数名或变量名,需要引入多个的时候用逗号进行分隔。
此方法在使用时不需要再带上模块名。
示例:
from statistics import median, mean
print(median([19, -5, 36]))
print(mean([19, -5, 36]))
3、from…import * 语句from 模块名 import * 引入模块的所有内容
from后面添加模块名,import后面加*号,将模块里面的所有内容进行引入,在使用时全都不需要在前面添加模块名。
优点:需要使用同一个模块的不同函数或变量可以直接使用,不需要再加模块名。
缺点:如果因引用多个模块,不同模块内可能包含相同名称的函数,运行时可能出现错误。
此方法不建议使用。
示例:
from statistics import *
print(median([19, -5, 36]))
print(mean([19, -5, 36]))
4、其他
如果安装第三方库,在PyCharm的【终端】窗口输入 pip install 后面加上库的名字。安装完成后即可使用库的函数。
Python常用类的命名方法为Pascal命名法,即首字母大写。
类的构造函数,主要作用是定义实例对象的属性。
必须命名为 __init__ 前后必须有两个下划线。括号内可以放任意数量的参数,但是第一个永远是被占用的,用于表示自身,约定俗称为self,它能把属性绑定在实列的对象上。
从参数中获取值,在创建对象时,在括号内写入要传入的参数,__init__函数将会绑定传入的参数。
定义类的方法与创建普通函数差不多。
有两点区别:
1、需要创建在class里面,前面需要有缩进,来表示属于该类的方法。
2、和 __init__ 一样,第一个参数被占用,用于表示对象自身,约定俗成为 self 。
子类可以继承父类的属性和方法。
在子类名称后的括号中写上父类的名称,此时父类的方法就会继承到子类中。
此时在子类中用supper()方法,返回当前类的父类;
在子类的构造函数中写 supper().__init__(),则会调用父类的构造函数,子类将会继承父类的构造函数中的属性。
如果说A是B,那么就可以把A写成是B的子类。
不同操作系统文件存储路径,Linux、macOS等操作系统所有文件存储在根目录下,根目录用斜杠(/)表示。
Windows操作系统每个磁盘分区都有根目录,用分区名加反斜杠(\)表示。
定义文件位置的方法有两种,绝对路径和相对路径。
1、绝对路径
从根目录出发的路径。
对于Linux、macOS等系统,绝对路径以斜杠(/)开头,路径中每个目录之间用斜杠进行分隔,最后以目标文件或目标目录结尾。
对于Windows系统,绝对路径以分区名加反斜杠(\)开头,路径中每个目录之间用反斜杠进行分隔,最后以目标文件或目标目录结尾。
2、相对路径
从一个参考位置出发。表示从指定文件位置出发,其他文件处于什么路径。
用相对路径时,用点(.)表示参照物所在的目录,用点点(..)表示更上一层的父目录。如果继续往上走,就用点点(..)跟上斜杠或者反斜杠进行分隔,后面跟上点点(..)表示当前文件所属目录的父目录的父目录。如果是往更下层走,同样以斜杠或反斜杠来分隔路径中的目录。
相对路径都是以点(.)或点点(..)开头。
./(.\)是可以省略的,在同一路径下相互用相对路径找到彼此,可以直接使用文件名。
open()方法,打开文件,括号内放文件路径,可以是相对路径也可以是绝对路径。
示例:open(“./data.txt”) 相对路径
open(“/usr/demo/data.txt”) 绝对路径
open()方法的第二个参数表示模式,模式是一个字符串,常见的字符串有“r”,表示读取模式;“w”表示写入模式。
示例:open(“/usr/demo/data.txt”,”r”)
注:第二个参数可以不写,不写时默认为读取模式 ”r”。
读取模式下,如果找不到文件,就会报FileNotFoundError的错误,表示文件不存在。
open()方法还有一个可选参数 encoding 表示编码方式。一般文件编码方式为 UTF-8。
示例:f = open(“./data.txt”, ”r”, encoding=”utf-8”)
如果open()方法执行成功,将会返回一个文件对象,后续可以对这个对象进行读取或写入操作。
2、read() 方法,读取文件方法一运行read()方法会一次性读取文件里面的所有内容,并以字符串的形式返回。一般操作的文件以文本为主。其他类似word文件内有字体颜色、字号区分的文件,很可能读取有误。
只读取文件一行内容,下次调用时继续读取下一行,根据换行符来判断什么时候结束本行。并且换行符会被当成读到的内容的一部分。读取到结尾后,继续读取将会返回空字符串,表示后面已经无内容。
一般采用while循环判断,只要返回的不是空字符串就继续读取下一行,否则退出循环。
读取文件内容,并将每行作为列表元素返回。
一般和for循环结合使用。先调用readlines方法把每行读取出来,再逐行循环列表所有内容。
三种读取文件的方法:
调用close方法后将会释放系统资源,每次调用文件完成后都应该关闭文件。
withopen(“./data.txt”) as f:
print(f.read()) #对文件的操作
如上方式可以不用调用close方法关闭文件,文件操作完成后会自动关闭文件。注意对文件操作的代码需要缩进,缩进的代码块执行完毕后会自动关闭文件。
写文件与读文件类似,都需要先打开文件,并且在操作完成后关闭文件。同样可以使用 with open() as f: 方式。
with open(“./data.txt”,”w”, encoding=”utf-8”) as f:
open的第二个参数传入w,即为写文件模式,写文件模式找不到文件,不会像读文件模式那样报错,而是自动创建传入文件名的那个文件。第三个参数为encoding编码格式。
注:使用w模式打开文件进行写入时,如果文件已存在,将会把原有文件内容全部清空。
如果不想重写文件内容,而是增加文件内容,则open()的第二个参数需要传入附加模式”a”参数。如果文件名不存在,会直接创建文件。
无论是”w”模式,还是”a”模式,都不能读取文件原本的内容,如果在这两个模式下调用read()方法,程序会报错不支持读操作(UnsupporttedOperation)。
open()方法的第二个参数传入”r+”参数,就可以同时支持读写文件。
程序报错类型有很多。可以通过try/except语句捕捉异常,
try后加冒号,换行后在缩进的代码块里放入可能产生错误的代码,接下来在except后面跟上需要捕捉的错误名字以及冒号。
以上程序,用户输入的内容可能不是浮点数,将会报错ValueError错误,就可以在except后面放入ValueError去捕捉。再在下一行放入出现错误代码后需要执行的代码。
可以分别捕捉多个错误代码,如果不知道可能出现什么错误,可以写except:即为除了以上列出的错误代码以外的任何错误都执行此代码。
需要注意的是,try/except语句在捕捉错误时,依次从上往下运行,如果第一个except已经捕捉到错误,之后的except将不会执行,与if/elif语句类似,只有第一个符合条件的分支会运行。
else: 表示没有出现任何错误时执行的语句。
finally: 无论是否发生错误,都会执行的语句。
五、Python测试 1、assert 断言assert后面可以跟上任何布尔表达式,在assert后面跟上我们认为为True的表达式,如果assert后面的表达式最终求出来为True,则正常结束,继续运行后面的代码。如果求出来的结果为False,则会产生“AssertionError”断言错误。一旦出现断言错误,程序将会终止。
一般会使用专门做测试的库,能一次性跑多个测试用例,并且能直观展示哪些测试通过。
2、unittest 单元测试unittest对软件中最小可测试单元进行验证。比如验证某函数的某个方面表现是否符合预期。unittest库时Python自带的,不需要额外安装。
因unittest是一个库,需要用import语句引用到测试程序内。
一般把测试代码放到独立文件内。而不是和要测试的功能放到一起。这样更清晰地划分实现代码和测试代码。测试代码中还需要将需要测试的函数或类引入进来,如果测试文件和被测试文件位于同一文件夹下,引入语法是:
from 文件名 import 函数名
from 文件名 import 类名
引入测试模块 unittest单元测试模块,并且引入需要测试的函数。创建一个测试的类,作为unittest.TestCase的子类,继承unittest.TestCase的各种测试功能。在此类下面定义各种需要测试的用例,每个测试用例都是类的一个方法。
测试方法命名必须以 test_ 开头。因为 unittest 库只把 test_ 开头的方法当作测试用例,
以上测试可以使用 unittest 库里面 unittest.TestCase 类的assertEqual 方法,自编辑的类已经继承测试unittest.TestCase 类,可直接使用self调用父类方法,传入的第一个参数和第二个参数如果相等,则测试通过,如果不相等,则测试不通过,程序也不会报错退出。
测试用例编辑完成后,需要在编辑器的【终端】窗口中输入 python -m unittest 运行unittest库,这个库就会自动搜索所有继承了unittest库里TestCase类的子类,运行所有以 test_ 开头的方法,然后展示测试结果。
运行结束后,会提示一共运行了几个测试用例,并且展示测试结果, 一个·表示一个测试一个测试通过,F表示一个测试不通过。
如果有测试不通过,unittest会详细输出哪个文件下面的哪个方法造成了测试失败,以及为什么失败。
unittest.TestCase类的常见测试方法。
假如需要测试一个类,为了调用各种类方法,需要创建示例对象,由于不同测试用例之间是独立的,测试不同方法的时候,需要不停的创建新的对象。
为了减少重复代码,可以使用TestCase类里的setUp方法,在运行测试代码时,也就是 tset_ 开头的方法前,setUp方法都会先被运行一次,这样只需要在setUp方法里面把测试对象创建好,作为当前测试类的一个属性,然后在各个方法里面获取已经创建好的对象去写测试语句。
一个函数里面些多个运行逻辑,每次增加逻辑时需要在这个函数继续增加程序,此写法不优雅直观。
为了优雅直观的表示函数,可以将函数的各种计算方式独立成单独的函数。运行计算方式时直接调用传入的函数将计算结果显示出来。
这种将函数作为参数的函数叫做高阶函数。
作为参数的函数是直接用函数名进行传入,表示函数其本身,后面不能带括号和参数,入过带括号,即表示调用此函数,从而传入的是函数的执行结果。
高阶函数还可以同时调用多个函数。
匿名函数不需要写名字,即用即仍,可以把匿名函数当作没有名字且占用行数更少的函数。以lambda作为关键字。
可以直接在高阶函数的括号内写上关键字 lambda ,再跟上 变量名,后面再跟上冒号 : ,冒号后面直接写上需要返回的结果,无需写return.
如果需要给匿名函数增加参数,直接用逗号分隔即可。
以上匿名函数写成普通函数,如下图所示:
除了作为高阶函数的参数,匿名函数还可以定义好后直接被调用。调用方式和普通函数一样,都是括号,然后括号里面传入参数,唯一的区别是前面的匿名函数也是要被括住,表示这是一个整体。
匿名函数也有局限性,冒号后没法有多个语句或表达式,只适用于比较简单的场景,对于多步骤的复杂逻辑或者设计循环递归等,它可能不灵活,没法用它写出来;即使写出来,可读性会很差。
Python标准库:Python 标准库 — Python 3.13.0 文档
看完这套Python入门教程后:
想继续巩固基础,推荐书籍《Python编程从入门到实践(第3版)》
👉
👉 京东网上商城
👉图灵社区