python学习笔记(清晰哦~)

文章目录

一、Python基本语法元素

1.1 Python程序语法元素分析

python的格式框架

  1. 缩进:严格明确、所属关系、长度一致
  2. 注释:单行注释:#、多行注释:’’’

命名与保留字

  1. 变量:保存和表示数据的占位符号
  2. 命名:大小写字母、数字、下划线、汉字等字符及其组合
  • #大小写敏感、首字符不能使数字、不能用保留字
  • 保留字:and, elif, import, raise, global, as, else, in, return, nonlocal, assert, except, is, try, True, break, finally,== lambda==, while, False, class, for, not, with, None, continue, from, or, yield, def, if, pass, del

数据类型

  1. 字符串、整数、浮点数、列表

语句和函数

  1. 赋值语句
  2. 分支语句
  3. 函数

输入与输出

  1. 输入函数:input(<提示信息字符串>)
  2. 输出函数:print()
  • 格式化输出print("{:.2f}".format©)
  1. eval()去掉参数最外侧引号并执行余下语句

二、Python基本图形绘制

2.1 Python蟒蛇绘制

import turtle
turtle.setup(650, 350, 200, 200)
turtle.penup()
turtle.fd(-250)
turtle.pendown
turtle.pensize(25)
turtle.pencolor("purple")
turtle.seth(-40)
for i in range(4):
    turtle.circle(40, 80)
    turtle.circle(-40,80)
turtle.circle(40, 40)
turtle.fd(40)
turtle.circle(16, 100)
turtle.fd(40 * 2 / 3)
turtle.done()

2.2 Turtle库的基本使用

绘图窗体布局

turtle.setup(width, height, starts, starty)
#后两个参数可选  可为0,0
#setup函数不是必须的

空间坐标体系

turtle.goto(x, y)
turtle.fd(d) #前
turtle.bk(d) #后
turtle.circle(r, angle)

角度坐标体系

turtle.seth(angle) #改变角度(绝对角度)
turtle.left(angle)
turtle.right(angle)

RGB色彩体系

  • white 255 255 255 , 1 1 1
  • yellow 255 255 0 , 1 1 0
  • ……
turtle.colormode(mode)
- #1.0
- #255

2.3 Turtle 程序语法元素分析

库引用与import

from <库> import <函数名>
from <库> import *<函数名>/<函数参数>

from turtle import *
#可能会出现函数重名问题

import <库> as <库别名>
#6666

画笔控制函数

turtle.penup()    /pu()
turtle.pendown()  /pd()
turtle.pensize()  /width()
turtle.pencolor()   "purple"/ 0.63, 0.13, 0.94
                    /(0.63, 0.13, 0.94)

运动控制函数

turtle.forward(d) / fd(d)
turtle.circle(100)/(-100, 90)

方向控制函数

turtle.setheading(angle) / seth(angle)
turtle.left(angle)
turtle.right(angle)

循环语句与range函数

产生循环计数序列
range(n)     0-n
range(m, n)  m-n
range(m, n, step)

三、基本数据类型

3.1 数字类型及操作

整数类型

pow(x,y)
  • 十进制 1010, 99
  • 二进制 0b010
  • 八进制 0o123
  • 十六进制 0x235

浮点数类型

  • 范围 -10^308 ~ 10 ^ 308
  • 精度 10 ^ -16
  • 浮点数间运算存在不确定位数,不是bug
round(x,d) : 对x四舍五入,d是小数截取位数

//浮点数间运算以及比较用round函数进行辅助
  • 1e-5 ……

复数类型

z.real 获得实部 
z.imag 获得虚部

数值运算操作符

  • +、-、* 、 /(浮点数结果,与数学中的除是一致的)
  • //(整数除)
  • +x : x本身
  • -y : y的负值
  • % : 取余
  • ** : 幂运算
  • 增强赋值操作符 x op= y
  • 类型间可以进行混合运算,生成结果为最宽类型:整数-》浮点数-》复数

数值运算函数

