CNU 2020级 生科院 PYTHON 部分整理

写在前面的一些说明:

  1. 本文章为个人整理与考试等无关,所列重点均为个人理解
  2. 所有的程序编写不唯一!不唯一!不唯一!本人提供的非最优解,仅供参考
  3. 部分程序提供多种解决思路仅供参考
  4. 本文仅提供本人认为的重要内容(用【*】标出),其他内容请参阅书或PPT
  5. 如有错误请提出,本人也随时原意为各位答疑,可以随意联系
  6. 如果有些问题问的比较多,我也会继续补充。

第一部分 初识PYTHON语言

第一章 程序设计基本方法

一般程序

一切的开始
print('Hello World')
圆面积的计算
r= 25
area = 3.1415 * r * r
print(area)
print("{:.2f}".format(area))

Turtle绘图库

五角星的绘制
import turtle //导入Turtle库
from turtle import *
color('red', 'red')
begin_fill()
for i in range(5):
    fd(200)
    rt(144)
end_fill()
done()

第二章 PYTHON程序实例解析

命名规则等其他内容自行看书复习

保留字(33个)【*】

注意True False None 首字母大写
以及在判定(比较大小,下同)时
True=1 False=0

TrueFalseNone
andelifimportraise
aselseinreturn
assertexceptistry
breakfinallylambdawhile
classfornonlocalwith
continuefromnotyield
defglobalor
delifpass

语句类型

赋值语句
分支语句
循环语句
函数

注意:分支和循环的冒号!

实例

温度转换【*】

分析每行代码的意义
理解缩进的作用/意义

TempStr = input("请输入带有符号的温度值: ")
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("输入格式错误")
Python蟒蛇绘制

最好可以知道每个函数的作用~

#PythonDraw.py
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, 80/2)
turtle.fd(40)
turtle.circle(16, 180)
turtle.fd(40 * 2/3)
turtle.done()

第二部分 深入PYTHON语言

第三章 基本数据类型

数据类型

字符串、数字、组合元素类型……

数字类型

2、8、10、16进制 前缀:0b | 0o | 无 | 0x
整数,浮点数(不确定尾数,处理),复数 各自的规则与相互的转换
四则运算的顺序
二元数值操作符的识别
内置数学函数pow() round() int() float() max() min()

字符串类型【*】

序号规则
从左到右0至正无穷
从右到左-1至负无穷

大小比较
比较原理:依靠ASCII码值(不知道ASCII码值?自己查去)
总结:大写字母一律小于小写字母
同类按顺序增大
即 A<B<C<…<Z<a<b<c<…<z

操作

索引:返回字符串中单个字符 <字符串>[M]
“请输入带有符号的温度值: “[0] 或者 TempStr[-1]

切片:返回字符串中一段字符子串 <字符串>[M:N]
[M: N]获取字符串中从M到N【但不包含N】间连续的子字符串
“请输入带有符号的温度值: “[1:3] 或者 TempStr[0:-1]

运算: +、*、in 在字符串运算中的意思
内置函数的运用
len() str() hex() oct() chr() ord()
str.lower()或str.upper()
str.split(sep=None)
str.count(sub)
str.replace(old, new)
str.center(width[,fillchar])
str.strip(chars)
str.join(iter)

Unicode编码 科普内容 但是很有趣
转义符(虽然很重要 但是咱们基本没涉及 故基本无视)

格式化(format)

槽{}的概念和规则

:<填充><对齐><宽度><,><.精度><类型>
引导符号用于填充的单个字符< 左对齐槽设定的输出宽度数字的千位分隔符浮点数小数精度或字符串最大输出长度整数类型
> 右对齐b,c, d,o,x,X
^ 居中对齐浮点数类型
e, E, f, %

出于系统限制 表格就请凑合看吧=3=(其实还是懒)

