前言
介绍python相关语法,及部分库函数的使用,有待完善
一、Python开发环境搭建
1.1 安装Python解释器
https://download.csdn.net/download/weixin_44567668/86399417
1.2 运行方法
print("Hello World")
①在IDLE输入代码,按F5运行
②在命令提示符里输入Python进入Python环境,输入代码按回车即可运行,最后输入exit()退出安装Python环境
③用记事本或者notepad++写代码,保存为 .py格式文件,然后用命令提示符或者IDLE运行文件
1.3 Python第三方库安装
1.3.1 pip工具安装(在命令行里运行)
pip -h #列出pip子命令
pip install pygame #安装pygame库
pip install -U pip #更新已安装库的版本,这里用pip更新本身
pip uninstall pygame #卸载pygame库
pip list #列出当前系统已安装的第三方库
pip show pip#列出某个已经安装库的信息
pip download Pyqt5 #下载Pyqt5
pip search installer #联网搜索installer库名或者关键字
1.3.2 文件安装
登录http://www.lfd.uci.edu/~gohlke/pythonlibs/
找到对应的文件下载到本地,然后用pip命令指定地址安装
二、python语法元素
2.1 程序格式框架
Python采用缩进(可以用Tab或者4个空格)来表明格式框架
# 符号为python语言注释符
单层缩进代码属于之前最邻近的一行非缩进的代码
多层缩进代码根据缩进关系决定所属范围
#e2.1TempConvert.py
TempStr = input("请输入带有符号的温度值: ")
while TempStr[-1] not in ['N','n']:
if TempStr[-1] in ['F','f']:
C = (eval(TempStr[0:-1]) - 32)/1.8
print("转换后的温度是{:.2f}C".format(C))
elif TempStr[-1] in ['C','c']:
F = 1.8*eval(TempStr[0:-1]) + 32
print("转换后的温度是{:.2f}F".format(F))
else:
print("输入格式错误")
TempStr = input("请输入带有符号的温度值: ")
2.2 命名与保留字
保留字也称关键字,指被编程语言内部定义并保留使用的标识符,程序员不能定义与保留字相同的标识符,python3有33个保留字
False | def | if | raise | None |
---|---|---|---|---|
del | import | return | True | 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 字符串
字符串包含两种序号体系:正向从0递增序号;反向从-1递减序号
也可以采用[N:M]格式进行区间访问,从N到M访问(不包括M)的字符串
TempStr = "110C"
print(TempStr[-1])
print(TempStr[0:-1])
输出如下:
C
110
2.4 赋值语句
t = x
x,y = y,x
2.5 input()函数
用户在控制台输入什么内容,input()函数都以字符串类型返还结果
TempStr = input("请输入带有符号的温度值: ")
2.6 eval()函数
将输入的字符串转化为Python语句,即变成数字或字符,输入如果直接输入带引号的,将会将其解释成变量,如果没有声明则会报错
#输出2
x = 1
eval(''x+1')
#输出102
TempStr = "102C"
eval(TempStr[0:-1])
#输出hello
eval("'hello'")
2.7 print()函数
配合format()将输出变量整理成期望输出的格式
C = (eval(ValueStr[0:-1]) - 32)/1.8
print("转换后的温度是{:.2f}C".format(C))
三、基本数据类型
3.1 数字类型
3.1.1整数类型
进制类型 | 引导符号 | 描述 |
---|---|---|
十进制 | 无 | 如102,-142 |
二进制 | 0b或0B | 0b101 |
八进制 | 0o或0O | 0o711 |
十六进制 | 0x或0X | 0xABC |
3.1.2浮点数类型
用字母e或者E作幂的符号,以10为基数
3.1.3复数类型
复数的虚数通过后缀“J”或者“j”来表示
3.2 数字类型的操作
3.2.1数值运算操作符
操作符 | 描述 |
---|---|
x+y | x和y之和 |
x-y | x与y之差 |
x*y | x与y之积 |
x/y | x与y之商 |
x // y | x与y的整数商 |
x % y | x对y取余 |
-x | x的负值 |
x ** y | x的y次幂 |
3.2.2数值运算函数
函数 | 描述 |
---|---|
abs(x) | x的绝对值 |
divmod(x,y) | (x//y,x%y),输出为二元组形式 |
pow(x,y[,z]) | (x**y)%z |
round(x[,ndigits]) | 对x四舍五入,保留ndigits位小数 |
max(x1,x2,…) | 求最大值 |
min(x1,x2…) | 求最小值 |
3.2.3数字类型转换函数
函数 | 描述 |
---|---|
int(x) | 将x转化为整数,x可以是浮点数或字符串 |
float(x) | 返回浮点数x或字符串x对应的整数类型 |
complex(re[,im]) | 生成一个复数,实部为re可以为字符串,虚部为im不可以为字符串 |
3.3 字符串类型表示
3种表示方法:
单引号字符串:可以使用双引号作为字符串的一部分
双引号字符串:可以使用单引号作为字符串的一部分
三引号字符串:出了可以表示使用双引号和单引号,也可以换行
字符串以Unicode编码存储,因此字符串英文和中文都算作1个字符,其中\表示转义
特殊的格式化控制字符:
字符 | 含义 |
---|---|
\a | 蜂鸣,铃声 |
\b | 回退 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表 |
\v | 垂直制表 |
\0 | NULL |
3.4 基本字符串操作符
操作符 | 描述 |
---|---|
x+y | 链接两个字符串x与y |
x * n | 复制n次字符串x |
x in s | 如果x是s的子串,返回True,否则返回False |
str[i] | 索引,返回第i个字符 |
str[N:M] | 切片,返回索引第N到M的子串,其中不包含M |
3.5 内置字符串处理函数
函数 | 作用 |
---|---|
len(x) | 返回字符串x的长度 |
str(x) | 返回任意类型x所对应的字符串形式 |
chr(x) | 返回Unicode编码x对应的单字符 |
ord(x) | 返回单字符表示的Unicode编码 |
hex(x) | 返回整数x对应十六进制的小写形式字符串 |
oct(x) | 返回整数x对应八进制的小写形式字符串 |
3.6 内置字符串处理方法
方法 | 描述 |
---|---|
str.lower() | 返回字符串str的副本,全部字符小写 |
str.upper() | 返回字符串str的副本,全部字符大写 |
str.islower() | 当str所有字符都是小写时,返回True,否则返回False |
str.isprintable() | 当str所有字符都是可打印时,返回True,否则返回False |
str.isnumeric() | 当str所有字符都是数字时,返回True,否则返回False |
str.isspace() | 当str所有字符都是空格时,返回True,否则返回False |
str.endswith(suffix[,start[,end]]) | str[start:end]以suffix结尾返回True,否则返回False |
str.startswith(prefix[,start[,end]]) | str[start:end]以prefix[结尾返回True,否则返回False |
str.split(sep=None,maxsplit=-1) | 返回一个列表,由str根据sep被分配的部分构成 |
str.count(sub[,start[,end]]) | 返回str[start:end]中sub子串出现的次数 |
str.replace(old,new[,count]) | 返回字符串str的副本,所有old子函数被替换成new,如果count给出,则前count次old出现被替换 |
str.center(width[,fillchar]) | 字符串居中函数 |
str.strip([chars]) | 返回字符串str的副本,在其左侧和右侧去掉chars中列出的字符 |
str.zfill(width) | 返回字符串str的副本,长度位width,不足部分在右侧添0 |
str.format() | 返回字符串str的一种排版格式 |
str.join(iterable) | 返回一个新字符串,由组合数据类型iterable变量的每个元素组成,元素间用str分割 |
3.7 字符串格式化
3.7.1 format()方法的基本使用
<模板字符串>.format(<逗号分隔函数>)
如果大括号内没有序号,则按出现顺序替换
如果大括号指定了序号,按照序号对应的参数替换
"圆周率{{{1}{2}}}是{0}".format("无理数",3.1415,"...")
#输出:圆周率{3.1415...}是无理数
3.7.2 format()方法的格式控制
: | <填充> | <对齐> | <宽度> | <,> | <.精度> | <类型> |
---|---|---|---|---|---|---|
引导符号 | 用于填充的单个字符 | <左对齐>右对齐^居中对齐 | 槽的设定输出宽度 | 数字的千位分隔符 | 小数精度或字符串长度 | 整数类型或浮点数类型 |
四、程序控制结构
4.1 分支结构
单分支结构:if语句
二分支结构:if-else语句
多分支结构:if-elif-else语句
Python关系操作符:
操作符 | 含义 |
---|---|
< | 小于 |
<= | 小于或等于 |
>= | 大于或等于 |
> | 大于 |
== | 等于 |
!= | 不等于 |
PM = eval(input("请输入PM2.5数值: "))
if 0<= PM < 35:
print("空气优质,快去户外运动!")
elif 35 <= PM <75:
print("空气良好,适度户外活动!")
else:
print("空气污染,请小心!")
4.2 循环结构
4.2.1 遍历循环:for循环
for <循环变量> in <遍历结构>:
<语句块>
else:
<语句块>
4.2.2 无限循环语句
While <条件>:
<语句块>
else:
<语句块>
4.2.3 循环保留字:
break:用来跳出最内层for或while循环
continue:结束当前当次循环,继续下一次循环
for s in "PYTHON"
if s=="T":
break
print(s,end="")
4.3 程序的异常处理
可以用来发生错误时,抛出错误信息
try:
<语句块1>
except: <异常类型1>:
<语句块2>
else:
<语句块3>
finally:
<语句块4>
示例代码:
try:
alp = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
idx = eval(input("请输入一个整数: "))
print(alp[idx])
except NameError:
print("输入错误,请输入一个整数!")
except:
print("其他错误")
五、函数与代码复用
5.1 函数的定义
语法形式如下:
def <函数名> (<参数列表>):
<函数体>
return <返回值列表>
示例代码:
def happy():
print("Happy birthday to you!")
def happyB(name):
happy()
print("Happy birthday, dear {}!".format(name))
happy()
happyB("Mike")
print()
happyB("Lily")
5.2 lambda函数——匿名函数
匿名函数并非没有名字,而是将函数名作为函数结果返回,语法格式如下:
<函数名> = lambda <参数列表> : <表达式>
等价于:
def <函数名> (参数列表):
return <表达式>
f = lambda x,y : x+y
f(10,12)
5.3 函数参数传递
5.3.1 可选参数和可变数量参数
当函数被调用的时候,没有对应的参数值,则使用函数定义的默认值代替,可选参数必须定义在非可选参数的后面
def dup(str,time = 2):
print(str*times)
dup("knock~")
dup("knock~",4)
在参数前加上*即可变成可变数量参数,可变数量参数只能在参数列表后面
def vfun(a,*b):
for n in b:
a += n
return a
vfun(1,2,3,4)
5.3.2 参数位置和名称的传递
Python提供了按照形参名称输入的方式
示例代码:
func(x1,x2)
return
result = func(x2=1,x1=4)
5.2.3 函数的返回值
return可以将函数运算结果返回给函数被调用的参数。函数退出后,局部变量被释放,全局变量的值没有改变
5.4 库的引用
使用import引用函数库有以下两种方式:
方式一,调用库名中所有函数:
import <库名>
#使用库函数格式
<库名>.<函数名> (<函数参数>)
示例代码如下:
import turtle
turtle.setup(650, 350, 200, 200)
turtle.penup()
方式二,使用函数时不需要写库名:
from <库名> import <函数名,函数名,.....>
from <库名> import * # *是通配符,表示所有函数
#调用方式如下
<函数名> (<函数参数>)
示例代码如下:
from turtle import *
setup(650, 350, 200, 200)
六、组合数据类型
组合序列类型可以分成3类:序列类型、集合类型和映射类型
6.1 序列类型
序列类型是元素向量,元素之间存在先后关系,通过序号访问。Python中很多数据类型是序列类型,其中比较重要的有str(字符串)、tuple(元组)和list(列表)。
- 6.1.1序列类型操作符和函数如下:
操作符 | 描述 |
---|---|
x in s | 如果x是s的元素,返回True,否则返回False |
x not in s | 如果x不是s的元素,返回True,否则返回False |
s + t | 连接s和t |
s * n | 将序列s复制n次 |
s[i] | 索引,返回序列第i个元素 |
s[i:j] | 分片,返回包含序列s第i到j个元素的子序列(不包含第j个元素) |
s[i:j:k] | 步骤分片,返回包含序列s第i到j个元素以k为步数的子序列 |
len(s) | 序列s的元素个数 |
min(s) | 序列s的最小元素 |
max(s) | s的最大元素 |
s.index(x[,i[,j]]) | 序列s从i开始到j位置中第一次出现x的位置 |
s.count(x) | 序列s中出现x的总次数 |
- 6.1.2 列表类型和操作
列表用中括号[]表示,也可以通过list()函数将元组或字符串转化成列表
列表类型的操作:
函数或方法 | 描述 |
---|---|
ls[i] = x | 替换列表ls第i数据项为x |
ls[i:j]=lt | 用列表lt替换列表ls第i到第j项数据(不含第j项) |
ls[i:j:k]=lt | 用列表lt替换列表ls第i到第j项以k为步数数据 |
del ls[i:j] | 删除列表ls第i到第j项数据 |
del ls[i:j:k] | 删除列表ls第i到第j项以k为步数的数据 |
ls+=lt 或ls.extend(lt) | 将列表lt元素添加到ls中 |
ls *= n | 更新列表ls,其元素重复n次 |
ls.append(x) | 在列表ls最后添加一个元素x |
ls.clear() | 删除ls所有元素 |
ls.copy() | 生成一个新列表,复制ls中的所有元素 |
ls.insert(i,x) | 在列表ls的第i位置增加元素x |
ls.pop(i) | 将列表ls中的第i项元素取出并删除该元素 |
ls.remove(x) | 将列表中出现的第一个元素x删除 |
ls.reverse() | 列表ls中元素反转 |
- 6.1.3 元组
元组采用逗号和圆括号来表示,元组一旦建立就不能被修改。元组除了用于表达固定数据项,还可以用于以下3种情况:函数多返回值、多变量同步赋值、循环遍历
#元组的创建
creature = "cat","dog","tiger"
color = ("red",0x0011,creature)
#函数多返回值
def func(x):
return x,x**3
#多变量同步赋值
a,b = 'dog','tiger'
a,b = (b,a)
#循环遍历
for x,x in ((1,0),(2,5),(3,8)):
print(math.hypot(x,y))
6.2 集合类型
集合类型是元素集合,元素之间无序。集合中元素不可重复,元素类型只能是固定类型。
集合用大括号{}表示:
S = {425,"BIT",(10,"CS")}
集合类型操作符如下所示:
操作符 | 描述 |
---|---|
S-T或S.difference(T) | 返回一个新集合,在集合S中但不在T中的元素 |
S-=T 或 S.difference_update(T) | 更新集合S,包括在集合S中但不在集合T中的元素 |
S & T 或 S.intersection(T) | 返回一个新集合,包括同时在集合S和T中的元素 |
S &=T 或 S.intersection_update(T) | 更新集合S,包括同时在集合S和T中的元素 |
S^T 或 S.symmetric_difference(T) | 返回一个新集合,包括集合S和T中的元素,但不包括同时在其中的元素 |
S^=T 或 S.symmetric_difference_update(T) | 更新集合S,包括集合S和T中的元素,但不包括同时在其中的元素 |
S|T 或 S.union(T) | 返回一个新集合,包括集合S和T中的所有元素 |
S|= T 或 S.update(T) | 更新集合S,包括集合S和T中的所有元素 |
S<=T 或 S.issubset(T) | 如果S与T相同或S是T的子集,返回True,否则返回False,可以用S<T判断S是否是T的真子集 |
S>=T 或 S.issuperset(T) | 如果S与T相同或S是T的超集,返回True,否则返回False,可以用S>T判断S是否是T的真超集 |
集合类型的操作函数或方法:
操作函数 | 描述 |
---|---|
S.add(x) | 如果数据项x不子啊集合S中,将x增加带s |
S.clear() | 移除S中的所有数据项 |
S.copy() | 返回集合S的一个副本 |
S.pop() | 随机返回集合S中的一个元素,如果S为空,产生KeyError异常 |
S.discard(x) | 如果x在集合S中,移除该元素; |
S.remove(x) | 如果x在集合S中,移除该元素;如果不在则产生KeyError异常 |
S.isdisjoint(T) | 如果集合S与T没有相同元素,返回True |
len(S) | 返回集合S的元素个数 |
x in S | 如果x是S的元素,返回True,否则返回False |
x not in S | 如果x不是S的元素,返回True,否则返回False |
6.3 映射类型
映射类型是“键-值”数据项的组合,键(key)表示一个属性,值(value)是属性的内容。Python语言通过字典实现映射,字典可以用{}建立:
示例代码如下:
Doc = {"中国":"北京","美国":"华盛顿"}
字典类型的函数与方法:
函数和方法 | 描述 |
---|---|
< d >.keys() | 返回所有的键信息 |
< d >.values() | 返回所有的值信息 |
< d >.items() | 返回所有的键值对 |
< d >.get(,) | 键存在则返回相应值,否则返回默认值 |
< d >.pop(,) | 键存在则返回相应值,同时删除键值对,否则返回默认值 |
< d >.popitem() | 随机从字典中取出一个键值对以元组(key,value)形式返回 |
< d >.clear() | 删除所有键值对 |
del < d >[< key >] | 删除字典中某个键值对 |
< key > in < d > | 如果键在字典中则返回True,否则返回False |
七、文件和数据格式化
7.1文件的打开与关闭
#open()函数格式如下
<变量名> = open(<文件名>,<打开方式>)
#close()关闭文件
<变量名>.close()
文件打开方式:
打开模式 | 含义 |
---|---|
‘r’ | 只读模式,如果文件不存在,返回异常FileNotFoundErroe,默认值 |
‘w’ | 覆盖写模式,文件不存在则创建,存在则覆盖 |
‘x’ | 创建写模式。文件不存在则创建,存在则返回异常FileExistsError |
‘a’ | 创加写模式,文件不存在则创建,存在则在文件最后追加内容 |
‘b’ | 二进制文件模式 |
‘t’ | 文本文件模式 |
‘+’ | 与r/w/x/a一同使用,在原功能基础上增加同时读写功能 |
textFile = open("7.1.txt","rt") #t 表示文本文件方式
print(textFile.readline())
textFile.close()
binFile = open("7-1.txt","rb") #r 表示二进制文件方式
print(binFile.readline())
binFile.close()
7.2 文件的读写
- 7.2.1 文件内容读取方法
操作方法 | 含义 |
---|---|
< file >.readall() | 读入整个文件内容,返回一个字符串或字节流* |
< file >.read(size=-1) | 从文件中读入整个文件内容,如果给出参数,读入该行前size长度的字符串和字节流 |
< file >.readline(size=-1) | 从文件中读入一行内容,如果给出参数,读入该行前size长度的字符串和字节流 |
< file >.readline(hint=-1) | 从文件中读入所有行,以每行为元素形成一个列表,如果给出参数,读入hint行 |
- 7.2.2 文件内容写入方法
操作方法 | 含义 |
---|---|
< file>,write(s) | 向文件写入一个字符串或字节流 |
< file>,writelines(lines) | 将一个元素全为字符串的列表写入文件 |
< file>,seek(offset) | 改变当前文件操作指针的位置,offset的值:0-文件开头;1-当前位置;2-文件结尾 |
7.3 二维数组的格式化和处理
国际通用的二维数据存储格式:CSV格式,扩展名为.csv。CSV的每一行是一维数据,每行最后一个元素后面包含一个换行符(\n),可以使用Python列表类型表示
- 7.3.1 CSV文件格式
[
['passedemissions','mpg','cylinders\n']
['FALSE','18','8\n']
]
fo = open("price2016.csv", "r")
ls = []
for line in fo:
line = line.replace("\n","")
ls.append(line.split(","))
print(ls)
fo.close()
- 7.3.2 HTML文件格式
详情见html表格部分:https://blog.csdn.net/weixin_44567668/article/details/125626370
7.4 高维数据格式化
万维网(WWW)通过HTML方式链接并展示不同类型的数据内容,采用XML或JSON格式表达键值对。XML和JSON都可以表达高维数据,但XML对key值要存储两次(< key> < /key>),而JSON只需要存储一次
附录
一、C++语法基础
关于C++语法的学习,见以下文章
https://blog.csdn.net/weixin_44567668/article/details/126098388
二、turtle库语法元素(图形绘制函数库)
- 绘制坐标系
turtle.setup(width,height,startx,starty) - 画笔控制函数
1)turtle.penup()
别名:turtle.pu(),turtle.up()
作用:抬起画笔之后移动画笔不绘制形状
2)turtle.pendown()
别名:turtle.pd(),turtle.down()
作用:落下画笔,之后移动画笔将绘制形状
3)turtle.pensize(width)
别名:turtle.width()
作用:设置画笔宽度,当无参数输入时返回当前画笔宽度。
Width:设置画笔线条宽度,如果为None或者为空,则函数返回当前画笔宽度
4)turtle.pencolor(colorstring)或turtle.pencolor((r,g,b))
作用:设置画笔颜色,当无参数输入时返回当前画笔颜色 - 形状绘制函数
1)turtle.fd(distance)
别名:turtle.forward(distance)
作用:向小海龟当前行进方向前进distance距离
2)turtle.seth(to_angle)
别名:turtle.setheading(to_angle)
作用:设置小海龟当前行进方向to_angle,该角度时绝对方向角度值
3)turtle.circle(radius,extent=None)
作用:根据半径radius绘制extent角度的弧形
4)函数的封装:通过def定义一个函数,将上面需要的参数封装起来