第一章 从零开始
1.1 概述
定义一:计算机软件(Software),简称软件,是一系列按照特定顺序组织的计算机数据和指令的集合。如日常办公软件Office、Windows操作系统、微信、QQ、网站等都是软件。
定义二:编程语言(Programming Language),是一种语言形式,它指定了一组可用于产生各种输出的指令。编程语言由计算机的指令构成,可以用来创建实现特定算法的程序。常见的编程语言包括Python、C、Java、C++、C#、R、JavaScript、PHP等。
定义3:计算机程序(Computer Programming),简称程序,是由计算机执行特定任务指令的集合。
1.2 什么是Python
Python语言的名称来自英国BBC的一个节目名称《蒙提*派森的飞行马戏团》(Monty Python’s Flying Circus)。由于Python语言的作者Guido Van Rossum是该节目的忠实粉丝,于是把该节目里的Python一词作为该语言的正式名称。
Python是一门运用广泛的通用高级编程语言,由Guido Van Rossum在1989年创建并于1991年首次发布。Python是一门解释性的语言,它具有强调代码可读性的设计理念,以及允许程序员用比C++或Java等语言更简练的表达功能。Python的底层使用C语言编写成的,运行速度快。
- Python语言的优点
(1)简单易用
(2)提供了大量的功能类库
(3)Python具有语言的兼容性
(4)具有跨系统移植能力
(5)代码免费、开源。 - Python语言的发展的现状
(1)2017年IEEE Spectrum编程语言排名第一;
(2)被全球计算机领域顶尖的大学作为程序设计课程,如卡内基梅隆大学、麻省理工学院等。
1.4 Python代码编译工具
定义4:编译器(Compiler),就是把高级语言一次性翻译成计算机能识别的机器语言的一种软件。
定义5:解释器(Interpreter),就是把高级语言编写的程序,在执行时,一行一行地翻译成机器语言的一种软件。
定义6:标识符(Identifier),在Python语言中用于规范命名解释器能识别的可执行代码对象的名称。
总结:
- Python 3.6.3(32-bit)版本的软件包,能安装到64位CPU的计算机上。
- Python语言的一大亮点是提供了强大的标准库和第三方库支持。
- Python支持强大的科学计算功能
- Python 3.6.3自带的编程调试环境包括了IDLE和Python.exe(代码解释器)。
- 脚本式代码编辑,先要把代码保存到扩展名为.py的文件中。
- Python语言在命名上是大小写敏感的。
- Python语言的注释符号是#。
- Python语言变量、关键字、函数、类等的组成只能是字母、数字和下划线。
第二章 变量
2.1 变量
定义1:变量(Variable),指在计算机编程中与关联的标识符配对的内存存储位置,在使用时含相关类型的值,其值可以修改。
在Python语言中,变量被使用时,在内存里将产生两个动作,一是开辟指定的地址空间,二是赋予指定的变量值。变量在指定的同时,必须强制赋初始值,否则解释器会报错。
>>> a # a变量未赋值,解释器认为非法,报未定义出错
>>> a=0 # a变量赋予初始值为0,解释器执行通过
>>> print(a)
> 0
- 多个变量赋值
>>> one=two=three=10 # 多个变量赋值方式一
>>> print(one,two,three)
> 10,10,10
>>> one,two,three=10,10,10 # 多个变量赋值方式二
>>> print(one,two,three)
> 10,10,10
- 变量值类型
变量值的类型在赋值后被隐形确定。
>>> a = 0 #0就是整数类型的值
>>> a = 'OK' #OK是字符串类型的值
>>> a = True #True就是布尔型的值
Python语言的基本变量类型包括字符串型(String)、数字(Numeric)、列表(List)、元组(Tuple)、字典(Dictionary)五大类。
注意
变量的命名规则:
变量、关键字、函数、类在Python中,只能由字母、数字、下划线组成。也就是小写字母a ~ z、大写字母A ~ Z 、下划线_和数字0 ~ 9,才能被使用。注意命名时,数字不能被放在你名称首位
变量对应的是常量,既不能变的数据对象
2.2 字符串
定义2:字符串(String),由任意字符组成,用单引号(’)、双引号(")、或三引号(’’’)成对表示。
>>> name='Tom'
>>> name1="Jerry"
>>> name2='''Sreck'''
>>> print(name,name1,name2,'''《Tom&Jerry》''')
> Tom Jerry Sreck 《Tom&Jerry》
>>> name,name1,name2='Tom',"Jerry",'''Sreck'''
>>> print(name,name1,name2,'''《Tom&Jerry》''')
> Tom Jerry Sreck 《Tom&Jerry》
一般情况下,使用单引号和双引号已经足够。在特殊情况下,可以发挥三引号的优势,允许只有一个字符串跨多行,字符串可以包括换行符、制表符以及其他特殊字符。
>>> text1='''带格式的文本,往往含有特殊格式的控制字符,如
制表符TAB(\t),又如
换行符[\n]'''
>>> print(text1)
> 带格式的文本,往往含有特殊格式的控制字符,如
制表符TAB( ),又如
换行符[
]
注意:
(1) 只有引号,没有字节内容的字符串也是合法的。name=’’
(2) 在英文输入模式下(EN)为半角输入,中文、日文等模式下默认为全角输入。中文全角一个字符占两字节。
(3) 在字符串中用反斜杠(\)开头的代表字符转义符号。
- 字符串基本操作
(1) 字符串的读取
>>> name="Tom is a cat!"
# 单下标读取:[下标]
>>> print(name[1]) # 读取下标为1的字符
> o
# 切片:[左下标:右下标]
>>> print(name[4:6])
> is
>>> print(name[:3]) # 读取小标为0~3的字符
> Tom
>>> print(name[:]) # 读取整个字符串
> Tom is a cat!
# 带步长的切片读取:[左下标:右下标:步长]
>>> name[::2] # 从头到尾步长为2,读取字符
> Tmi a!
# 负下标读取:从负数下标从右到左读取对应的字符串值。
>>> print(name[-1]) # 从右往左,读取右边第一个字符
> !
>>> print(name[-4:-1]) # 从右往左,读取倒数第四个、第三个、第二个字符。
> cat
>>> name[13] # 使用下标时,超出字符串范围读取值,解释器会报错。
定义3:切片(Slice),python通过带 “左下标:右下标” 方式,获取集合一部分元素的操作叫切片。
注意:
name="Tom is a cat!"
下标值都为正时,从T开始,左下标当作0数起,右下标当作1数起,向后数逐个+1
下标值都为负时,从 ! 开始,左下标当作-1数起,右下标当作0数起,向后数逐个-1
(2) 字符串值的合并
>>> name='Tom'
>>> job="teacher"
>>> record=name+","+job # 用+合并三个字符串
>>> print(record)
> Tom,teacher
(3) 字符串值的修改
>>> name='There cool cat'
>>> new_name=name[:11]+'dog' # 通过字符串合并,赋值成一个新的字符串
>>> print(new_name)
> There cool dog
上述字符串修改成功,是通过读取字符串并合并的方式实现的。
不能直接对字符串做出如下修改操作:
>>> name[6]='C' # 解释器将报赋值出错
(4) 字符串的删除
>>> del(name) # del()函数对整个字符串进行删除,再次调用会报错
说明:
del(x)函数删除内存中的一个指定的元素x,x可以是字符串、数字、列表、元组、字典、类等。
- 字符串其他常用操作
(1) 获取字符串长度
>>> hello="Hello, three cool cat!"
>>> print(hello)
> 22
>说明:
len(x) 函数可以返回一个对象的长度,x可以为字符串、列表、元组、字典。
(2) r/R原始字符串控制符号
>>> print('C:\back\name')
> Cack
>>> print(r'C:\back\name')
> C:\back\name
(3) 重复输出字符串(*)
>>> print('Cat'*2)
> CatCat
(4) 格式字符串(%)
>>> age=10
>>> print("Tom's age is %d"%(age))
> Tom's age is 10
2.3 数字和运算符
数字(Digital)分为整数(Integer)、浮点数(Float)、复数(Complex)、布尔(Boolean)。
- 算术运算符
运算符 | 中文名称 | 功能描述 | 例子 |
---|---|---|---|
+ | 加 | 两个数字相加 | print(5+3),输出8 |
- | 减 | 两个数字相减 | print(5-3),输出2 |
* | 乘 | 两个数字相乘 | print(5*3),输出15 |
/ | 除 | 两个数字相除 | print(6/3),输出2 |
% | 取模 | 返回除法的余数 | print(5%3),输出2 |
** | 幂 | 返回x的y次幂 | print(5**3),输出125 |
// | 取整除 | 返回商的整数部分 | print(5//3),输出1 |
- 整数
定义4:整数(Integer,简写Int) 又称为整型,由正整数,零和负整数构成,不包括小数、分数。在Python中,整数长度不受限制,仅受(虚拟)内存的限制
================================== 加、减、乘、除运算 =================================
>>> num1=10
>>> num2=3
>>> count=num1+num2
>>> print('加法和为:%d'%(count))
> 加法和为:13
>>> print('减法差为:%d'%(num1-num2))
> 减法差为:7
>>> print('乘法积为:%d'%(num1*num2))
> 乘法积为:30
>>> print('除法商为:%d'%(num1-num2))
> 减法差为:7
>>> print('减法差为:%d'%(num1/(num2+2)))
> 除法商为:2
>>> result=(num1+num2)*(num1-num2)/7-3
>>> print('加减乘除混合运算:%d'%(result))
> 加减乘除混合运算:10
================================== 取模、幂、取整除运算 =================================
>>> x=5
>>> y=3
>>> print(x%y)
> 2
>>> print(x//y)
> 1
>>> print(x**y)
> 125
数字运算符里幂的优先级最高,其次为乘、除、取模、取整,再次为加、减。
注意:
① 在python 2.X版本下,不能整除的两个整数相除时,将会产生取整(//)的效果。例如,5/2运算结果为2。在python 3.X版本下,5/2的运算结果为2.5,所有的除法结果 都为带小数的(浮点数)。
② 0不能做除数。
- 浮点数
定义5:浮点数(Float),对应于数学中的实数(Real)。在Python语言中,浮点数是带小数点的数字。由于计算机内存中存储浮点数的位数有限,所以超过指定长度后,末尾将采取近似值处理。因此,浮点数不一定是精确值
>>> print(10.0/3) # 10.0是浮点数
> 3.333333333333335
>>> print(10*2+0.1)
> 20.1
>>> print(1.1+0.9)
> 2.0
>>> print(4.0/2.0)
> 2.0
- 复数
定义6:复数(Complex) 由实部和虚部组成,把实数扩展到了虚数,其数学表示形式为a+bj(a、b均为实数)。a称为实部,b称为虚部,j为虚数单位(j2=-1),bj称为虚数。
>>> print((1-2j)) # python语言里复数表示
> (1-2j)
>>> print((1-2j)*(2-3j)) # 复数的乘法
> (-4-7j)
复数的实部和虚部
>>> print((1-2j).real) # 检测复数实部
> 1.0
>>> print((1-2j).imag) # 检测复数虚部
> -2.0
- 布尔
定义7:布尔(Boolean) 又称逻辑。在Python中用True、False表示,用于逻辑判断。该数据是一种特殊的整数类,True可以用1替换,代表 “真” ;False可以用0替换,代表 “假” 。
>>> print(True) # 首字母必须大写,否则出错
> True
布尔的逻辑运算方式与数学完全一致。
>>> print(True and True)
> True
>>> print(True or False)
> True
>>> print(not False)
> True
逻辑运算符
运算符 | 中文名称 | 功能描述 |
---|---|---|
and | 与 | 只有and两侧的逻辑值为1时,其结果为1.其他情况为0 |
or | 或 | 如果or两侧至少有一个逻辑值为1时,其结果为1,其他情况为0 |
not | 非 | not 0得1,not 1得0 |
- 二进制
定义8:二进制(Binary) 数据是用0和1两个数字来表示的数。它的基数为2,进位去、规则则是 “逢二进一” 。最新的python版本中0b开始表示二进制数。
>>> print(0b1110)
> 14 # 输出十进制14
二进制码(范围为00000000~01111111)对应的十进制码详见ASCII表。
>>> print(bin(14)) # bin()函数把十进制数转为二进制数
> 0b1110 # 输出二进制值0b1110
二进制位运算符
运算符 | 中文名称 | 运算规则描述 |
---|---|---|
& | 按位与运算符 | (m&n),参与运算的m、n,如果相应位数都为1则该位的结果为1,否则为0。 |
| | 按位或运算符 | (m|n),参与运算的m、n,只要对应的二进制位有一个为1,则结果为1;只有当对应的位都为0时,结果才为0。 |
^ | 按位异或运算符 | (m^n),参与运算的m、n,当对应的二进制位相异时,结果为1;相同时,结果为0。 |
~ | 按位反转运算符 | (~m),将二进制+1之后乘以-1,m的按位翻转是-(m+1)。 |
<< | 左移动运算符 | m<<x,把m的二进制位全部左移x位,高位在超出操作系统支持位数时,丢弃,不超出时左移,低位补0。x为需要移动的数量。 |
>> | 右移动运算符 | m>>x,把m的二进制位全部右移x位,低位丢弃,高位补0。x为需要移动的数量。 |
注:m、n都为二进制数,x为整数。
与(&)运算
>>> print( 0b00110101 & 0b01100001 )
> 33
或(|)运算
>>> print( 0b00110101 | 0b01100001 )
> 117
异或(^)运算
>>> print( 0b00110101 ^ 0b01100001 )
> 84
反转(~)运算
>>> print(~0b00110101)
> -54
左移运算(<<)
>>> print(0b00110101<<2)
> 212
右移运算(>>)
>>> print(0b00110101>>2)
> 13
说明:
① chr(x)函数,可将十进制数→ASCII码字符。
② Python语言还支持八进制(0o开头表示)、十六进制(0x开头表示)的运算。
③ 八进制:octal ; 十进制:decimalism ; 十六进制:hexadecimal 。
- 比较运算符
运算符 | 中文名称 | 运算规则描述 |
---|---|---|
== | 等于 | x==y,返回True,否则返回False |
!= | 不等于 | x!=y,返回True,否则返回False |
> | 大于 | x>y,返回True,否则返回False |
< | 小于 | x<y,返回True,否则返回False |
>= | 大于等于 | x>=y,返回True,否则返回False |
<= | 小于等于 | x<=y,返回True,否则返回False |
- 赋值运算符
运算符 | 中文名称 |
---|---|
= | 简单赋值 |
+= | 加法赋值 |
-= | 减法赋值 |
*= | 乘法赋值 |
/= | 除法赋值 |
%= | 取模赋值 |
**= | 幂运算 |
//= | 取整除赋值 |
<<= | 左移位赋值 |
>>= | 右移位赋值 |
&= | 位与赋值 |
|= | 位或赋值 |
^= | 位异或赋值 |
说明:
增量赋值比一般赋值在内存中具有空间占用优势。
2.4 数据类型转换
(1)转化为整数函数int(x),x为数字或字符串型的数字,但不支持复数。
>>> print(int(3.2)) # x为数字
> 3
>>> print(int('10')) # x为字符串型的数字
> 10
(2)转化为浮点数函数float(x),x为数字或字符串型的数字,但不支持复数
>>> print(float(10)) # x为数字
> 10.0
>>> print(float('10')) # x为字符串型的数字
> 10.0
(3)转化为复数函数complex(x, y),x、y为整数、浮点数、布尔数;当只有x参数时(y=0),可以是字符串正整数、浮点数、布尔数。
>>> complex(2,2)
> (2+2j)
>>> complex('10')
> (10+0j)
(4)转化为str(x)
>>> str(5+2j)
> '(5+2j)'
(5)转化为二进制函数bin(x),x为非负整数。
>>> bin(0)
> 0b0
(6)转化为八进制函数oct(x),x为非负整数。
>>> oct(10)
> 0o12
(7)转化为十六进制函数hex(x),x为非负整数。
>>> hex(20)
> 0x14
(8)chr(x)函数,十进制数→ASCII字符,x为十进制数。
>>> chr(97)
> 'a'
(9)ord(x)函数,ASCII字符→十进制数,x为ASCII字符。
>>> ord('a')
> 97