强调!!!!
填充是指将输出的内容 填充至指定长度(当长度不满足所写数值时才填充!)
举例:{0:3}是将字符串a填充至3位(字符串默认填充在末尾,数字默认填充在开始)
如果a=‘a’
此时a不满足三位 所以默认填充空格(在这里用—替代空格) 输出’a——’
如果a=‘abcd’ 此时a满足三位 不进行填充,输出为’abcd’
所以,此代码{0:3}只负责填充(即加法),不会进行减法!

判断是否为回文数字

这是我能想到的最简化版本

n=input('请输入数字:')
print('该数字是否为字符串:',n==n[::-1])

天天向上的力量

(通过代码理解各语句的关系和使用方法)

每天1%
dayup= pow(1.001, 365)
daydown= pow(0.999, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown
每天5‰
#DayDayUpQ2.py
dayfactor= 0.005
dayup= pow(1+dayfactor, 365)
daydown= pow(1-dayfactor, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))
工作日的力量
#DayDayUpQ3.py
dayup=1.0
dayfactor= 0.01
for i in range(365):
   if i % 7 in[6,0]:
       dayup= dayup*(1-dayfactor)
   else:
       dayup= dayup*(1+dayfactor)
print("工作日的力量:{:.2f}".format(dayup))
#DayDayUpQ4.py
def dayUP(df):
    dayup=1.0
    for i in range(365):
       if i % 7 in[6,0]:
           dayup= dayup*(1-0.01)
       else:
           dayup= dayup*(1+df)
    return dayup
dayfactor= 0.01
while dayUP(dayfactor) < 37.78:
    dayfactor+= 0.001
print("工作日的努力参数是:{:.3f}".format(dayfactor))

下面这个是我瞎魔改的 康康就好=3=

a=int(input('周期:'))
d=int(input('总时间:'))
c=int(input('奋斗时间:'))
b=int(input('摸鱼时间:'))
y=float(input('向上变化量:'))
z=float(input('向下变化量:'))
x=1
if b+c==a:
    for i in range(d):
        if i % a in range(c):
            x=(1+y)*x
        else :
            x=(1-z)*x
    print('结果',x)
else :
    print('错误')

文本进度条(不作要求)

基础
import time
scale = 10
print("------执行开始------")
for i in range(scale+1):
    a = '*'* i
    b = '.'* (scale -i)
    c = (i/scale)*100
    print("{:^3.0f}%[{}->{}]".format(c,a,b))
    time.sleep(0.1)
print("------执行结束------")
单行动态刷新
import time
for i in range(101):
    print("\r{:3}%".format(i), end="")
    time.sleep(0.1)
