python入门学习笔记目录
1.编程概论
1.1 注释
- 注释是使用特殊的符号告诉编程语言忽略这行代码,简单来说注释是给人看的,让人能更容易读懂代码,而编程系统会自动忽略注释的内容。
单行注释 #
- 单行注释可以使用 符号 # 创建注释
# 开始学习python啦,第一行代码是学会打印hello world,print('hello world!')
print('hello world!')
多行注释
- 使用3对单引号或者3对双引号来创建多行注释
'''
今天是周二
开始学习python啦
坚持就是胜利
'''
# 或者
"""
这是多行注释
编程机器不会运行的模块
但是程序员可以通过这来了解我们为什么这样写代码
"""
1.2 打印与标记符
1.2.1 打印 print
- 程序打印内容使用关键字 print ,它可以打印任何内容,记得要带上圆括号引号,英文状态
print('好好学习,天天向上')
print('good good study,day day up!')
- 我们可以使用内置函数 help() 来查看 print 的用法与功能
- 同样的,以后碰到不懂的函数都可以使用内置函数 help() 来查看相关用法与功能。
1.2.2标记符
- 标记符的第一个字符必须是字母表中的字母或者下划线_
- 标记符的其他部分由字母数字和下划线组成
- 标记符区分大小写
1.3 代码行
1.3.1 单行语句
- 我们写程序的时候,都是由一行一行的代码组成的,代码的最左边一般都有行数以区别代码。
- 单行语句也称简单语句:一般是由一行代码组成
1.3.2 多行语句
- 有时候代码比较长,可能不止一行,这时候可以使用反斜杠、三引号、圆括号、方括号或者大括号扩
展至新一行,实现多行语句
print('''This is a really really
really really long line of
code.''')
- 另外,还可以使用反斜杠 \ 对代码进行换行
print\
("""his is a really really
really really long line of
code.""")
- 这里主要体现了:反斜杠可以将(""“This is a really really really long line of code.”"")和 print 放在不同的行,实现多行语句
total = item_one + \
item_two + \
item_three
- 另外圆括号()、方括号[]、大括号{}也可以实现多行语句,可自行了解
1.3.3 缩进
- 缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。
- 缩进表示代码块的开始和结束
for i in range(10):
print('我要学习python')
if 1>2:
print('true')
else:
print('false')
-
也许这里会更好理解,print(‘true’)与print(‘false’)这两行有相同的缩进,缩进了4个空格,代表的是同一个代码块。缩进的空格数可以变,但是同一个代码块缩进数应该一样,否则代码无法正常运行,会提示异常。
-
缩进不一致时,执行后会出现错误:缩进错误
1.3.4 复合语句
- 复合语句由一个或多个从句(clause)组成。
- 从句包括两行或多行代码
- 代码头(header)及紧随其后的配套代码(suite)。代码头指的是从句中包含关键字的那行代码,之后是一个冒号和一行或多行带缩进的代码。缩进之后,是一个或多个配套代码。配套代码就是从句中一行普通的代码。代码头控制配套代码的执行。
- 下面将介绍的条件语句就是复合语句组成的,现在我们先看一个简单的例子:打印10次 hello world !
for i in range(10):
print('hello world!')
1.4 关键字
- 关键字也称保留字,是编程语言中具有特殊意义的字,我们在编程命名的时候要避免以关键字来命名,不能把关键字用作任何标记符的名称。
- 可以使用python标准库提供的 keyword 模块输出当前版本的所有关键字,以下所示。
import keyword
tmp = keyword.kwlist
print(tmp)
- import keyword 只是导入这个模块,想要把关键字都显示出来,我们需要把关键字的列表赋给一个变量,再把变量打印出来。所以这里令 tmp = keyword.kwlist ,再 print(tmp)
1.5 基本对象数据类型
- 在python中,万物皆对象,对象有类型。
- 对象有3个属性的数据值:唯一标识(其在计算机中的内存地址,不变)、数据类型(对象所属的数据类别,决定了对象的属性,不变)、值(对象表示的数据)
- 基本的数据类型有6种: Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典)
- 数据类型为 NoneType 的对象,其值永远为 None,用来表示数据缺失。
其中
- 不可变数据类型:Number(数字)、String(字符串)、Tuple(元组);
- 可变数据类型:List(列表)、Dictionary(字典)、Set(集合)。
1.5.1type() 函数
- python内置的 type() 函数可以用来查询变量所指的对象类型。
type(2)
type(2.1)
type(None)
type('hello world')
1.5.2 isinstance() 判断函数
- isinstance 存在
- isinstance(object, classinfo) ——object 是变量,classinfo 是类型
- 若参数 object 是 classinfo 类的实例,或者 object 是 classinfo 类的子类的一个实例, 返回 True。
- 若 object 不是一个给定类型的的对象, 则返回结果总是False。
1.5.3 type 与 isinstance
-共同点:两者都可以判断对象类型
-不同点:type()不会认为子类是一种父类类型,isinstance()会认为子类是一种父类类型。
1.6 常量与变量
- 顾名思义,常量是不会变的值;而变量是会改变的值
- 变量可以由一个或多个字符组成的名称构成,并可以使用赋值符 等号(=)赋予这个名称一个值
1.7 语法
- 语法(syntax)指的是规范一门语言中句子结构,尤其是字词顺序的一整套规则及流程。
- 在 Python 中,字符串永远被包括在引号内,这就是 Python 的一个语法示例。
1.7.1 错误与异常
-
Python 有两种错误:语法错误和异常。
-
在编写 python 程序时如果不注意语法的正确使用,在程序运行时就会出现错误,这种错误属于语法错误。
-
如上,字符串的右侧少了个引号,程序便无法执行了,并给出相关的错误信息:语法错误。
-
错误信息会告诉你错误位于哪个文件,出现在哪一行,以及属于什么类型。
-
针对这种语法错误,我们可以找到出错的地方,相应地去修改,就可以正常运行了
-
而 python 中不属于语法错误的错误,就是异常(exception)。
-
出现异常时,Python 程序会说“Python(或程序)报了一个异常”
-
比如不小心把0用作分母,就会出现“ZeroDivisionError”异常
-
比如代码缩进不正确,程序会报“IdentationError”
1.8 python操作符
- Python 有多个类型的操作符,下面先了解算术操作符、比较操作符、逻辑操作符
1.8.1 算术操作符
操作符 | 含义 | 示例 | 结果 |
---|---|---|---|
** | 指数运算 | 2**3 | 8 |
% | 取模运算,即取余数 | 14%4 | 2 |
// | 整除运算,即取整数 | 14//4 | 3 |
/ | 除法运算,返回浮点数 | 13/8 | 1.625 |
* | 乘法运算 | 8*2 | 16 |
- | 减法运算 | 7-1 | 6 |
+ | 加法运算 | 2+3 | 5 |
- 操作数:操作符两侧的值
- 表达式:两个操作数和一个操作符共同构成一个表达式
- 程序运行时,Python 会对每个表达式求值,并返回一个值作为结果。
- 运算顺序:括号(parentheses)、指数(exponents)、乘法(multiplication)、除法(division)、加法(addition)和减法(subtraction)
1.8.2 比较操作符
操作符 | 含义 | 示例 | 结果 |
---|---|---|---|
> | 大于 | 100>10 | True |
< | 小于 | 100<10 | False |
>= | 大于等于 | 2>=2 | True |
<= | 小于等于 | 1<=4 | True |
== | 等于 | 6==9 | False |
!= | 不等于 | 3!=2 | True |
- 这里可以区分一下 = 与 == ,= 在 python 中是用来给变量赋值的,而 == 是用来比较两边是否相等。
1.8.3 逻辑操作符
操作符 | 含义 | 示例 | 结果 |
---|---|---|---|
and | 与(都真才真) | True and True | True |
or | 或(一真则真) | True or False | True |
not | 非 | not True | False |
- 关键字 and 可以连接两个表达式,如果二者求值均为 True,则返回 True。
- 在一个语句中可以多次使用 and 关键字
- 关键字 or 可连接两个或多个表达式,如果任意一个表达式的值为 True,即返回True
- 在一个语句中可以多次使用 and 、or
- 如果表达式原本的求值结果为 True,加上 not 之后结果会变为False
- 所以,将关键字 not 放置在表达式的前面,将改变表达式的求值结果,逆转为原本结果的对立值。
- 在 and、or、not 三种运算中,非运算 not 级别最高,and 次之,or 运算级别最低
- not(a and b) 等价于 not a or not b;
- not(a or b) 等价于 not a and not b;
- not(not a) 等价于 a;
1.8.4 赋值操作符
操作符 | 说明 | 示例 | 结果 |
---|---|---|---|
= | 简单的赋值操作符 | a=3 | 把3赋值给a |
+= | 加法赋值操作符 | a+=3 | 把a+3的值赋给a,即a=a+3 |
-= | 减法赋值操作符 | a-=1 | 把a-1的值赋给a,即 a=a-1 |
*= | 乘法赋值操作符 | a*=2 | 把a2的值赋给a,即 a=a2 |
/= | 除法赋值操作符 | a/=2 | 把a/2的值赋给a,即a=a/2 |
%= | 取模赋值操作符 | a%=2 | 把a%2的值赋给a,即 a=a%2 |
//= | 取商赋值操作符 | a//2 | 把a//2的值赋给a,即 a=a//2 |
**= | 幂赋值操作符 | a**=2 | 把a**2的值赋给a,即 a=a%2 |
:= | 海象运算符 | 可在表达式内部为变量赋值。` |
1.9 条件语句
- 条件语句是一种控制结构:通过分析变量的值从而做出相应的决定的代码块
- 条件语句的关键字:if、elif、else
1.9.1 if 条件语句
- 如果满足条件就这样
if bool(conj):
do something
-
以上伪代码(伪代码是用于解释说明示例代码的标记方法)中 bool(conj) 是一个判断条件,结果是 True 或者 False ,如果是 True ,就会执行 do something 这条语句,否则不返回任何值。
-
值得注意的是,if 语句之后的冒号 :必须要有,执行语句(do something 那行)前面需要缩进4个空格,一个Tab键,很多编译器会自动缩进,没有的话需要自己特别注意,否则会提示缩进错误
-
python中必须通过缩进的方法来表示语句块的开始和结束
1.9.2 if…else 语句
- 如果满足条件就这样,否则就那样
if 1>2 :
print('True')
else:
print('False')
- 注意冒号的使用,其实这里有两个判断语句 if 判断语句:如果条件是真的;else 判断语句:如果条件是假的
- 可以理解为有判断就有冒号
- print(‘True’) 和 print(‘False’) 都是需要执行的语块,所以需要缩进
1.9.3 if…elif…else 语句
- if…elif…else 基本样式结构如下
if 条件1:
语块1
elif 条件2:
语块2
elif 条件3:
语块3
...
else:
语块4
- if…elif…else 中间可跟多个elif
- 如果一个 if-else 语句中包含有 elif 语句,则首先判断 if 语句。如果该语句中的表达式为 True,则只执行其中的代码。但是,如果其值为 False,每个之后的 elif 语句都将进行求值。只要有一个 elif 语句中的表达式结果为 True,则执行其中的代码并退出。如果没有任何一个 elif 语句的结果为 True,则执行 else 语句中的代码。
- 要记得每个条件语句都需要冒号 :即,if、else、elif 后都需要冒号 :(英文冒号)
number=input('please enter a number:')
# input函数用于用户输入内容
number=int(number)
# input返回的结果都是字符串,需要用int函数把用户输入的内容转为数字类型
if number == 10 :
print('this number is {}'.format(number))
elif number > 50 :
print('this number is {}'.format(number))
print('this number is more than 50')
elif number > 10 :
print('this number is {}'.format(number))
print('this number is more than 10')
else:
print('this number is {}'.format(number))
print('this number is less than 50')
1.9.4 三元操作符
- 三元操作是条件语句中比较简单的一种赋值方式,什么情况下变量等于这个值,否则变量就等于那个值。
A=Y if X else Z
- 如果 X是真的,执行 A=Y
- 如果 X是假的,执行 A=Z
x=2
y=4
a='python' if x>y else 'hello'
print(a)
b='python' if x<y else 'hello'
print(b)
1.10 挑战练习
- 请打印 3 个不同的字符串。
- 编写程序:如果变量的值小于 10,打印一条消息;如果大于或等于 10,则打印不同的消息。
- 编写程序:如果变量的值小于或等于 10,打印一条消息;如果大于 10 且小于或等于 25,则打印一条不同的消息;如果大于 25,则打印另一条不同的消息。
- 编写一个将两个变量相除,并打印余数的程序。
- 编写一个将两个变量相除,并打印商的程序。
- 编写程序:为变量 age 赋予一个整数值,根据不同的数值打印不同的字符串说明。
# 第一题
print('hello world')
print('good good study')
print('day day up')
# 第二题
num_1=int(input('please enter a number'))
if num_1 < 10 :
print('您输入的数字是{},小于10'.format(num_1))
else:
print('您输入的数字是{},大于等于10'.format(num_1))
# 第三题
num_1=int(input('please enter a number'))
if num_1 <= 10 :
print('您输入的数字是{},小于等于10'.format(num_1))
elif num_1 <=25 :
print('您输入的数字是{},小于等于25'.format(num_1))
else:
print('您输入的数字是{},大于25'.format(num_1))
# 第四题,第五题
num_1=20
num_2=7
num_3=num_1%num_2
print(num_3)
num_4=num_1//num_2
print(num_4)
age=int(input("请输入你的年龄:"))
if age<=0:
print("请输入正确的年龄:")
elif age<=18:
print("你的年龄是{},未成年".format(age))
elif age<=40:
print("你的年龄是{},还年轻,继续拼搏".format(age))
elif age<=60:
print("你的年龄是{},注意养生了吗".format(age))
else:
print("你的年龄是{},祝您身体健康哦".format(age))
2. 基本对象类型
- 第1章中讲到,基本的数据类型有6种: Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典),现在将详细对其进行讲解。
2.1 数字类型
- Python 数字数据类型用于存储数值。
- python的数字类型有四种:整数(int)、浮点数(float)、布尔型(bool)和复数(complex)。
- **注意:**在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加。
- 通过变量赋值可直接创建数字类型
num_1=2
num_1=2.1
整型(Int)
- 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。
浮点型(float) - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250)
复数( (complex)) - 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。
2.1.1 数字类型转换
- int(x) 将x转换为一个整数。
- float(x) 将x转换到一个浮点数。
- complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
- complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。
a=input('请输入一个数字:')
a=int(a)
b=float(a)
2.1.2 数字类型可以进行运算
- 其中,第1章中讲到的算法操作符,赋值操作符都可用在数字的运算上,这里就不重复了。
2.1.3 数字函数
函数 | 返回值 |
---|---|
abs(x) | 返回数字的绝对值,如abs(-10) 返回 10 |
ceil(x) | 返回数字的上入整数,如math.ceil(4.1) 返回 5 |
floor(x) | 返回数字的下舍整数,如math.floor(4.9)返回 4 |
exp(x) | 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045 |
fabs(x) | 返回数字的绝对值,如math.fabs(-10) 返回10.0 |
log(x) | 如math.log(math.e)返回1.0,math.log(100,10)返回2.0 |
log10(x) | 返回以10为基数的x的对数,如math.log10(100)返回 2.0 |
max(x1, x2,…) | 返回给定参数的最大值,参数可以为序列。 |
min(x1, x2,…) | 返回给定参数的最小值,参数可以为序列。 |
pow(x, y) | x**y 运算后的值。 |
round(x [,n]) | 返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数 |
sqrt(x) | 返回数字x的平方根。 |
2.1.4 随机数函数
- 随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。
函数 | 说明 |
---|---|
choice(seq) | 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。 |
randrange ([start,] stop [,step]) | 从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1 |
random() | 随机生成下一个实数,它在[0,1)范围内。 |
seed([x]) | 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。 |
shuffle(lst) | 将序列的所有元素随机排序 |
uniform(x, y) | 随机生成下一个实数,它在[x,y]范围内。 |
2.1.5 三角函数
函数 | 说明 |
---|---|
acos(x) | 返回x的反余弦弧度值。 |
asin(x) | 返回x的反正弦弧度值。 |
atan(x) | 返回x的反正切弧度值。 |
atan2(y, x) | 返回给定的 X 及 Y 坐标值的反正切值。 |
cos(x) | 返回x的弧度的余弦值。 |
hypot(x, y) | 返回欧几里德范数 sqrt(xx + yy)。 |
sin(x) | 返回的x弧度的正弦值。 |
tan(x) | 返回x弧度的正切值。 |
degrees(x) | 将弧度转换为角度,如degrees(math.pi/2) , 返回90.0 |
radians(x) | 将角度转换为弧度 |
2.1.6 数字常量
常量 | 说明 |
---|---|
pi | 数学常量 pi(圆周率,一般以π来表示) |
e | 数学常量 e,e即自然常数(自然常数)。 |
2.1.7 math
- 以上的某些函数介绍(如:math.ceil(4.1))使用了math
- math 是python的一个模块,模块相关内容后面章节会详细讲解,现在只是简单了解一下math模块
- math 模块可以直接使用,但需要用关键字 import 来将 math 引入当前环境。
# 以求圆周率为例子
import math
math.pi
- 如果你想继续深入了解这个库还有哪些函数功能,可以使用内置函数 dir() 来查看
dir(math)
- 如果你想知道某个功能怎么用,可以使用内置函数 help()
- 使用help函数查询库的功能,不能直接把功能的名字放进括号里,还需把库的名字带上,比如 math.exp
help(math.exp)
2.2 字符串(str)
- 字符串是由0个或多个字符组成的有限的串行
- 字符串是 Python 中最常用的数据类型。我们可以使用引号( ’ 或 " )来创建字符串。
- 一个中文、一个英文、一个空格都属于字符串里的一个字符
- 可以使用 len() 函数来测量字符串的长度(字符的个数)
- 使用内置函数 type() 查看对象类型
string_1='I love python'
string_2="我爱学习"
len(string_1)
len(string_2)
type(string_1)
- 字符串是不可变的,我们无法修改字符串中的字符,如果想要修改,只能创建一个新的字符串。
2.2.1 转义符 \
- 现在我想打印一句话:what’s your name?,你会怎么去执行呢?
- 是如下吗?这么简单,肯定有坑吧,先运行看看!
print('what's your name?')
-
果然呀!出现了语法错误,SyntaxError: invalid syntax
-
编写这段程序时,我们涉及三个单引号(一对半),python解析器是看不懂的,它会以为前面两个单引号才是一对,而后面单个单引号则会让python解析器的迷惑,因为语法上是不能出现单个引号的,于是python解析器报了个语法错误。
-
那么我们应该怎么解决这个问题呢?方法有二
方法一:双引号包裹单引号
print("what's your name?")
- 这样就能让python解析器好好地理解啦,先识别一对双引号,再把双引号的内容打印出来,对python解析器来说双引号里面的一切都是字符串
- 同样的,单引号里面也可以包裹双引号。
方法二:使用转义符
- 哈哈,终于讲到转义符了
- 所谓转义符,顾名思义,就是让某个具有特别意义的符号不再表示某个含义。
- python中,使用符号反斜杠 \ 作为转义符(其实很多语言都使用这个符号作为转义符,学习MySQL的时候也碰到了)
print("what\'s your name?")
以下介绍比较常用的转义类型
转义字符 | 说明 |
---|---|
\(在行尾时) | 续行符 |
\\ | 转义反斜杠符号 |
\’ | 转义单引号 |
\" | 转义双引号 |
\a | 响铃,执行后电脑会有提示音 |
\b | 退格(Backspace) |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车,将 \r 后面的内容移到字符串开头,并逐一替换开头部分的字符,直至将 \r 后面的内容完全替换完成。 |
\f | 换页 |
\oyy | 八进制数,y 代表 0~7 的字符,例如:\012 代表换行。 |
\xyy | 十六进制数,以 \x 开头,y 代表的字符,例如:\x0a 代表换行 |
\other | 其它的字符以普通格式输出 |
例子
# 续行,第1章所提到的实现多行语句
print("line1 \
line2 \
line3")
line1 line2 line3
# 反斜杠
print("\\")
# 单引号
print('\'')
# 双引号
print("\"")
# 铃声,执行后电脑有响声。
print("\a")
# 退格
print("Hello \b World!")
#结果:Hello World!
# 空,输出结果什么也没有
print("\000")
#