目录
1认识Python
1.1 Python的特点
1.简单、易学、免费、开源
2.解释型:Python是边解释边执行的
3.可移植
4.代码规范:Python采用强制缩进的方式
5.面向对象
6.胶水语言:标准版本的的Python调用C语言,并可以借助C语言的借口驱动调用所有的编程语言。
7.丰富的库:Python的标准库种类繁多,可以帮助处理各种工作
8.动态类型:声明变量时不需要指定数据类型
1.2动手编写Hello World
编写和运行Python有两种方式:1.交互方式;2.文件方式
1.2.1交互方式
Python安装包提供了交互运行工具——Python Shell,可以直接使用。
print("Hello World!")
如下图所示:
print()是输出函数,输出字符串Hello World!
1.2.2文件方式
这里使用的集成开发环境是PyCharm。
2基础语法
2.1标识符
表示符就是变量、函数、属性、类、模块等可以由程序员指定名称的代码元素。构成标识符的字符均遵循一定的命名规则。Python3的字符采用了双字节Unicode编码(Unicode是国际组织指定的可以容纳世界上所有文字和符号的字符编码方案)。
Python中标识符的命名规则如下:
1.区分大小写
2.首字符可以是下划线或者字母,但不能是数字。
3.除首字符外的其他字符必须是下划线、字母和数字
4.关键字不能作为标识符
5.不要使用Python的内置函数作为标识符
2.2关键字
关键字是由语言本身定义好的有特殊含义的代码元素。Python只有三十三个关键字。
False | def | if | raise | None | del | import | return | Ture |
elif | in | try | and | else | is | while | as | except |
lambda | with | assert | finally | nonlocal | yield | break | for | not |
class | from | or | continue | global | pass |
2.3变量
当你为一个变量赋值的时候,你也就声明了此变量。
同时,Python允许将不同类型的数据赋给同一个变量,使Python简单的同时,也可能会带来严重的Bug。
2.4语句
Python代码由关键字、标识符、表达式和语句三部分构成,语句是代码的重要组成部分。
一般情况下,一行代表一条语句,在结尾的时候我们不需要加分号,这一点和C/C++有所不同。
2.5代码注释
对于程序员来说,代码注释的重要性不言而喻。我们同样可以在Python中实现代码注释,使用 # 来注释。如:
还有一点注意的,在第一行输入 #coding = utf-8 ,意为告诉Python解释器该文件的编码集是UTF-8。
2.6模块
在Python中,一个模块就是一个文件,模块是保存代码的最小单位,在模块中可以声明变量、函数、属性和类等Python代码元素。
一个模块可以访问另一个模块,通常采用如下方式。
import<模块名>
一般来说有三种形式:
第一种形式:
第二种形式:
第三种形式:
如果想导入所有内容,则使用 import语句;如果导入一个元素,则使用from import语句;如果名称有冲突,则使用from import as。
3数字类型的数据
3.1Python中的数据类型
Python有六种主要的内置数据类型:数字、字符串、列表、元祖、集合和字典。列表、元祖、集合和字典可以容纳多项数据,我们可以将其称为容器类型的数据。
数字类型有四种:整数类型、浮点类型、负数类型和布尔类型。
3.2整数类型
type()函数返回数据类型,二进制表示方式(以0b或0B开头),八进制表示方式(以0o或者0O开头),十六进制表示方式(以0x或者0X开头)。
3.3浮点类型
浮点类型主要用来储存小数数值,Python的浮点类型为float类。Python只支持双精度浮点类型,而且是与电脑相关的。
3.4复数类型
许多编程原因都不支持复数,而Python则支持复数。
3.5布尔类型
bool是int的子类,他只有两个值:Ture和False。
3.6数字类型的相互转换
在Python的数字类型中,除了复数外,其他三种数字类型如整数、浮点数和布尔都可以相互转换,分为隐式类型和显式类型的转换。
3.6.1隐式类型的转换
数字之间可以进行数学计算,在进行数学计算时若数字类型不同,则会发生隐式类型的转换。
操作数1的类型 | 操作数2的类型 | 转换后的类型 |
布尔 | 整数 | 整数 |
布尔、整数 | 浮点 | 浮点 |
3.6.2显式类型的转换
需要用到转换函数,int()、float()、bool()。
4运算符
4.1算数运算符
运算符用于组织整数类型和浮点类型的数据,有一元运算符核二元运算符。
运算符 | 名称 | 例子 | 说明 |
+ | 加 | a+b | 求a和b的和 |
- | 减 | a-b | 求a与b的差 |
* | 乘 | a*b | 求a与b的积 |
/ | 除 | a/b | 求a除以b的商 |
% | 取余 | a%b | 求a除以b的余数 |
** | 幂 | a**b | 求a的b次幂 |
// | 地板除法 | a//b | 求小于a与b的商的最大整数 |
4.2比较运算符
比较运算符用于比较两个表达式的大小,其结果是布尔类型的数据,即True或者False。
运算符 | 名称 | 举例 | 说明 |
== | 等于 | a == b | a等于b时返回True,否则返回False |
!= | 不等于 | a!=b | a不等于b时返回True,否则返回False |
> | 小于 | a>b | a大于b时返回True,否则返回False |
< | 小于 | a<b | a小于b时返回True,否则返回False |
>= | 大于等于 | a>=b | a大于等于b时返回True,否则返回False |
<= | 小于等于 | a<=b | a小于等于b时返回True,否则返回False |
比较字符串的大小,即逐一比较字符Unicode编码的大小,如果两个字符串的第一个字符不能比较出大小,则比较两个字符串的第二个字符,知直到比较有结果才结束。
4.3逻辑运算符
逻辑运算符用于对布尔类型变量进行运算,其结果也是布尔类型。
运算符 | 名称 | 举例 | 说明 |
not | 逻辑非 | not a | a为Ture时,值为False,a为False时,值为True |
and | 逻辑与 | a and b | a,b全为True时,计算结果为True,否则为False |
or | 逻辑或 | a or b | a,b全为False时,计算结果为False,否则为True |
“逻辑与”、“逻辑或”采用了短路设计,在计算过程中只要结果确定,则不再计算后面的表达式,从而提高效率。
4.4位运算符
位运算符是以二进位为单位进行运算的,操作数和结果都是整数类型的数据。
运算符 | 名称 | 举例 | 说明 |
~ | 位反 | ~x | 将x的值按位取反 |
& | 位与 | x&y | 将x与y按位进行位与运算 |
| | 位或 | x|y | 将x与y按位进行位或运算 |
^ | 按异或 | x^y | 将x与y按位进行按异或运算 |
>> | 右移 | x>>a | 将x右移a位,高位采用符号位补位 |
<< | 左移 | x<<a | 将x左移a位,低位用0补位 |
a和b按位或进行或计算,只要有一位为1,这一位就为1,否则为0。
a和b按位与进行或计算,只有两位都为1,这一位才为1,否则为0。
a和b按位异或进行或计算,只有两位相反时,这一位才为1,否则为0。
a位反,加一取负。~a = (a+1)*(-1)
4.5赋值运算符
运算符 | 名称 | 举例 | 说明 |
+= | 加赋值 | a+=b | 等价于a=a+b |
-= | 减赋值 | a-=b | 等价于a=a-b |
*= | 乘赋值 | a*=b | 等价于a=a*b |
/= | 除赋值 | a/=b | 等价于a=a/b |
%= | 取余赋值 | a%=b | 等价于a=a%b |
**= | 幂赋值 | a**=b | 等价于a = a**b |
//= | 地板除法赋值 | a//=b | 等价于a =a //b |
&= | 位与赋值 | a&=b | 等价于a=a&b |
|= | 位或赋值 | a|=b | 等价于a=a|b |
^= | 位异或赋值 | a^=b | 等价于a=a^b |
<<= | 左移赋值 | a<<=b | 等价于a=a<<b |
>>= | 右移赋值 | a>>=b | 等价于a=a>>b |
4.6运算符的优先级
一般来说,按照你所感觉的优先级就差不多。在位运算优先级中,优先级从高到低大体是:算数运算符->位运算符->关系运算符->逻辑运算符->赋值运算符
优先级 | 运算符 | 说明 |
1 | () | 小括号 |
2 | ** | 幂 |
3 | ~ | 位反 |
4 | +,- | 正负号 |
5 | *,/,%,// | 乘、除、取余、地板除 |
6 | +,- | 加,减 |
7 | <<,>> | 位移 |
8 | & | 位与 |
9 | ^ | 位异或 |
10 | | | 位或 |
11 | <,<=,>,>=,<>,!=,== | 比较 |
12 | not | 逻辑非 |
13 | and,or | 逻辑与,逻辑或 |
5程序流程控制
5.1分支语句
5.1.1 if结构
if结构的语法如下:
if 条件:
语句体
示例代码如下:
# coding = utf-8
score = int(input("请输入分数:"))
if score >= 85:
print("优秀!")
if (score < 85) and (score >= 60):
print("继续努力!")
if score < 60:
print("加油!")
5.1.2 if-else结构
if-else的示例代码如下:
# coding = utf-8
score = int(input("请输入分数:"))
if score >= 60:
if score >= 85:
print("Great!")
else:
print("Good!")
else:
print("Come on!")
5.1.3 if-elif-else结构
示例代码如下:
# coding = utf-8
score = int(input("请输入分数:"))
if score >= 90:
print("Nice!")
elif score >= 80:
print("Great!")
elif score >=70:
print("Good!")
elif score >= 60:
print("Normal!")
else:
print("Come on!")
5.2循环语句
Python支持两种循环语句:while和for。
5.2.1while语句
先判断循环条件,再决定是否要执行循环体。
while 循环条件:
循环体语句组
[else:
语句组]
else子语句是在循环体正常结束时才执行的语句,当循环体被中断时不执行,当遇到break、retrun和有异常发生时都会中断循环。
示例代码:
# coding = utf-8
i = 0
while i * i < 10:
i += 1
print(str(i) + ' * ' + str(i) + ' = ',i * i)
else:
print("While over!")
# coding = utf-8
i = 0
while i * i < 10:
i += 1
if i == 3:
break
print(str(i) + ' * ' + str(i) + ' = ',i * i)
else:
print("While over!")
5.2.2 for语句
基于Python简单的设计理念,在Python中只有一种for语句,即 for-in 语句,可以遍历任意可迭代对象中的元素。
for语句的一般格式如下:
for 变量 in 可迭代对象:
循环体语句组
[else:
语句组]
示例代码如下:
# coding = utf-8
print("---字符串---")
for item in 'Hello':
print(item)
# 声明整数列表
numbers = [43, 32, 55, 74]
print("----整数列表----")
for item in numbers:
print(item)
注:可迭代对象包括字符串、列表、元组、集合和字典等。
关于else子语句,示例代码:
# coding = utf-8
print("---字符串---")
for item in 'Hello':
print(item)
else:
print("!")
# coding = utf-8
print("---字符串---")
for item in 'Hello':
if item == 'l':
break
print(item)
else:
print("!")
5.3跳转语句
跳转语句可以改变程序的执行顺序,包括break、continue和return。break和continue用于循环体中,而return用于函数中。
5.3.1 break语句
break语句用于强行退出循环体,不再执行循环体中剩余的语句。
# coding = utf-8
for item in range(10):
if item == 3:
break
print(item)
5.3.2 continue语句
continue 语句用于结束本次循环,跳过循环体中尚未执行的语句 ,接着进行终止条件的判断,以决定是否继续循环。
# coding = utf-8
for item in range(10):
if item == 3:
continue
print(item)
5.4 计算水仙花数
# coding = utf-8
i = 153;
r = 0;
s = 0;
t = 0
while i <= 407:
r = i // 100
s = (i - r * 100) // 10
t = i % 10
if i == (r ** 3 + s ** 3 + t ** 3):
print(i)
i += 1
计算得水仙花数为四个:
注意:如果循环体正常结束时会执行else语句,如果发生中断,则不运行else语句。
6容器类型的数据
Python内置的数据类型和序列(列表、元组等)、集合和字典等可以容纳多项数据,我们称它们为容器类型的数据。
6.1 序列
序列(sequence)是一种可迭代的、元素有序的容器类型的数据。 包括列表(list)、字符串(str)、元组(tuple)和字节序列(bytes)等。
6.1.1序列的索引操作
正值索引,第一个元素是0;负值索引,第一个元素是-1。
6.1.2加和乘操作
加(+)和乘(*)运算符也可以用于序列中的元素操作。加(+)运算符可以将两个序列连接起来,乘(*)运算符可以将两个序列重复多次。
6.1.3切片操作
序列的切片(Slicing)就是从序列中切分出小的子序列。
切片运算符的语法形式为[strat: end: step]。其中,strat 是开始索引, end是结束索引,step是步长 (切片时获取的元素的间隔,可以为正整数,也可以为负整数)。步长省略则默认为1,。
6.1.4成员测试
成员测试运算符有两个:in 和 not in,in 用于测试是否包含某一个元素,not in用于测试是否不包含某一个元素。
6.2列表
列表(list)是一种可变序列类型,我们可以追加、插入、删除和替换列表中的元素。
6.2.1创建列表
创建列表有两种方法。
1. list(iterable)函数:参数 iterable是可迭代对象(字符串、列表、元组、集合和字典等)
2. [元素1 ,元素2,元素3,…]:指定具体的列表元素,元素之间以逗号分隔,列表元素需要使用中括号括起来。
6.2.2追加元素
列表是可以进行改变的序列对象,可以对其追加元素。
1. 在列表中追加单个元素时,可以使用列表的append(x)方法。
2.追加多个元素时,可以用加(+)运算符或者列表的extend(t)方法。
在Python中方法和函数是有区别的,方法隶属于类,通过类或对象调用方法,例如在list。append(x)中,list是列表对象;函数不隶属于任何类,直接调用即可,例如list(iterable)。
6.2.3插入元素
如果想在列表中插入元素,可以使用列表的list.insert(i,x)方法,其中,指定索引位置,x是要插入的元素。
6.2.4替换元素
直接使用赋值符号替换。
6.2.5删除元素
可以使用列表的list。remove(x)方法。
6.3元组
元组是一种不可变序列类型。
6.3.1创建元组
创建元组的方法。
1.tuple(iterable)函数:参数iteral是可迭代对象(字符串、列表、元组、集合和字典等)。
2、(元素1,元素2,元素3,……):指定具体的元组元素,元素之间以逗号分隔。杜宇元组元素,可以使用小括号括起来,也可以省略小括号。
6.3.2 元组拆包
创建元组,并将多个数据放到元组中,这个过程被称为元组打包。
元组打包相反的操作是拆包,就是将元组中的元素取出,分别赋给不同的变量。
6.4集合
集合(set)是一种可迭代的、无序的、不能包含重复元素的容器类型的数据。
6.4.1创建集合
序列中的元素是有序的;集合中的元素是无序的,但元素不能重复。
有两种方式创建集合。
1.set(iterable)函数:参数iterable是可迭代对象(字符串,列表、元组、集合和字典等)。
2.{元素1, 元素2, 元素3, ……}:指定具体的集合元素,元素之间以逗号分隔。对于集合元素,需要使用大括号括起来。
6.4.2修改集合
修改集合类似于修改列表, 可以向其中插入和删除元素。修改可变集合有如右所示的常用方法。
add(elem):添加元素,如果元素已经存在,则不能添加,不会抛出错误。
remove(elem):删除元素,如果元素不存在,则抛出错误。
clear():清楚集合。
6.5 字典
字典(dict)是可迭代的、通过键(key)来访问元素的可变的容器类型的数据。
字典由两部分视图构成:键视图和值视图。键视图不能包含重复的元素,值视图能。在键视图中,键和值是成对出现的。
6.5.1 创建字典
我们可以通过以下两种方法创建字典。
1. dict()函数。
2. {key1:value,key2:value,…,key_n: value_n} : 指定具体的字典键值对,键值对之间以逗号分隔,最后用大括号括起来。
6.5.2 修改字典
字典可以进行添加、替换和删除。
6.5.3访问字典视图
我们可以通过三种方式访问字典视图。
items():返回字典的所有键值对视图。keys():返回字典键视图。values():返回字典值视图。
6.6遍历字典
# coding = utf-8
s_dict = {102: '张三', 105: '李四', 109: '王五'}
print('---遍历建---')
for s_id in s_dict.keys():
print('学号:' + str(s_id))
print('---遍历值---')
for s_name in s_dict.values():
print('学生:' + s_name)
print('---遍历键:值---')
for s_id, s_name in s_dict.items():
print('学号:{0} - 学生:{1}'.format(s_id, s_name))
注意:
1. 序列元素是有序的。其中列表是可变的,元组是不可变的。
2. 集合元素是无序的,且不能重复。
3. 字典通过键来访问元素,由键视图和值视图不能包含重复的元素。