第一章
PYTHON学习
1、安装PYTHON
2、启动PYTHON 终端会话。(简化文本编辑器的配置工作)
方法:win+R打开命令窗口—>输入cmd—>回车(enter)—>输入“python”—>回车(enter)
(或者:按住shift,右击桌面,选择“在此处打开命令窗口”—>输入“python”—>回车(enter))
嗯,证明好使了。
3、在终端对话中运行Python。
输入
- print("Hello Python world!")
复制代码
输出了
嗯,成功了。
(记住,要运行Python代码时,就打开命令窗口并启动Python终端会话)
关闭终端会话的方法:1、按ctrl+z,再按回车键
2、输入exit() 。
Geany 是一款简单的文本编辑器(功能:可以运行几乎所有的程序,而不用通过终端运行)
4、安装文本编辑器Geany。
先创建一个文件夹叫python_work。(我是在桌面创建的)
返回Geany,
选择菜单“文件”里的保存(将这个我们啥都没写的空文件保存到python_work中)
命名为hello_world.py(以.py结尾,Geany就知道这是一个python文件了,编辑器将使用python解释器来运行它)
5、配置Geany。
为啥要配置呢以及咋配置?
因为Geany不知道python路径。要设置python路径。在“生成”—>“设置生成命令”里。
在windows资源管理器(就是任务栏固定的“计算机文件”)中搜索“python”,找到C:\Users\china\AppData\Local\Microsoft\WindowsApps\python.exe,这就是python的存储位置。
然后,在“生成”—>“设置生成命令”里,设置python路径。
执行一下,成功了。打印出了“Hello Python world!”
第二章
变量:
- message="Hello Python world!"
- print(message)
复制代码
而有趣的是,我打错了,打成了print("message"),结果不是Hello Python world!,而是message。
也就是说,只要print里加了" "," "里的内容就是print最后输出的内容。
接下来
程序可以随时修改变量的值,而Python会随时记录变量的最新值。
变量名只能包含字母,下划线,数字,而且只能以字母,下划线打头。例如,可命名为message_1,而不能命名为1_message。变量名不能包含空格,但可以使用下划线来分隔单词,例如,greeting_message。
编程要给变量设置合适的名称,变量名不能与关键字和内置函数重复。
要既简短又有描述性。比如name,student_name,name_length等。
python变量名尽量小写。
使用变量发生错误:
NameError(名称错误):或者是使用变量前忘记赋值了,或者是变量名拼写错误。
例如,
而如果这样的话,
上面的变量名和下面的变量名对应一致的话,那也可以运行成功。
Python官方文档
简单消息,文件命名为simple_message.py
多条简单消息,文件命名为simple_messages.py
字符串(用引号括起的都是字符串,引号可以是单引号,也可以是双引号,非常自由。)
例如,
- "This is a string."
- 'This is also a string.'
复制代码
或者,
- “The language 'Python' is named after Monty Python, not the snake.”
- 'I told my friend, "Python is my favorite language!"'
- "One of Python's strengths is its diverse and supportive community."
复制代码
使用方法修改字符串的大小写
“方法”:Python可对数据执行的操作。“.”让Python对变量name执行方法title的操作。方法后面跟着的一对括号:因为方法有时需要额外的信息来完成工作。
title():以首字母大写的方式显示每个单词。(有时我们希望程序将Ada,ADA,ada视为同一个名字,并都显示为Ada,这时就可以用title()了)
方法upper()全部大写,lower()全部小写(在存储数据时可以用lower,用户提供的大小写可能不正确,我们用lower先将字符串都转换为小写,再存储它们。显示这些信息时再转换为合适的大小写方式)
合并(拼接)字符串
Python使用“+”合并字符串。
例如,想把姓和名存储到不同的变量里,等到要显示的时候把他们合二为一。
小提示:当你打英文时,而且这个英文在前面出现过,所以在你打一半时,系统在英文下面自动给出完整拼写时,按enter键就可以显示完整拼写了。F5是执行键。
- first_name="ada"
- last_name="lovelace"
- full_name=first_name+" "+last_name
- print(full_name)
复制代码
本来是这个,我打错了。""中间应该有空格
对了。
使用制表符和换行符添加空白。
删除空白
方法:rstrip():剔除字符串里末尾多余的空白
就如图中所看到的,只能短暂的删除空白
所以,要永久的删除空白,就要先用方法把空白剔除后,再将结果存回原来的变量中。存完之后,值就是存到变量中的那个方法之后的值。
lstrip():剔除字符串开头多余的空白。
strip():剔除字符串两端的空白。
使用字符串时避免语法错误。(语法错误,SyntaxError很棘手)
P23页,动手试一试。
2-3 把用户的性姓名存在变量里,并向该用户发一条消息。如下图
我犯了一个错误:NameError,名称错误。在变量name里没有为Eric加引号。
这回对了。
2-4 调整名字的大小写
还记不记得小写,大写和首字母大写的方法了?
lower(),upper(),title()
特意没有把方法放进变量中,否则就是永久显示方法后的变量,没用,这道题只要输出大小写就行。
突然想到,为什么要把,比如,名字这样的,放进变量中,因为不是一输出名字就完事了,而是,后面还要用到这个名字。所以,把它当作变量存储起来,方便后面使用。
我又想到,各种方法,为什么有的放进变量里呢?有的却不用放呢?
比如,这段文字的好几行之前写过lower()这个方法,在存储用户的名字之前,因为用户填写的大小写不统一,程序员喜欢把它们都先用lower()函数改成小写的,统一了之后,显示这些信息时再转换成合适的大小写。
2-5 名言(考查引号的正确使用)
2-6
对了。
2-7 剔除人名中的空白
注释
python之禅
flat is better than nested.平坦的比嵌套的好。
美观的比丑陋的好。
explicit is better than implicit.明确的比模糊的好。
简单的比复杂的好。
complex is better than complicated.复杂的比复杂的难以理解的好。
sparse is better than dense.稀疏的比稠密的好。
readability counts.可读性很重要。
数字
乘方运算:**,乘法运算:*
浮点数
如下图,可以妥善的处理浮点数,但是包含的小数位数可能是不确定的。
使用函数str()避免类型错误。
想祝某人23岁生日快乐,可以直接打出来
或者,
也可以设置age变量,令age=23。
而此时,python不知道age是字符2和3还是数值23,所以,我们要evident的指出希望将这个整数用作字符串,所以调用函数str().
注释 “#”表示
注释不能直接用“#中文”模式来写,python可能不能接受文件里有中文,所以在文件开头要写
"#coding:utf-8"
P27页,动手试一试。
2-8
2-9
列表:列表由一系列按特定顺序排列的元素组成。
给列表指定一个表示复数的名称。例、letters,digits,names.
用方括号[]表示列表,用逗号分隔其中的元素。
下面是一个列表,包含几种自行车。
上面这种输出把方括号[],各种自行车类型都显示出来了,不是最终让客户所看到的输出
所以,下面来学习如何访问列表元素。print(bicycles[0])
因为列表是有序的,所以要访问的话,只需要访问该元素的位置或索引即可。
变量名+方法:bicycles[0].title()。
第一个列表元素,使用索引0,同理,索引=列表位置-1。
在不知道列表长度的情况下,python提供一种特殊语法,最后一个列表元素,索引指定为-1,倒数第二个,索引指定为-2,第三个,索引是-3,以此类推。
P33页 动手试一试
3-1 将列表中的名字打印出来,为了干净,整洁的输出,使用了方法title()
3-2 问候语
3-3 自己的列表
修改,添加和删除元素
创建的列表大多都是动态的,比如创建一个游戏,要求玩家射杀从天而降的外星人,那么就有本来在列表中的外星人因为被射杀后删除,又有新增的外星人。
要修改列表元素和指定列表元素相似。
在列表中添加元素
分为2种情况,在列表末尾添加元素,在列表中插入元素。
在列表末尾添加元素,用方法append(),这个方法不一样,前面我们说的title(),upper(),lower()等方法,都是变量名.方法,而这个append()却是变量名.append('要添加的元素')
英文中append是添加的意思。
将变量设为空列表,用变量名.append('.....') 往里面添加元素。
为控制用户,先创建一个空列表,用于存储用户将要输入的值,然后将用户提供的每个新值附加到列表里。
在列表中插入元素(变量.append('....'))
使用方法insert()在任何位置添加新元素。在insert()里,你需要指定新元素的索引和值。(这2样东西不能少)
如下图,将新元素放到第一个位置,而旧的第一个位置的元素以及后面的元素都向右移动。所以,新元素的索引被设置为0。
删除元素
1、del()语句(知道删除元素在列表中的位置时,你可以使用该语句)
(del 变量名[索引位置])
提示:使用del()语句删除元素后,你就无法再访问该元素了
2、pop()删除元素
pop“弹出”的意思
将元素从列表中删除,但是能接着使用它的值。比如将用户从活跃用户中删除,并将其加入到非活跃用户列表里。列表相当于一个栈,删除末尾的元素相当于弹出栈顶元素。
新的列表名popped_motorcycles=旧列表名.pop(),相当于新变量名popped_motorcycles里储存的是被弹出的栈顶元素。
如图所示,最后删除的是列表末尾的元素,也相当于弹出了栈顶元素。
上图中,一共有3次print输出,第一次是整个输出列表,第二次是输出栈顶元素被删除后的整个列表,第三次是输出新的列表,也就是被弹出的栈顶元素所在的列表。
***方法pop()是如何起作用的呢?
加入列表中的摩托车是按购买时间存储的,使用pop()打印一条信息,指出最后购买的是哪款摩托车。
如上图,是拿颜色举的例子。
实际上,可以用pop()删除列表中的任何位置的元素,新的列表名=旧列表名.pop(索引代表的数字)
根据值删除元素(不知道删除的位置,只知道删除的值时)
总结一下,从删除操作来说的话,知道删除索引后,可以使用del 列表名[索引],而方法pop()可以pop(索引值)。只有不知道索引值(即位置),只知道准备删除的值时,用下面介绍的方法。
原列表名.remove('要删除元素的值')
值得一提的是,remove()和pop()一样,删除的元素仍可以接着使用它的值。
值得一提的是,remove()只删除第一次指定的该值,即使删除的值在后面出现过多次,在第7章学习如何面对这种情况。
3.3组织列表
用sort()进行永久性排序 cars.sort()
这样就将汽车按字母顺序永久性排序了
那么,如何按字母顺序的相反顺序排序呢?向sort()方法传递参数 reverse=True,其中True的T是大写的。
使用sorted()进行临时排序 sorted(cars)
用特定顺序显示列表,但是不影响原始排列顺序。
用sorted方法,倒序显示列表呢? sorted(cars,reverse=True)
也就是说,用sort()是,cars.sort()和cars.sort(reverse=True),按字母顺序排列
而用sorted()是,sorted(cars)和sorted(cars,reverse=True),按字母顺序排列
总结一下,sort()是永久排序,sorted()是临时显示排序。
倒着打印列表(比如,汽车是按时间购买的,用相反的顺序排列其中的汽车)cars.reverse(),将cars按相反顺序排列,再次cars.reverse(),再次反转顺序,即此时cars的顺序和正常的cars的顺序一样了。
总结一下,将列表cars中的元素按首字母大小写的顺序排列,cars.sort()或者sorted(cars)
将列表cars中的元素按首字母大小写的顺序倒序排列,cars.sort(reverse=True)或者sorted(cars,reverse=True)
将列表cars中的元素顺序反转排列,cars.reverse(),再次反转顺序是,cars.reverse()
cars.reverse()永久的反转列表中的元素,但是可以随时恢复(对此的理解是,“永久”省的写完这一个指令就完事了,就print()一下就完事,“永久”后面也可以受该指令的影响),只需要对列表再次调用reverse即可
确定列表的长度 len(cars)
如下图所示,因为上一个程序已经删除完了列表第一个元素EXO,在没有添加新元素的情况下,第一个元素是BTS,所以这种连续删除的情况,要想删除BTS,不是pop(1),而应该是pop(0)
第四章 操作列表
4.1 遍历整个列表
- #coding:utf-8
- magicians=['alice','david','carolina']
- for magician in magicians:
- #for循环,别忘了冒号。从列表magicians中取出一个名字,并存储到变量magician中。然后进行for循环,列表中的所有名字都遍历,都存储在变量magician中。for循环,持续执行第3,4行代码
- print(magician)#打印出来
复制代码
代码中
for magician in magicians:
最后有 “:” 别忘了!!!!!
4.1.1 深入的研究循环
4.1.2 在for循环中执行更更多的操作
4.1.3 在for循环结束后执行一些操作
4.2 避免缩进错误
4.2.1 忘记缩进
- IndentationError:expected an indented block
复制代码
4.2.2 忘记缩进额外的代码行
- print("\n")
- magicians=['alice','david','carolina']
- for magician in magicians:
- print(magician)
- print(magician.title()+",that was a great trick!\n")
- print("I can't wait to see your next trick,"+magician.title()+".\n")
- #因为magician的终值是carolina,而我们忘记了缩进这一行print,因此只有carolina收到了这行消息。
- #也就是说因为忘记缩进,这行代码只执行了一次。
复制代码
4.2.3 不必要的缩进
- IndentationError:unexpected indent
复制代码
4.2.4 循环后不必要的缩进
4.2.5 遗漏了冒号
p50页,动手试一试
错误示例
以上图中是一个错误示例。第三行中,pizza是一个列表,在print中列表只能单独输出,不能再和别的放在一起输出。
正确示例
4-1
4-2
4.3 创建数字列表
4.3.1 使用函数range()
使用range时,如果输出不符合预期,尝试将指定的值加1或减1。(实在弄不明白的时候)
4.3.2 使用range()创建数字列表
list(range(1,6)),这时候就是1~5的列表了
使用range()函数,可以指定步长
创建一个列表,包含前10个整数的平方
放大版:
4.3.3 对数字列表执行简单的统计计算
专门处理数字列表的python函数。min(列表),max(),sum().
4.3.4 列表解析
列表解析将for循环和创建新元素的代码合并成1行,并自动附加新元素。
题4-7
答案
整体答案
4.4 使用列表的一部分
4.4.1 切片
列表的部分元素叫做切片。
- 列表=[]
- print(列表[索引1:索引2])
- #列表[索引1:索引2]这就是切片
复制代码
4.4.2 遍历切片
4.4.3 复制列表(用到切片)
复制列表的方法:同时省略起始索引和终止索引。friends_foods=my_foods[:](正确)
这就相当于什么呢,
相当于从列表my_foods中提取整个列表的完整切片,friends_foods相当于是my_foods列表的副本
错误方法:直接friend_foods=my_foods(错误)
P58页4-12
4.5 元组
列表是可修改的,适合存储可能变化的数据集。
不可变的列表叫做元组。元组用()来标识。定义元组后就可以用索引来访问其元素。
4.5.1 定义元组
4.5.2 遍历元组中的所有值
前面我们学了,可以用for循环遍历列表,遍历列表的切片。同时,也可以遍历整个元组。
4.5.3 修改元组变量
元组里的元素是不能修改的,但是有另一种方法,可以重新定义元组。(把新元组存储到变量中)
如果要存储一组值,在程序的整个生命周期内都不变,可以使用元组。
也就是说,不可以单独拎出元组中某个元素修改,而是要把这个元组都重新定义了。
4.6 设置代码格式
4.6.1 格式设置指南
4.6.2 缩进
缩进使用4个空格
4.6.3 行长
4.6.4 空行
4.6.5 其他格式设置指南
缩进代码块ctrl+I
撤销缩进的代码块ctrl+U
4.7 小结
第5章 if语句
5.1 一个简单示例
if语句后面要加冒号“:”
5.2 条件测试
检查是否相等
第一行是给car赋值,第二行是看car是否等于'bmw',如果是的话,就是True
不相等,就是False
python在检查是否相等时考虑大小写,也就是说,一样的字母,有大小写之分的话,python系统也认为是False
所以如果大小写无关紧要,只是想检查变量的值,可以统一将变量的值变为小写形式,再进行比较。
在网站上,用户提交新的用户名时,每当用户提交新的用户名时,就把它转换为小写,并与已有用户名的小写版本进行比较。如果已经有用户名'john'(不管大小写如何),则用户提交用名'John'时将遭到拒绝。 这样可以确保用户名是独一无二的。
5.2.3 检查是否不相等。
!= 不相等
5.2.4 比较数字
5.2.5 检查多个条件 and,or
使用and 检查多个条件
只要有一个条件没通过,就是False。
使用or检查多个条件
只要有一个条件满足,就能通过测试。
5.2.6 检查特定值是否包含在列表中
执行操作前先检查特定值是否包含在列表里了
使用关键字in
5.2.7 检验特定的值是否不包含在列表中
not in
5.2.8 布尔表达式
布尔表达式的结果是True 或False。
布尔值用于记录条件,如游戏是否在进行,用户是否可以编辑网站的特定内容。
- game_active=True
- can_edit=False
复制代码
动手试一试
5-1 条件测试
5-2 更多的条件测试
5.3 if语句
5.3.1 简单的if语句
简单的if语句只有一个测试和一个操作:
- if conditional_test:
- do something
复制代码
5.3.2 if-else语句
5.3.3 if-elif-else语句
让代码更简洁:如下图
5.3.4 使用多个elif 代码块
5.3.5 省略else代码块
像以上的代码,可以省略else实现。
5.3.6 测试多个条件
虽然if-elif-else功能很强大,但是如果测试多个条件,就只能用if。
示例:在披萨里加调料。假如顾客点了几个配料放在列表里。就要挨个用if 测试配料是否在列表顾客点的配料里,而不能用除if之外的elif或者else。if-elif-else是三选一,只要有一个满足条件了,后面的条件就不看了,这是他们的区别所在。所以要用if...in...
小总结:如果只想执行一个代码块(即,三选一),就使用if-elif-else。如果要运行多个代码块,就使用一系列独立的if语句
想要执行多个代码块:if-if-if
执行一个代码块:if-elif-elif 或者if-elif-else
P76页答案alien_color_5-3.py
5.4 使用if语句处理列表
5.4.1 检查特殊元素
5.4.2 确定列表不是空的
在使用列表提供的信息之前,先确定列表不是空的。
这就和前面的检查特殊元素不同了,不是直接执行for循环,而是用if 检查列表是否为空。
5.4.3 使用多个列表
status report 文献
结果
5.5 设置if语句的格式
比较运算符比如 <= , >= , == 等,在左右两边各添加一个空格,不影响代码的解读,只是阅读起来容易。
5.6 小结
第六章 字典
6.1 一个简单的字典
6.2 使用字典
字典是一系列键值对。
键和值之间用冒号分隔,而键—值对之间用逗号分隔。在字典中,你想存储多少个键—值对都可以。
键:color ;值:green
键:points ;值:5
6.2.1 访问字典中的值
6.2.2 添加键-值对
字典是一种动态结构,可以随时添加键值对。
要添加键—值对,可依次指定字典名、用方括号括起的键和相关联的值。
注意,键值对的排列数序和添加顺序不一样。不关心添加顺序,只关心键值关系。
6.2.3 先创建一个空字典
使用字典来存储用户提供的数据或在编写能自动生成大量键—值对的代码时,通常都需要先定义一个空字典。
6.2.4 修改字典中的值
要修改字典中的值,可依次指定字典名、用方括号括起的键以及与该键相关联的新值。
对一个能够以不同速度移动的外星人的位置进行跟踪。为此,我们将存储该外星人的当前速度,并据此确定该外星人将向右移动多远:
6.2.5 删除键-值对
6.2.6 由类似对象组成的字典
在前面的示例中,一个字典里存储的是一个外星人的多种信息。而字典也可以存储众多示例中的同一种信息。
正如你看到的,我们将一个较大的字典放在了多行中。其中每个键都是一个被调查者的名字,而每个值都是被调查者喜欢的语言。确定需要使用多行来定义字典时,在输入左花括号后按回车键,再在下一行缩进四个空格,指定第一个键—值对,并在它后面加上一个逗号。此后你再次按回车键时,文本编辑器将自动缩进后续键—值对,且缩进量与第一个键—值对相同。 定义好字典后,在最后一个键—值对的下一行添加一个右花括号,并缩进四个空格,使其与字典中的键对齐。另外一种不错的做法是在最后一个键—值对后面也加上逗号,为以后在下一行添加键—值对做好准备。
给定被调查者的名字,可使用这个字典轻松地获悉他喜欢的语言:
6.3 遍历字典
有多种遍历字典的方式:可遍历字典的所有键—值对、键或值
6.3.1 遍历所有的键-值对
方法:items():返回一个键—值对列表
6.3.2 遍历字典中的所有键
方法keys():遍历所有的键
方法items():遍历所有的键—值对
#遍历所有的键-值对:for name,language in favorite_languages.items():
#遍历字典中所有的键,方法keys():for name in favorite_languages.keys():
下面来打印两条消息,指出两位朋友喜欢的语言。我们像前面一样遍历字典中的名字(即,键),但在名字为指定朋友(创建friends列表,在字典中找2个键放在列表里)的名字时,打印一条消息,指出其喜欢的语言
另一种方法,结果有一点不同
name:键
favorite_languages[name]:值
6.3.3 按顺序遍历字典中的所有键
6.3.4 遍历字典中的所有值
这种做法提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,但如果被调查者很多,最终的列表可能包含大量的重复项。为剔除重复项,可使用集合(set)。集合类似于列表,但每个元素都必须是独一无二的
6.4 嵌套
6.4.1 字典列表(在列表中存储字典)
未完成待续