百科不全书之Python
参考链接:pyfreyr-Conda使用手册
参考链接:北京理工大学 Python语言程序设计
conda
// 查看安装信息
conda info
// 查看创建的基础环境
conda info -e/--envs
// 创建环境
conda create --name python34 python=3.4
//切换环境
conda activate ***
// 删除环境
conda remove -n ××× --all
conda env remove -n ×××
// 退出环境
conda deactivate
// 列出当前环境下所有安装的 conda 包。
conda list
// 安装软件包,会自动处理包之间的依赖。
conda install scrapy
// 安装指定版本包,既可以使用类似 pip 的 ==,也可以直接使用 =:
conda install scrapy=1.5.0
// 更新 conda 包到最新版本
conda update scrapy
conda upgrade ×××
// 卸载 也可以使用
conda remove ×××
conda uninstall ×××
jupyter
// 安装 Jupyter
pip3 install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple
// 启动
jupyter-notebook
基础知识
- 编程不单纯是求解计算问题,还要思考解决方法,思考用户体验,执行效率等。能够帮助程序员加深用户行为以及社会和文化认识。
- python使用unicode编码,每个编码对应一个字符,编码几乎覆盖所有的字符
- 静态语言:使用编译执行的编程语言:C/C++语言,Java语言。脚本语言:使用解释执行的编程语言:PYthon语言,JavaScript语言,PHP语言
- 命名:大小写字母,数字,下划线和汉字等字符组合。注意:大小写敏感,首字符不能是数字,不与保留子相同。
- 缩进:是Python语法的一部分,是表达代码间包含和层次关系的唯一手段,程序内一致就可以了,一般用4个空格或者1个TAB
- Python 中一般以新行作为语句的结束标识,可以使用 \ 将一行语句分为多行显示。
- 列表:由0个或多个数据组成的有序序列,列表使用 [] 表示,采用逗号(,)分隔各元素。使用保留字 in 判断一个元素是否在列表中。
TempStr[-1] in ['C','c'] // 判断前者是否与列表中某个元素相同
- 分支语句:每个保留字所在行最后存在一个冒号:是语法的一部分,不能省略,冒号及后续缩进用来表示后续语句与条件的所属关系。
if TempStr[-1] in ['F','f']:
- 输入函数:变量 = input(<提示信息字符串>) 用户输入的信息以字符串;输出函数:print() 格式化的输出:
- 评估函数 aval() : 去掉最外侧引号并执行余下语句的函数
>>> eval("1") 1
>>> eval("1+2") 3
>>> eval('"1+2"') '1+2'
>>> eval(' print("hello")') hello
- 输出函数print
print("",end="“) # end = ”“ 表示输出不换行
print("执行开始".center(10,'-')) #---执行开始---
- 55
import
# 1
import turtle # 引入 turele 库
turtle.setup()
# 2
from turtle import setup # 引入turtle库中的setup函数
setup
from turtle import * # 引入turtle库中的所有函数
setup
# 3
from turtle as t # 引入turtle库中并给它起了个别名t
t.setup()
分支结构
<, >, =, <=, >=, == ,!=,and,or,not
if 10<= x <= 20:
满足条件表达式执行的语句
elif 条件表达式:
满足条件表达式执行的语句
else:
不满足条件表达式执行的语句
<表达式1> if (条件) else <表达式2> # 类似三目运算符 表达式不是语句 表达式里面不能进行赋值操作
ex:
guess1,guess2=eval(input({},{}))
print("猜{}了".format('对' if guess1==99 else '错'))
异常处理
# 1
try:
print("123")
except :
print("456")
# 2
try:
print("123")
except NameError: # NameError 是异常的类型,这是python定义好的
print("456")
异常处理的高级使用
try:
print("1")
except :
print("2")
else : # else 对应在语句块3不发生异常时执行
print("3")
finally: # 无论前面是否异常 都会执行
print("4")
循环结构
break 只退出当前的循环
countinue 跳出本次的循环
for循环
for in 可以对很多进行循环,只要是由元素组成的,就都可以循环
# range (start, stop[, step])分别是起始、终止和步长,如果步长不设置则默认为1。
for i in range(3):
print(i) # 0 1 2 3
for i in range(1,3):
print(i) # 1 2
for i in range(2,8,3):
print(i) # 2 5
s = "python"
for c in s: # 对字符串进行循环
print(c,end="") # python
for item in ls: # ls是列表 将每一个元素进行循环
for item in [123,'py',456]:
print(item ,end=",") # 123,py,456,
for line in fi # fi是文件标识符 遍历每一行
while 循环
while <条件>:
<语句块>
循环与else
else: 当循环没有被break时,就执行else语句
else 作为正常完成循环时的奖励
# 1
for <循环变量> in <遍历结构>:
<语句块1>
else :
<语句块2>
# 2
while <条件>:
<语句块1>
else :
<语句块2>
函数
在函数定义的基本数据是局部变量,如果想使用全局变量,需要加 global 保留字来声明。
在函数中,如果组合数据类型未真实创建,那使用的组合数据类型是全局变量,因为python中的组合数据类型使用的是指针。
# 参数(<非可选参数>,<可选参数>) 非可选在可选前 (m,n=1)
def <函数名>(<参数(0个或多个)>): # 参数可以是无限个,fun(x,*b),*b就代表无限个
<函数体>
for item in *b
a *=item
return <返回值(0个或多个)> # 多个返回值返回的是元组类型 可以a,b,c=<函数名>(参数) 接受
# 调用函数时 可以通过位置或名称传递
def fact(m,n)
a=fact(1,2) or a=(n=2,m=1)
lambda 函数
主要用作一些特定函数或方法的参数
lambda函数有一些固定作用使用方式,建议逐步掌握。
一般情况下 建议使用def定义的普通函数
<函数名> = lambda<参数>:<表达式>
f = lambda x,y;x+y
f(10,15)
等价于 def <函数名>(<参数>):
<函数体>
return <返回值>
递归
递归实例
字符串反转
def rvs(s):
if s in "":
return s
else:
return rvs(s[1:])+s[0]
char = input("请输入字符串")
char=rvs(char)
print(char)
斐波那契
def f(n):
if n== 1 or n == 2:
return 1
else:
return f(n-1) +f(n-2)
汉诺塔
count = 0
def hanoi(n,src,dst,mid):
global count
if n== 1 :
print("{} {}->{}".format(n,src,dst))
count+=1
else:
hanoi(n-1,src,mid,dst)
print("{} {}->{}".format(n,src,dst))
count +=1
hanoi(n-1,mid,dst,src)
科赫雪花
import turtle
def koch(n,length):
if n == 0:
turtle.fd(length)
else:
for angle in [0,60,-120,60]:
turtle.left(angle)
koch(n-1,length/3)
def main():
turtle.setup(600,600)
turtle.penup()
turtle.goto(-200,100)
turtle.pendown()
turtle.pensize(2)
level =3
for i in range(2):
koch(level,400)
turtle.right(120)
koch(level,400)
turtle.hideturtle()
main()
文件处理
文件是数据的抽象和集合。
文件时存储在辅助存储器上的数据序列;文件是数据存储的一种形式;
文件展示形态:文本文件和二进制文件
由单一特定编码组成的文件,如utf-8 由于存在编码,也被看成存储着的长字符串。适用于 .txt .py文件
直接有0和1组成,没有统一字符编码,一般存在二进制0和1的组织结构,即文件格式,适用于 .png文件 .avi文件
读写文件
a.open(,) #将文件存储状态->文件的占用状态
a.close() # 将文件占用状态->文件的存储状态
# 读文件
a.read(size)
a.readline(size)
a.readlines(hint)
# 写文件
a.write(s)
a.writelines(lines)
a.seek(offset)
<变量名> = open(<文件名>,<打开模式>) # <变量名> =文件句柄 <打开模式> 文件 or 二进制 读or写
# 文件名=文件路径和名称 源文件同目录可省路径
# D:\PYE\f.txt 在python下,\是转义符 所以路径用 D:/PYE/f.txt 或者 D:\\PYE\\f.txt
文件的打开模式
# 读数据
<f>.read(size = -1) # 读入全部内容,给出参数则读入前size长度 若内存不足无法使用此方法
<f>.readline(size =-1) # 读入一行内容,给出参数则读入该行前size长度
<f>.readlines(hint=-1) # 读入文件所有行,以每行为元素形成列表 如果给出参数,读入前hint行 hint参数是字节的总大小,会读取到该文件内对应字节数的当前行。
<f>.linecache() # 某个文件的第几行
# 写数据
<f>.write(s) #向文件写入一个字符串和字节流
<f>.writelines(lines) # 将一个元素全为字符串的列表写入文件 但是写入的文件是紧挨着的
<f>.seek(offset) # 改变文件操作指针的位置,offset含义如下:0-文件开头;1-当前文件位置;2-文件结尾
读取数据示例
# 遍历全文本 方法1 读取大文件,会浪费时间和资源
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
txt = fo.read() # 一次读取 统一处理
# 对全文txt进行处理
fo.close()
# 遍历全文本 方法2 按数量读入 更常用
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
txt = fo.read(2) # 按数量读入 逐步处理
while txt != "" :
# 对 txt进行处理
txt = fo.read(2)
fo.close()
# 逐行遍历文件:方法一 一次读入 分行处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
for line in fo.readlines():
print(line)
fo.close()
# 逐行遍历文件:方法二 分行读入,逐行处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
for line in fo:
print(line)
fo.close()
写文件实例
fo = open("output.txt","w+")
ls = ["中国","法国","美国"]
fo.writelines(ls)
fo.seek(0)
for line in fo: # 写入一个字符串列表
print(line)
fo.close() >>> 中国法国美国
自动化思维
自动化思维:数据和结构分离,数据驱动的自动运行
接口化设计:格式化设计结口,清晰明了
二维数据应用:应用维度组织数据,二维数据最常用
数据的维度:一维,二维,多维,高维
一维数据:
一维数据的表示:列表类型(有序)和集合类型(无序)
一维数据的存储:空格分隔,逗号分隔,特殊符号分隔
一维数据的处理:字符串方法.split()和.join()
二维数据:
CSV数据存储格式:如果某个元素缺失,逗号仍要保留,二维数据的表头可以作为数据存储,也可以另行存储,逗号是英文半角逗号,逗号和数据之间无额外空格
二维数据的表示:列表类型,其中每个元素也是要给列表
VSV格式:逗号分隔表示一维,按行分隔表示二维
二维数据的的处理:for循环+ .split()和 .join()
一维数据的存储 | 优缺点 |
---|---|
空格分隔 | 使用一个或多个空格存储,不换行 缺点:程序中不能存在空格 |
逗号分隔 | 使用英文半角逗号分隔数据进行存储,不换行;缺点:数据中不能有逗号 |
其他方式 | 使用其他符号或符号组合分隔,建议采用特殊符号。缺点:需要根据数据特点定义,通用性较差 |
一维数据的读入与写入
# 中国$日本$美国$法国$意大利
txt = open(fname).read()
ls = txt.split("$")
f.close()
ls = ['中国','美国','日本']
f = open(fname,'w')
f.write(''.join(ls))
f.close()
二维数据的读入和写入
# 从csv的文件中读入数据
fo = open(fname)
ls = []
for line in fo:
line = line.replace("\n","")
ls.append(line.split(","))
fo.close()
# 将数据写入CSV格式的文件
ls = [[],[],[]] #二维列表
f = open(fname,'w')
for item in ls:
f.write(','.join(item)+'\n')
f.close()
# 二维数据的逐一处理
ls = [[],[],[]] #二维列表
for row in lis:
for column in row:
print(ls[row][column])