abs(x)      : 绝对值
divmod(x,y) : 商和余数
pow(x,y[,z) : 幂计算,取余
round(x[,d]): 四舍五入
max(x,y,...): 最大值
min(x,y....): 最小值
int(x)      : 变浮点数
float(x)    : 变浮点数
complex(x)  : 变复数 

实例:天天向上的力量

  • 注释,代码保存的文件名
  • GRIT

四、程序的控制结构

4.1 程序的分支结构

单分支结构

if <a>:
    <b>

二分支结构

if <a>:
    <b>
else:
    <c>

紧凑形式:适用于简单表达的二分支结构

<b> if <a> else <c>

多分支结构

if <a>:
    <b>
elif <c>:
    <d>
else:
    <e>

条件判断及组合

  • and, or, not
  • <, <=, >, >=, ==, !=

程序的异常处理

try :
    <a>
except :
    <b>

try :
    <a>
except <b>:
    <c>
    
异常处理的高级实用:
try :
    <a>
except:
    <b>
else :
    <c>
finally :
    <d>
//finally 对应语句块一定执行,else 对应语句块在不发生异常时执行+

实例:BMI

  • BMI = kg / m^2
  • 读程序要首先看分支结构

4.2 程序的循环结构

遍历循环

for <a> in <b>:
    <c>
  • 计数循环
for i in range(N):
    //balabala

for i in range(M,N,K):
    //从M,到N,步长为K
  • 字符串遍历循环
for c in s:
    //balabala
  • 列表遍历循环
for item in list:
    //balabala
  • 文件遍历循环
for line in fi :
    //balabala
    //fi是文件标识符
  • 元组,字典等…

无限循环

while <a>:
    <balabala>
  • 无限循环不退出循环可以用ctrl + C退出执行

循环控制保留字

  • break
  • continue

循环的高级用法

for  <> in <> :
    <>
else:
    <>
    
while <>:
    <>
else:
    <>
  • 当循环没有被break语句退出时,执行else语句块
  • else作为正常完成循环的奖励
  • else用法与异常处理时的else用法相似

4.3 random库的使用

random库概述

import random
基本随机函数:
    seed()
    random()
扩展随机函数:
    randint()
    getrandbits()
    uniform()
    randrange()
    choice()
    shuffle()

基本随机数函数

  • 随机数种子确定了随机数的产生
  • seed(a=None) : 初始化给定的随机数种子,默认为当前系统时间
  • random() : 生成一个0.0-1.0之间的随机小数
  • random.seed()
  • random.random()
  • 使用时间可以复现随机过程

扩展随机数函数

  • randint(a,b) : 生成一个[a,b]之间的整数
  • randrange(m,n[,k]) : 神成一个[m,n)之间以k为步长的随机整数
  • getrandbits(k) : 生成一个k比特长的随机数
  • uniform(a,b) : 生成一个[a,b]之间的随机小数
  • choice(seq) : 从序列seq中随机选取一个元素
  • shuffle(seq) : 将序列seq中元素随机排列,返回打乱后的序列

实例:圆周率的计算

  • 蒙特卡罗方法 :撒点方法
代码换行 : \
计时方法 :
from time import perf_counter
start = perf_counter()
//balabala
end = perf_counter()

五、函数和代码复用

5.1 函数的理解和定义

函数的定义

def <>(<>):
    <>
    return <>
  • 函数定义时,所指定的参数是一种占位符

函数的使用及调用过程

  • 调用时要给出实际参数
  • 实际参数替换定义中的参数
  • 函数调用后得到返回值

函数的参数传递

  • 函数必须保留括号,无论有没有参数
  • 可选参数传递
def fact(n, m = 1):
    s = 1
    for i in range(1, n+1):
        s *= i
    return s
  • 可变参数传递
def fact(n, *b):
    s = 1
    for i in range(1, n+1):
        s *= i
    for item in b:
        s *= item
    return s

//fact(10, 3)
//fact(10,3,5,8)
//比如min(),max()

参数传递的两种方式

  • 位置传递
  • 名称传递
def fact(m, n)

fact(10, 5)
fact(n = 5, n = 10)

函数的返回值

  • 函数可以返回0个或多个结果
  • return保留字用来传递返回值
  • 函数可以有返回值,也可以没有
  • 可以有return也可以没有
  • return可以传递0个返回值,也可以传递任意多个返回值
  • 传递任意多个返回值的形式是元组类型
  • 或者 a,b,c = fact(10,5)

局部变量和全局变量

  1. 局部变量和全局变量是不同变量
    • 局部变量是函数内部的占位符,与全局变量可能重名但不同
    • 函数运算结束后,局部变量被释放
    • 可以使用global保留字在函数内部使用全局变量
  2. 局部变量为组合数据类型且未创建,等同于全局变量

lambda函数

  • lambda函数返回函数名作为结果
    • lambda函数是一种匿名函数,即没有名字的函数
    • 使用lambda保留自定义,函数名是返回结果
    • lambda函数用于定义简单的、能够在一行内表示的函数
<函数名> = lambda<参数>:<表达式>

等价于

def <函数名>(<参数>):
    <函数体>
    return <返回值>

f = lambda x, y : x + y
f(10,15)
  • 谨慎使用lambda函数

实例 : 七段代码管的绘制

import turtle, time
def drawgap():
    turtle.penup()
    turtle.fd(5)
def drawline(draw):
    drawgap()
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(40)
    drawgap()
    turtle.right(90)
def drawdigit(digit):
    drawline(True) if digit in [2,3,4,5,6,8,9] else deawline(False)
    drawline(True) if digit in [0,1,3,4,5,6,7,8,9] else deawline(False)
    drawline(True) if digit in [0,2,3,5,6,8,9] else deawline(False)
    drawline(True) if digit in [0,2,6,8] else deawline(False)
    turtle.left(90)
    drawline(True) if digit in [0,4,5,6,8,9] else deawline(False)
    drawline(True) if digit in [0,2,3,5,6,7,8,9] else deawline(False)
    drawline(True) if digit in [0,1,2,3,4,7,8,9] else deawline(False)
    turtle.left(180)
    turtle.penup()
    turtle.fd(20)
def drawdate(date):
    turtle.pencolor("red")
    for i in date:
        if i == '-':
            turtle.write('年',font=("Arial",18,"normal"))
            turtle.pencolor("green")
            turtle.fd(40)
        elif i == '=':
            turtle.write('月',font=("Arial",18,"normal"))
            turtle.pencolor("blue")
            turtle.fd(40)
        elif i == '+':
            turtle.write('日',font=("Arial",18,"normal"))
        else:
            +drawdigit(eval(i))
def main():
    turtle.setup(800,350,200,200)
    turtle.penup()
    turtle.fd(-300)
    turtle.pensize(5)
    drawdate(time.strftime('%Y-%m=%d+',time.gmtime()))
    turtle.hideturtle()
    turtle.done()
main()
  • 思维:
    • 模块化思维
    • 规则化思维

5.2 代码复用与函数递归

代码复用与模块化设计

  • 函数:将代码命名,在代码层面建立了初步抽象
  • 对象:属性和方法,< a>.< b>和< a>.< b>(),在函数之上再次组织进行抽象
  • 模块化设计:紧耦合,松耦合
  • 模块内部紧耦合,模块之间松耦合

函数递归的理解

  • 函数定义中调用函数自身的方式
  • 链条:计算过程存在递归链条
  • 基例:存在一个或多个不再递归的基例
  • 类似于数学归纳法

函数递归的调用过程

def fact(n):
    if n == 0"
        return 1
    else :
        return n * fact(n - 1)
  • 递归的实现:函数+分支语句

函数递归实例分析

字符串反转
s[::-1]

def rvs(s):
    if s == "":
        return s
    else :
        return rvs(s[1:])+s[0]
斐波那契数列
def F(n):
    if n == 1 or n == 2:
        return 1
    else:
        return F(1) + F(2)
汉诺塔问题
count = 0
def hanoi(n, src, dst, mid):
    global count
    if n == 1 :
        print("{}:{}->{}".format(1,src,dst))
        count += 1
    else:
        hanoi(n-1, src, mid, dst)
        print("{}:{}->{}".format(n,src,dst))
        count += 1
        hanoi(n-1, mid, dst, src)

5.3 PyInstaller库的使用

PyInstaller库基本介绍

  • 将.py源代码转换成邬旭源代码的可执行文件
  • PyInstaller库是第三方库
  • 网站http://www.pyinstaller.org
  • 安装第三方库需要pip
  • 安装
    • (cmd命令行) pip install pyinstaller

PyInstaller库使用说明

  • (cmd命令行) pyinstaller -F <文件名.py>
  • -h 查看帮助
  • –clean 清理打包过程中的临时文件
  • -D, --onedir 默认值,生成dist文件夹
  • -F, --onefile在dist 文件夹中只生成独立的打包文件
  • -i <图标文件名.ico> 指定打包程序使用的图标(icon)文件

实例:科赫雪花小包裹

  • 分形几何
  • 科赫曲线(雪花曲线) n阶
import turtle
def koch(size, n):
    if n == 0:
        turtle.fd(size)
    else:
        for angle in [0,60,-120,60]:
            turtle.left(angle)
            koch(size/3, n-1)
def main():
    turtle.setup(600,600)
    turtle.penup()
    turtle.goto(-200, 100)
    turtle.pendown()
    turtle.pensize(2)
    level = 3
    koch(400, level)
    turtle.right(120)
    koch(400, level)
    turtle.right(120)
    koch(400, level)
    turtle.hideturtle()
main()

六、组合数据类型

6.1 集合类型及操作

集合类型定义

  • 集合是多个元素的无序组合
    • 集合类型与数学中的集合概念一致
    • 集合元素之间无序,每个元素唯一,不存在相同元素
    • 集合中不能出现可变数据类型
    • 集合用大括号{}表示,元素间用逗号分隔
    • 建立集合用{}或set()
    • 建立空集合类型,必须使用set()

集合操作符

  • 并 |
  • 差 -
  • 交 &
  • 补 ^
  • <=、<
  • =、>

  • 4个增强操作符 : op=

集合处理方法

S.add(x)     //添加
S.discard(x) //移除,不报错 
S.remove(x)  //移除,若S中没有x,报错KeyError
S.clear()    //清空所有
S.pop()      //随机弹出一个元素
S.copy()     //返回集合S的一个副本
len(S)       //返回S的元素个数
x in S       //是否存在
x not in S   //
set(x)       //将其他类型转换为集合类型
try:
    while True:
        print(A.pop(), end="")
except:
    pass

集合类型应用场景

  • 包含关系比较
  • 数据去重
ls = ["p","p","y","y",123]
s = set(ls)
lt = list(s)

6.2 序列类型及操作

序列类型定义

  • 序列是具有先后关系的一组元素
    • 序列是一维元素向量,元素类型可以不同
    • 类似数学元素序列
    • 元素间由序列号引导,通过下标访问序列的特定元素
  • 序列是一个基类类型
    • 包括:字符串类型,元组类型,列表类型
  • 6个操作符
    • x in s
    • x not in s
    • s + t
    • sn//ns
    • s[i]
    • s[i:j]//s[i:j:k]
  • 通用函数和方法
  • len(s)
  • min(s)
  • max(s)
  • s.index(x)// s.index(x,i,j)
  • s.count(s)

元组类型定义

  • 元组是序列类型的一种扩展
    • 一旦创建就不能被修改
    • 使用()或tuple()创建
    • 可以使用或不使用小括号
  • 元组继承序列类型的全部通用操作

列表类型定义

  • 列表是序列类型的一种扩展
    • 列表是一种序列类型,创建后可以随意被修改
    • 使用[]或list()创建,元素间用逗号分隔
    • 无长度限制
  • 方括号[]真正创建一个列表,赋值仅传递引用
ls[i] = x
ls[i:j:k] = lt
del ls[i]
del ls[i:j:k]
ls += lt
ls *= n
ls.append(x)
ls.clear()
ls.copy()
ls.insert(i,x)
ls.pop(i)
ls.remove(x)
ls.reverse()

序列类型应用场景

  • 元组用于元素不改变的应用场景
  • 列表更加灵活,他是最常用的列表序列
  • 最主要作用:表示一组有序数据,进而操作他们

6.3 字典类型及操作

字典类型定义

  • 映射:索引和值的对应
  • 键值对:键是数据索引的扩展
  • 字典是键值对的集合,键值对之间无序
  • 采用{}和dict()创建,键值用冒号:表示
d = {//balabala}
d["zhongguo"]

字典处理类型及方法

del d[k]
k in d
d.keys()
d.values()
d.items()
d.get(k,<default>)
d.pop(k,<default>)
d.popitem()
d.clear()
len(d)

字典类型的应用场景

  • 映射的表达
  • 统计数据出现的次数

6.4 jieba库的使用

  • 优秀的中文分词第三方库
    • 中文文本需要通过分词获得单个的词语
    • jieba是优秀的中文分词第三方库,需要额外安装
    • jieba库提供三种分词模式,最简单只需掌握一个函数
  • 三种模式:
    • 精确模式
    • 全模式
    • 搜索引擎模式
jieba.lcut(s)
jieba.lcut(s,cut_all=True)
jieba.lcut_for_search(s)
jieba.add_word(w)

实例:文本词频统计

Hamlet
def getText():
    txt = open("hamlet.txt", "r").read()
    txt = txt.lower()
    for ch in '!"#$%&()*+<-/;:<+>?@[\\]^_`{|}~':
        txt = txt.replace(ch," ")
    return txt
hamletTxt = getText()
words = hamletTxt.split()
counts = {}
for word in words:
    counts[word] = counts.get(word,0)+1
items = list(counts.items())
items.sort(key=lambda x:x[1],reverse = True)
三国演义
import jieba
txt = open("","r",encoding = "utf-8").read()
words = jieba.lcut(txt)
counts = {}
for word in words:
    if len(word) == 1"
        continue
    else:
        counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambda x:x[i],reverse=True)
for i in range(15):
    word,count = items[i]
    print("{0:<10}{1:>5".format(word,count)

七、文件和数据格式化

文件的类型

文件的类型

  • 文件是数据的抽象和集合
    • 文件是数据存储的一种形式
    • 文件展现形态:文本文件和二进制文件
    • 由单一特定编码组成的文件,如UTF-8
      -文本文件: 由于存在编码,也被看成存储着的长字符串。例如.txt,.py
    • 二进制文件:直接由比特1和0组成,没有统一的字符编码,一般存在二进制的组织结构
  • 本质上,所有文件都是由二进制形式存储
  • 形式上,所有文件采用两种方式展示
tf = open("f.txt","rt")
print(tf.readline())
tf.close()

bf = open("f.txt","rb")
print(tf.readline())
tf.close()
  • 常用的函数
a.read(size)
a.readline(size)
a.readlines(hint)

a.write(s)
a.weitelines(lines)
a.seek(offset)
  • 文件的打开
    • 文件句柄
    • 文件名
    • 打开模式
    • “D:/PYE/f.txt” 或者 “D:\\PYE\\f.txt”
文件的打开模式描述
r只读,默认值,若文件不存在,返回FileeNotFoundError
w覆盖写,文件不存在则创建,存在则完全覆盖
x创建写,文件不存在则创建,存在返回FileExistsError
a追加写,文件不存在则创建,存在则在文件最后追加
b二进制文件模式
t文本文件模式,默认值
+与r/w/x/a一同使用,在原功能基础上增加同时读写功能
  • 文件的关闭
  • <>.close

文件内容的读取

操作方法描述
.read(size=-1)读入全部内容,如果给出参数,读入前size长度
.readline(size=-1)读入一行内容,如果给出参数,读入该行前size长度
.readlines(hint=-1)读入文件所有航,以每行元素形成列表,如果给出参数,读入前hint行

数据的文件写入

操作方法描述
.write(s)向文件写入一个字符串或字节流
.writelines(lines)将一个元素全为字符串的列表写入文件
.seek(offset)改变当前文件操作指针的位置,offset = 0-文件开头,1-当前位置,2-文件末尾
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值