整合
import time
scale = 50
print("执行开始".center(scale//2,"-"))
start = time.perf_counter()
for i in range(scale+1):
    a = '*'* i
    b = '.'* (scale -i)
    c = (i/scale)*100
    dur= time.perf_counter() -start
    print("\r{:^3.0f}%[{}-{}]{:.2f}s".format(c,a,b,dur),end='')
    time.sleep(0.1)
print("\n"+"执行结束".center(scale//2,'-'))

第四章 程序的控制结构

程序流程图

参阅书和PPT

分支结构

单分支结构(少见)
二分支结构(简易形式)
多分支结构
注意冒号!!!!

操作符与三个保留字

循环结构

遍历循环 for … in …
无限循环 while (可以设定条件执行有限次的循环)
两个保留字:
break跳出并结束当前整个循环,执行循环后的语句
continue结束当次循环,继续执行后续次数循环
二者都只对最内层循环起作用

异常处理(低要求)

学会查看错误提示(包括错误类型,错误原因,发生位置,有助于你修改程序)
try、except的应用(依旧是 注意冒号!!!)

random库

几个常用函数(万一又让你生成随机数呢…)
random()
randint()

身体质量指数BMI

PPT里是图片 我也懒得手敲了 =3=
在这里插入图片描述

PM指数

a=eval(input('PM数值:'))
if 0<=a<50:
    print('优秀')
elif 50<=a<100:
    print('良好')
else:
    print('污染')

π 的计算(不作要求)

近似计算公式
pi = 0
N = 100
for k in range(N) :
pi += 1/pow(16,k)*( \
   4/(8*k+1)2/(8*k+4) -\
   1/(8*k+5)1/(8*k+6))
print("圆周率值是: {}".format(pi))
蒙特卡罗方法

这种数学思想还是建议各位了解一下的
依旧懒得打 =3=
在这里插入图片描述

生成随机密码

#生成随机密码
from random import choice
import string #一个库 这个库可以理解为用几个字母的函数来表示a-z,A-Z,0-9
def GenPassword(length=8,chars=string.ascii_letters+string.digits):
    return ''.join([choice(chars) for i in range(length)])
 
if __name__=="__main__":
    #生成10个随机密码   
    for i in range(10):
        #密码的长度为8
        print(GenPassword(8))

第五章 函数和代码复用

基础

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
也就是说你用def()定义的函数和print()等本质是一个东西
函数在定义之后只有调用!调用!调用!才会有作用!(你问我什么是调用?罚你回去抄书!)(我寻思我这一个月发现好几个因为不调用/调用不对而出错的)
什么?你问我什么是调用?罚你回去抄书!(生气

def  <函数名>(<参数(0个或多个)>)<函数体>
       return <返回值>

lambda

因为一些(可能超纲的 )原因,要谨慎使用(说白了就是不用会写,但你要能认出别人写的 )lambda函数

<函数名> = lambda <参数><表达式>

等价于

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

参数

函数可以有参数,也可以没有,但必须保留括号
区分实参(有实际意义的参数)和虚参(虚假的参数,只用来占位)
参数的传递(名字,顺序)
即必须以 def 函数名() 的形式出现 括号不能省略
括号后面要有冒号!!!!!!

函数定义时可以为某些参数指定默认值,构成可选参数

def  函数名(非可选参数,可选参数):
        函数体(即函数内容)
        return 返回值

return 后面的返回值可有0至n多个(默认以元组形式返回),0就是没有返回值(你甚至可以不写return 233)
(但是没有return你调用这个函数为了什么呢?这就相当于你让你同学帮你算1+1,你的同学只告诉你他算完了,但并不告诉你结果(你没有return计算机甚至都不告诉你他算完了,除非你写进去-1-)(虽然有时候也有一些别的目的,但是不展开说了))

变量

全局变量与局部变量(不理解的还是直接问吧,变量能说一年(雾))
二者不同,当局部变量含有未创建的组合数据类型等同于全局变量,
global的使用

代码复用和模块化设计

这一节在编程中(尤其是大程序(就像下面那个七段数码管那么大(其实它很小 )的程序))十分重要,但是吧,咱们课上几乎就没怎么用,各位也没有机会写这种程序,就被迫显得没那么重要了orz,但是这种模块化的思维,真的很重要。

模块内部紧耦合、模块之间松耦合(其他的我就不强调了)

递归【*】

函数+分支结构构成
会认 会写 虽然这个玩意执行速度并不快,但依然很重要
递归,理解成套娃就好了,但是这个套娃最里面必须得有奖品(基例),不能是空的

n的阶乘
def fact(date):   
    if n == 0 :
        return 1
    else :
        return n*fact(n-1)
字符串反转

[::-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(n-1)+f(n-2)

科赫曲线的绘制1[一段]

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(800,400)
    turtle.penup()
    turtle.goto(-300, -50)
    turtle.pendown()
    turtle.pensize(2)
    koch(600, 3)      # 3阶科赫曲线,阶数
    turtle.hideturtle()
main()

科赫曲线的绘制2[封闭]

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      # 3阶科赫雪花,阶数
    koch(400, level)
    turtle.right(120)
    koch(400, level)
    turtle.right(120)
    koch(400, level)
    turtle.hideturtle()
main()

七段数码管的绘制

没啥内容,给你们放一个可以伪实时刷新的代码,运行玩玩(如果不是实时刷新的,请去问你的Python,至少我这里是时时刷新

#绘制七段数码管,动态显示当前时间
from turtle import *
from datetime import datetime
from time import sleep
#绘制数码管间的空白间隔
def drawGap():
    up()
    fd(5)
#绘制单段数码管,方向控制
def drawLine(draw):   
    drawGap()
    down() if draw== True else up()   
    fd(40)   
    drawGap()   
    right(90)
#根据数字绘制数码管
def drawDigit(d):   
    drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False)   
    drawLine(True) if d in [0,1,3,4,5,6,7,8,9] else drawLine(False)   
    drawLine(True) if d in [0,2,3,5,6,8,9] else drawLine(False)   
    drawLine(True) if d in [0,2,6,8] else drawLine(False)   
    left(90)    #第4段到第5段无需右转,相当于修正了方向   
    drawLine(True) if d in [0,4,5,6,8,9] else drawLine(False)   
    drawLine(True) if d in [0,2,3,5,6,7,8,9] else drawLine(False)   
    drawLine(True) if d in [0,1,2,3,4,7,8,9] else drawLine(False)   
    left(180)   
    up()   
    fd(20)
#绘制当前时间
def drawDate(date):   
    pencolor("red")   
    for i in date:       
        if i == '-':           
            write('年',font=('Arial',18,'normal'))           
            pencolor('orange')           
            fd(40)       
        elif i == '=':           
            write('月',font=('Arial',18,'normal'))           
            pencolor('yellow')           
            fd(40)       
        elif i == '+':           
            write('日',font=('Arial',18,'normal'))           
            pencolor('green')           
            fd(40)       
        elif i == '*':           
            write('时',font=('Arial',18,'normal'))           
            pencolor('blue')           
            fd(40)       
        elif i == '#':           
            write('分',font=('Arial',18,'normal'))           
            pencolor('purple')           
            fd(40)       
        elif i == '?':           
            write('秒',font=('Arial',18,'normal'))           
            fd(40)       
        else:           
            drawDigit(eval(i))
#主函数
def main():   
    setup(1300,280,50,300)   
    speed(0)   
    up()   
    fd(-600)   
    pensize(5)   
    while(1):       
        penup()       
        goto(-600,0)       
        pendown()       
        tracer(False)       
        pencolor('red')       
        drawDate(datetime.now().strftime('%Y-%m=%d+%H*%M#%S?'))    #获取当前系统时间         
        hideturtle()       
        sleep(1)       
        clear()  #清屏   
    done()
main()

第六章 组合数据类型

序列类型(字符串str,元组tuple,列表list)、集合类型(集合set)和映射类型(字典map)
各部分的操作暂略

序列类型

具有先后关系
可以存在相同数值但位置不同的元素
元组用 () 和 tuple() 创建,列表用 [] 和 list() 创建
6个通用操作符 5个函数和方法
特别注意了列表类型17个操作函数和方法

集合类型

无序,每个元素唯一,不能是可变数据类型
集合用大括号 {} 表示,元素间用 逗号 分隔
建立集合类型用 {} 或 set()
建立空集合类型,必须使用 set()
6个操作符 4个增强操作符 处理方法10个
主要应用于:包含关系比较、数据去重

字典类型

理解“映射” 键(索引)和值(数据)
键值对:键是数据索引的扩展
字典是键值对的集合,键值对之间无序
采用大括号 {} 和 dict() 创建,键值对用冒号: 表示
13个操作函数和方法

jieba库

了解即可

文本词频统计

了解

最后再给大家推荐一个小网址
https://www.runoob.com/python3/python3-list.html
进去就知道了,毕竟人家叫“菜鸟教程”应该都能看得懂吧=3=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值