Python编程:从入门到实践
这是基于 《Python编程:从入门到实践》这本书以一个初学者的视角去学习而记录的笔记,浓缩了精华的部分以及分享了一些我自己的见解。做这个既是为了让自己边学边记录也是为了保留自己的问题去和小伙伴一起谈论。
一,python是什么以及核心作用
Python 是一种高级、解释型、面向对象的编程语言,由荷兰人 Guido van Rossum 于 1989 年圣诞节期间创建,第一个公开发行版发行于 1991 年。它的设计哲学强调代码的可读性和简洁的语法,特别是使用空格缩进划分代码块,而非使用大括号或关键词。
核心特点:
- 可读性强:代码简洁易读,被称为 “可执行的伪代码”。
- 解释型语言:无需编译,可直接运行,开发效率高。
- 动态类型:变量类型无需预先声明,灵活高效。
- 面向对象:支持面向对象编程的所有特性。
- 跨平台:可在 Windows、Linux、macOS 等多种系统运行。
- 丰富的标准库和第三方库:涵盖 Web 开发、数据科学、人工智能等几乎所有领域。
核心作用:
- Web 开发:通过 Django、Flask 等框架快速构建网站和 API。
- 数据科学与机器学习:NumPy、Pandas 用于数据分析,Scikit-learn、TensorFlow 用于模型训练。
- 自动化脚本:系统管理、文件处理、批量任务等自动化操作。
- 游戏开发:Pygame 库可创建 2D 游戏。
- 网络爬虫:Requests、BeautifulSoup、Scrapy 用于数据采集。
- 桌面应用开发:Tkinter、PyQt 等构建 GUI 程序。
- DevOps:Ansible、SaltStack 等工具基于 Python 开发。
第2章变量和简单数据类型
2.1字面量
2.1.1 什么是字面量
在代码中,被写下来的固定的值(数据),叫做字面量
2.2 什么是变量
简单的说,变量就是在程序运行时,记录数据用的
在程序中可随时修改变量的值,而Python将始终记录变量的最新值。
message = "Hello Python world!"
print(message)
message = "Hello Python Crash Course world!"
print(message)输出为:
Hello Python world!
Hello Python Crash Course world!
2.2.1 变量的命名和使用
1.变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头
2.变量名不能包含空格
3.就目前而言,应使用小写的Python变量名。在变量名中使用大写字母虽然不会导致错误,但避免使用大写字母是个不错的主意
2.3 字符串
1.字符串就是一系列字符。在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号
2.3.1 使用方法修改字符串的大小写
name = "ada lovelace"
print(name.upper()) //头部大写
print(name.lower()) //所以的大写
print(name.title()) //全小写结果:
Ada Lovelace
ADA LOVELACE
ada lovelace
2.3.2 合并(拼接)字符串
Python使用加号(+)来合并字符串
first_name = "ada"
last_name = "lovelace"
full_name = first_name+" "+last_name
print("Hello,"+full_name.title()+"!") 结果:
Hello,Ada Lovelace!
2.3.3 使用制表符或换行符来添加空白
"\n\t"让Python换到下一行,并在下一行开头添加一个制表符
>>>print("Languages:\n\tPython\n\tC\n\tJavaScript")
Languages:PythonCJavaScript
2.3.4 删除空白
可以剔除字符串开头的空白,结尾的空白,或同时剔除字符串两端的空白。为此,可分别使用方法lstrip(),rstrip(和strip():
>>>favorite_language = 'python ' ❶
>>>favorite_language.rstrip() ❷
'python' //结尾的
>>>favorite_language.lstrip() ❸
'python ' //开头的
>>>favorite_language.strip() ❹
'python' //两头的
2.3.5 练习:
1.将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消息应非常简单,如“Hello Eric,would you like to learnsome Python today?”。
user_name = "eric"
print("Hello,"+user_name.title()+",would you like to learn some Python today?")
2.剔除人名中的空白:存储一个人名,并在其开头和末尾都包含一些空白字符。务必至少使用字符组合"\t"和"\n"各一次。
user_name = " eric "
print("Hello,"+user_name.strip()+"\n\tnice to meet you")结果:
Hello,ericnice to meet you
2.4 数字
2.4.1 整数
可对整数执行加(+)减(-)乘(*)除(/)运算。
>>>2+3
5
>>>3 - 2
1
>>>2 * 3
6
>>>3 / 2
1.5
2.4.2 浮点数
Python将带小数点的数字都称为浮点数
2.4.3 使用函数str()避免类型错误
age = 23
message = "Happy "+age+"rd Birthday!"
print(message)//Python发现你使用了一个值为整数(int)的变量,
但它不知道该如何解读这个值
Traceback (most recent call last):File "birthday.py",line 2,in <module>message = "Happy "+age+"rd Birthday!"
TypeError:Can't convert 'int'object to str implicitly ❶
可调用函数str(),它让Python将非字符串值表示为字符串:
age = 23
message = "Happy "+str(age)+"rd Birthday!"
print(message)Happy 23rd Birthday!
2.5 注释
1.注释:在程序代码中对程序代码进行解释说明的文字。 作用:注释不是程序,不能被执行
单行注释:通过 # 号定义,在#号右侧的所有内容均作为注释
2.用快捷键ctrl+/就可以选中要注释的部分,可以单行也可以多行注释
2.6小结
在本章中,你学习了:如何使用变量;如何创建描述性变量名以及如何消除名称错误和语法错误;字符串是什么,以及如何使用小写、大写和首字母大写方式显示字符串;使用空白来显示整洁的输出,以及如何剔除字符串中多余的空白;如何使用整数和浮点数;使用数值数据时需要注意的意外行为。你还学习了如何编写说明性注释,让代码对你和其他人来说更容易理解。最后,你了解了让代码尽可能简单的理念。
第3章列表简介
你将学习列表是什么以及如何使用列表元素。列表让你能够在一个地方存储成组的信息,其中可以只包含几个元素,也可以包含数百万个元素。
3.1 列表是什么
列表由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。
在Python中,用方括号([])来表示列表,并用逗号来分隔其中的元素。
bicycles = ['trek','cannondale','redline','specialized']
print(bicycles)['trek','cannondale','redline','specialized']
3.1.1 访问列表元素
要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内。
bicycles = ['trek','cannondale','redline','specialized']
print(bicycles[1])
print(bicycles[3])
print(bicycles[-1]) //倒数第一个cannondale
specialized
specialized
3.2 修改、添加和删除元素
3.2.1 修改列表元素
例如,假设有一个摩托车列表,其中的第一个元素为'honda',如何修改它的值呢?motorcycles = ['honda','yamaha','suzuki'] ❶
print(motorcycles)
motorcycles[0] = 'ducati'❷
print(motorcycles)输出表明,第一个元素的值确实变了,但其他列表元素的值没变:
['honda','yamaha','suzuki']
['ducati','yamaha','suzuki']
3.2.2 在列表中添加元素
1.在列表末尾添加元素
方法append()将元素'ducati'添加到了列表末尾
例如,你可以先创建一个空列表,再使用一系列的append()语句添加元素。
下面来创建一个空列表,再在其中添加元素'honda'、'yamaha'和'suzuki':motorcycles = []
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)结果:
['honda','yamaha','suzuki']
2.在列表中插入元素
使用方法insert()可在列表的任何位置添加新元素。为此,你需要指定新元素的索引和值
motorcycles = ['honda','yamaha','suzuki']
motorcycles.insert(2,'ducati')
print(motorcycles)结果:
['honda', 'yamaha', 'ducati', 'suzuki']
3.2.3 从列表中删除元素
1.使用del语句删除元素
motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
del motorcycles[1]
print(motorcycles)结果:
['honda','yamaha','suzuki']
['honda','suzuki']
2.使用方法pop()删除元素
方法pop()可删除列表末尾的元素,并让你能够接着使用它。术语弹出(pop)源自这样的类比:列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。
motorcycles = ['honda','yamaha','suzuki'] ❶
print(motorcycles)
popped_motorcycle = motorcycles.pop(1) ❷
print(motorcycles) ❸
print(popped_motorcycle) ❹['honda','yamaha','suzuki']
['honda','yamaha']
yamaha
最后,我们打印弹出的值,以证明我们依然能够访问被删除的值(见❹)
如果你不确定该使用del语句还是pop()方法,下面是一个简单的判断标准:如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;如果你要在删除元素后还能继续使用它,就使用方法pop()。
3.根据值删除元素
如果你只知道要删除的元素的值,可使用方法remove(),使用remove()从列表中删除元素时,也可接着使用它的值。
motorcycles = ['honda','yamaha','suzuki','ducati'] ❶
print(motorcycles)
too_expensive = 'ducati'❷
motorcycles.remove(too_expensive) ❸
print(motorcycles)
print("\nA "+too_expensive.title()+" is too expensive for me.") ❹['honda','yamaha','suzuki','ducati']
['honda','yamaha','suzuki']
A Ducati is too expensive for me.
3.3 组织列表
3.3.1 使用方法sort()对列表进行永久性排序
方法sort()(见❶)永久性地修改了列表元素的排列顺序
cars = ['bmw','audi','toyota','subaru']
cars.sort() ❶
print(cars)['audi','bmw','subaru','toyota']
你还可以按与字母顺序相反的顺序排列列表元素,为此,只需向sort()方法传递参数reverse=True。
cars = ['bmw','audi','toyota','subaru']
cars.sort(reverse=True)
print(cars)['toyota','subaru','bmw','audi']
3.3.2 使用函数sorted()对列表进行临时排序
可使用函数sorted()。函数sorted()让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序.
cars = ['bmw','audi','toyota','subaru']
print("Here is the original list:") ❶
print(cars)
print("\nHere is the sorted list:") ❷
print(sorted(cars))
print("\nHere is the original list again:") ❸
print(cars)结果:
Here is the original list:
['bmw','audi','toyota','subaru']
Here is the sorted list:
['audi','bmw','subaru','toyota']
Here is the original list again:❹
['bmw','audi','toyota','subaru']
3.3.3 倒着打印列表
方法reverse()永久性地修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,为此只需对列表再次调用reverse()即可。
cars = ['bmw','audi','toyota','subaru']
print(cars)
cars.reverse()
print(cars)['bmw','audi','toyota','subaru']
['subaru','toyota','audi','bmw']
3.3.4 确定列表的长度
使用函数len()可快速获悉列表的长度。
>>>cars = ['bmw','audi','toyota','subaru']
>>>len(cars)
4
3.3.5 练习
1.放眼世界:
想出至少5个你渴望去旅游的地方。·将这些地方存储在一个列表中,并确保其中的元素不是按字母顺序排列的。·按原始排列顺序打印该列表。不要考虑输出是否整洁的问题,只管打印原始Python列表。
·使用sorted()按字母顺序打印这个列表,同时不要修改它。·再次打印该列表,核实排列顺序未变。·使用sorted()按与字母顺序相反的顺序打印这个列表,同时不要修改它。·再次打印该列表,核实排列顺序未变。
·使用reverse()修改列表元素的排列顺序。打印该列表,核实排列顺序确实变了。
·使用reverse()再次修改列表元素的排列顺序。打印该列表,核实已恢复到原来的排列顺序。
·使用sort()修改该列表,使其元素按字母顺序排列。打印该列表,核实排列顺序确实变了。
place = ['nanchang','sh','bj','sz','yichun']print(sorted(place))#按字母顺序打印,不永久print(sorted(place,reverse=True))#倒着打印
print(place)place.reverse()#到着打印,永久性
print(place)place.reverse()#回到原来的顺序
print(place)place.sort()#永久按字母顺序排序
print(place)
第4章操作列表
在本章中,你将学习如何遍历整个列表,这只需要几行代码,无论列表有多长。循环让你能够对列表的每个元素都采取一个或一系列相同的措施,从而高效地处理任何长度的列表,包括包含数千乃至数百万个元素的列表。
4.1 遍历整个列表
需要对列表中的每个元素都执行相同的操作时,可使用Python中的for循环。
4.1.1 深入地研究循环
语法:
for 临时变量 in 目标对象:循环体1.
total = 0
for num in range(1,6):
total+=num
print("累加和为:",total)累加和为: 1
累加和为: 3
累加和为: 6
累加和为: 10
累加和为: 152.
max_attempts = 3for attempt in range(max_attempts):password = input("请输入正确密码(还剩 %d 次尝试): " % (max_attempts - attempt))if password == "12345":print("密码正确,欢迎登录!")break # 正确输入后终止循环
else: # 循环正常结束(未触发 break)print("尝试次数过多,登录失败!")请输入正确密码(还剩 3 次尝试): 12
请输入正确密码(还剩 2 次尝试): 21
请输入正确密码(还剩 1 次尝试): 12
尝试次数过多,登录失败!进程已结束,退出代码为 0
4.1.2 在for循环结束后执行一些操作
在for循环后面,没有缩进的代码都只执行一次,而不会重复执行
magicians = ['alice','david','carolina']
for magician in magicians:print(magician.title()+",that was a great trick!")print("I can't wait to see your next trick,"+magician.title()+".\n")
print("Thank you,everyone.That was a great magic show!") ❶Alice,that was a great trick!
I can't wait to see your next trick,Alice.
David,that was a great trick!
I can't wait to see your next trick,David.
Carolina,that was a great trick!
I can't wait to see your next trick,Carolina.
Thank you,everyone.That was a great magic show!
你在前面看到了,开头两条print语句针对列表中每位魔术师重复执行。然而,由于第三条print语句没有缩进,因此只执行一次:因为缩进了就会被看成if的循环体,而没有缩进就不会被循环。在写代码的过程中要避免不必要的缩进。
4.2.1 遗漏了冒号
for语句末尾的冒号告诉Python,下一行是循环的第一行。如果遗漏了也会导致错误
4.3 创建数值列表
列表非常适合用于存储数字集合,而Python提供了很多工具,可帮助你高效地处理数字列表。
4.3.1 使用函数range()
Python函数range()让你能够轻松地生成一系列的数字
for value in range(1,5):print(value)结果:
1
2
3
4
在这个示例中,range()只是打印数字1~4,这是你在编程语言中经常看到的差一行为的结果。函数range()让Python从你指定的第一个值开始数,并在到达你指定的第二个值后停止,因此输出不包含第二个值(这里为5)。
4.3.2 使用range()创建数字列表
要创建数字列表,可使用函数list()将range()的结果直接转换为列表。如果将range()作为list()的参数,输出将为一个数字列表
numbers = list(range(1,6))
print(numbers)结果:
[1,2,3,4,5]
函数range()从2开始数,然后不断地加2,直 到达到或超过终值(11),因此输出如下:
even_numbers = list(range(2,11,2))
print(even_numbers)[2,4,6,8,10]
使用函数range()几乎能够创建任何需要的数字集,例如,如何创建一个列表,其中包含前10个整数(即1~10)的平方呢?在Python中,两个星号(**)表示乘方运算。下面的代码演示了如何将前10个整数的平方加入到一个列表中:
squares = [] ❶
for value in range(1,11):❷square = value**2 ❸squares.append(square) ❹
print(squares) ❺[1,4,9,16,25,36,49,64,81,100]