第二章 数字运算、字符串和文本、列表
1.注释
单行注释(行注释)——# ——后面加一个空格
多行注释(块注释)
一对 连续的 三个 引号(单引号和双引号都可以)
其中:单行注释快捷键:CTRL+/
2.数学运算
运算符 |
描述 |
实例 |
+ |
加 |
10 + 20 = 30 |
- |
减 |
10 - 20 = -10 |
* |
乘 |
10 * 20 = 200 |
/ |
除 |
10 / 20 = 0.5 |
// |
取整除 |
返回除法的整数部分(商) 9 // 2 输出结果 4 |
% |
取余数 |
返回除法的余数 9 % 2 = 1 |
** |
幂 |
又称次方、乘方,2 ** 3 = 8 |
<=
,小于等于号>=
,大于等于号
在print后面可以直接运算数
print("What is 3 + 2?", 3 + 2) ——输出:What is 3 + 2? 5
print("Is it greater?", 5 > -2) ——输出:Is it greater? True
3.字符串和文本
字符串引用方式
一.单独引用
1.逗号连接
2.+号连接,但是要先转换为str再拼接
二.直接在引号里引用
加上{ }
eg:
my_name = 'Zed A. Shaw'
print(f"Let's talk about {my_name}.")
4.列表
列表用 [ ] 标识
切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾.
eg:list = [ 'runoob', 786 , 2.23, 'john', 70.2 ]
第三章 字典、元组、布尔类型、读写文件
(一)字典
通常用于存储 描述一个 物体 的相关信息
- 和列表的区别
- 列表 是 有序 的对象集合
- 字典 是 无序 的对象集合
- 字典用 { key (属性): value(数据) } 定义
- 字典使用 键值对 存储数据,键值对之间使用 , 分隔
- 键 key 是索引
- 值 value 是数据
- 键 和 值 之间使用 : 分隔
- 键必须是唯一的
- 值 可以取任何数据类型,但 键 只能使用 字符串、数字或 元组
(二)元组
- Tuple(元组)与列表类似,不同之处在于元组的 元素不能修改,元组用 () 定义
- 元组的 索引 从 0 开始
(三)布尔类型
在python表述的语法是
• and
• or
• not
• != (不等于)
• == (等于)
• >= (大于等于)
• <= (小于等于)
• True
• False
(四)读写文件
- close - 关闭文件,就像编辑器中的 “文件->另存为”一样。
- read - 读取文件内容。你可以把读取结果赋给一个变量。
- readline - 只读取文本文件的一行内容。
- truncate - 清空文件。清空的时候要当心。
- write('stuff') - 给文件写入一些“东西”。
- seek(0) - 把读/写的位置移到文件最开头。
第四章 函数
函数的定义格式:
def 函数名(参数列表...):
函数功能代码...
函数使用(调用):
函数名(值列表...)
函数和变量
函数参数的使用
- 在函数名的后面的小括号内部填写 参数
- 多个参数之间使用 , 分隔
def sum_2_num(num1, num2): #括号内先定义num1,num2形参,不赋值,说明有这两个参数
result = num1 + num2
print("%d + %d = %d" % (num1, num2, result))#需要有输出,不然下面调用输入参数的时候没有可输出的东西
sum_2_num(50, 20) #调用时赋值——实参,输入非数字时要用“”引号引起来
形参和实参
- 形参:定义 函数时,小括号中的参数,是用来接收参数用的,在函数内部 作为变量使用
- 实参:调用 函数时,小括号中的参数,是用来把数据传递到 函数内部 用的
3. 函数的返回值
- 在程序开发中,有时候,会希望 一个函数执行结束后,告诉调用者一个结果,以便调用者针对具体的结果做后续的处理
- 返回值 是函数 完成工作后,最后 给调用者的 一个结果
- 在函数中使用 return 关键字可以返回结果
- 调用函数一方,可以 使用变量 来 接收 函数的返回结果
格式:
return 数据
一个函数,无论在哪遇到return,那么这个函数都会直接结束执行,回到调用处
return 后面可以没有数据
函数也可以没有return ,函数默认返回 None
注意:return 表示返回,后续的代码都不会被执行
def sum_2_num(num1, num2):
"""对两个数字的求和"""
return num1 + num2 # 返回值
# 调用函数,并使用 result 变量接收计算结果,需要有一个变量接受return的结果
result = sum_2_num(10, 20)
print("计算结果是 %d" % result)
函数包含多个return语句
一个函数中可以存在多个Return
但是,只能有一个语句有效
在执行顺序上,第一个遇到的Return 有效
第五章 编程习惯养成与思维
(1)防御性编程与备注
防御性编程的基本思想
假设A,如果您从用户那里获得输入他们不一定会提供您所要求的输入,因此如果您要求的是正数,请不要指望他们给你一个
然后是假设B,如果您正在使用一个由不完美的程序员编写的程序,也许是我,或者您自己,那个程序中可能有错误,所以您编写程序的假设是不仅用户可能会犯错,程序的其他部分也可能会犯错,并且您只是在假设您宁愿发现某些事情出错,然后让它出错的假设下进行了许多不同的测试,不知道问题的来源
但记住的主要事情是:人们是愚蠢的一般原则,并会犯错
因此您编写程序的目的是避免在犯这些错误时发生灾难
要养成编写防御性编码的习惯
2)科学分析思维
迭代问题逻辑
1、选择一个可以计数的变量(Choose variable that "count")
2、在外部需要初始化它(Initiative outside the loop)
3、需要设置正确的最终测试(Setup and test)
4、构建代码块(Conctract block)
5、当结束后,你知道,当我完成后,我该怎么做(What to do when done)
代码效率
因为目前需要解决问题的增长速度高于电脑计算速度的增长
在时间、空间恒定的情况下,需要考虑的是
1、计算需要多少内存
2、输入大小的函数所需的基本步骤数量是多少
表现 | 所需步骤与内存 |
---|---|
Best | min |
Worst | max |
Expected | avg |
(3)图灵完备语言
图灵完备语言包含三部分
1、数据:数组,字符串,布尔
2、操作:数字运算,如+,-,and/or等
3、命令:赋值、输入/输出、条件/分支、循环机制
有了这三部分,我们就可以做任何事情,在基础部分,我们都有接触过。能做什么事情呢?包括自然语言学习,图像识别,语音识别等
(4)Debugger
Debugging的思路,debugging的目标是朝着没有错误的程序进行运行,做这个最好的两个工具是打印和阅读代码(带着怀疑的眼光看)
首先要发现产生问题的最小输入,然后进行打印测试,采用二分法进行测试,每次是在代码中进行打印,每次测试可以排除一半的代码块,并自己先预测一下结果会是什么,耐心冷静的减小搜索出现问题的地方
还可以请教别人,在请教别人的时候,自己会把问题逻辑整理清楚再去问,有时候在问的时候,问了一下,自己就会恍然大悟,原来是这样
(5)抽象化、模块化、封装代码
这部分是为了解决阅读代码的问题,事实上几十万行的代码看的时候很难去理解,会把代码进行分成几个模块,一个模块负责对应相关的操作,也方便后续的debugger,和阅读
例如机器学习中会分为数据清洗、训练、测试,三个大模块
(6)如何知道运行代码的时间
经过基础部分的学习大家已经了解到运行不同的代码是需要不一样的时间的
影响代码运行时间会受到,1、机器性能。2、使用的语言。3、数据量。等
其实这些并不能为我们预估出运行代码的时间,因为这些都有很多变量,其实唯一不变的是运行这个程序需要多少步,
举个例子,魔方复原,在复原魔方的时候,如果一开始不知道怎么复原,没有思惟逻辑进行复原,可能需要的时间需要很久
但是通过查阅相关资料和思考,可以分为几个步骤,就可以顺利复原
所以运行代码的时间在与你知道你的代码需要运行多少步,思考的逻辑决定了你的运行代码时间
(7)如何修复他人的代码
在编程的时候,我们常常会借鉴别人的代码,但会碰到一个问题,并不是每一份代码都可以完整复现,会受到版本、运行环境等的影响,所以要修复他人的代码,提供一个思路
是要有一个系统性的思考
1、保持记录你尝试的方式、修改的地方
2、考虑重新假设
3、调试代码
4、放下自己的骄傲,寻找他人的帮助
5、离开一段时间再回来修复
第六章 FOR、IF以及while
(一)if语句
if 判断语句基本语法(后面有冒号)
在 Python 中,if 语句 就是用来进行判断的,格式如下:
if 要判断的条件:
条件成立时,要做的事情 ……(前面空4格)
else:
条件不成立时,要做的事情 ……
注意:代码的缩进为一个 tab 键,或者 4 个空格 —— 建议使用空格
- 在 Python 开发中,Tab 和空格不要混用!
注意:
- if 和 else 语句以及各自的缩进部分共同是一个 完整的代码块
若不缩进就跳过if执行没缩进代码
if 条件1:
条件1满足执行的代码
……
elif 条件2:
条件2满足时,执行的代码
……
elif 条件3:
条件3满足时,执行的代码
……
else:
不满足条件执行的代码
(二)FOR语句
elif
- 在开发中,使用 if 可以 判断条件
- 使用 else 可以处理 条件不成立 的情况
- 但是,如果希望 再增加一些条件,条件不同,需要执行的代码也不同 时,就可以使用 elif
- 语法格式如下:
(三)while语句
while 循环
循环的作用就是让 指定的代码 重复的执行
while 语句基本语法
初始条件设置 —— 通常是重复执行的 计数器
while 条件(判断 计数器 是否达到 目标次数):
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
处理条件(计数器 + 1)
第七章 面向对象
- while 循环最常用的应用场景就是 让执行的代码 按照 指定的次数 重复 执行
相比较函数,面向对象 是 更大 的 封装,根据 职责 在 一个对象中 封装 多个方法
- 在完成某一个需求前,首先确定职责 —— 要做的事情(方法)
- 根据 职责 确定不同的 对象,在 对象 内部封装不同的 方法(多个)
- 最后完成的代码,就是顺序地让不同的对象调用不同的方法
定义只包含方法的类
- 在 Python 中要定义一个只包含方法的类,语法格式如下:
class 类名:
def 方法1(self, 参数列表):
pass
def 方法2(self, 参数列表):
pass
- 方法 的定义格式和之前学习过的函数 几乎一样