北京理工大学:《Python语言程序设计》详细笔记

第一章:程序设计基本方法

计算机与程序设计

  1. 计算机是根据指令操作数据的设备
  2. 计算机发展参照摩尔定律,表现为指数形式

编译和解释

  1. 计算机执行源程序两种方式:编译和解释
  2. 编译:将源代码一次性转换成目标代码的过程。执行编译过程的程序叫编译器(compiler)。
  3. 解释:将原代码逐条转换成目标代码同时逐条运行的过程。执行解释过程的程序叫解释器(interpreter)。
  4. 静态语言:使用编译执行的编程语言(C/C++,java)
  5. 脚本语言:使用解释执行的编程语言(Python,JavaScript,PHP)

程序的基本写法

  1. IPO:
  2. input输入:文件输入、控制台输入、交互输入、内部参数输入等。
  3. process处理(主要逻辑):算法(灵魂)
  4. output输出:控制台、文件、网络、操作系统内部变量等输出。

计算机编程

能够训练思维:

  1. 编程体现一种抽象交互、自动化执行的思维方式
  2. 计算思维:区分逻辑思维和实证思维的第三种思维模式。

实例1 --温度转换

题目本身简单,但学会这种思维,其他常见的"转换"问题解决方法同理。

Python程序语法元素分析

程序的格式框架

  1. python中用"缩进"表达程序的语法框架,表达代码间包含关系的唯一手段
  2. 注释:用于提高代码可读性的辅助文字,不被执行。

命名与保留字

  1. 变量:用来保存和表示数据的占位符号,变量采用标识符(名字)来表示。
  2. 命名:数字字母下划线。
    “注意”:大小写敏感,数字不能放开头,不与保留字同。
    python中共有33个保留字,查询方法:
import keyword
print(keyword.kwlist)

数据类型

  1. 字符串:由0个或多个字符组成的"有序"字符序列。# 有序–>可以索引、切片
  2. 整数:数学中的整数
  3. 浮点数:数学中的实数,带有小数点部分
  4. 列表:由0个或多个数据组成的"有序"序列

补充

  1. 字符串的使用,使用[ ]获取一个或多个字符

法(1)索引:返回字符串中单个字符 <字符串>[M] ,如TempStr[0]为串的第0个字符,TempStr[-1]为串的最后一个字符

法(2)切片:返回字符串中子串 <字符串>[M:N], 注意子串是第M个字符开始到第N个之前的字符(不包含第N个字符)

  1. 评估函数eval()

是去掉参数最外侧引号并执行余下语句的函数,引号不区分单引号’ '和双引号" "

如:eval(“1”)执行结果为1;eval(’“1+2”’)执行结果为’1+2’;eval(‘print(“Hello”)’)执行print(“Hello”)语句,结果为Hello

  1. 字符串序号分正向和反向
    在这里插入图片描述
    如:C36摄氏温度向华氏温度转化时,需要跳过字符C,从第1个字符开始转化,直到最后一个字符,切片操作为[1:],’ : '意为到最后一个字符

语句与函数

赋值语句
分支语句
函数

Python程序的输入输出

  1. input()控制台输入
  2. print()控制台输出,格式化
    注:这两兄弟,在控制台显示的时候,一个添加引号形成字符串,一个将字符串自动去掉引号。
    补充:"eval()"去掉参数最外侧引号并执行余下语句的函数

例子
在这里插入图片描述
在这里插入图片描述

第二章 Python基本图形绘制

2.1 深入理解Python语言

2.1.1计算机技术的演进

1946-1981:计算机系统结构时代(35年):
1981-2008:网络和视窗时代(27年)
2008-2016:复杂信息系统时代(8年)
2016- :人工智能时代

计算能力问题–>交互问题–>数据问题–>人类的问题

2.1.2编程语言的多样初心

C: 性能
Java:跨平台
C++: 大规模程序
VB: 桌面应用
Python:计算时代演进的选择

Python语言的特点

通用语言
脚本语言
开源、跨平台、多模型语言

C/C++:python归python ,c归c
Java:针对特定开发和岗位需求
HTML/CSS/JS:不可替代的前端技术,全栈能力
其他语言: R/Go/Matlab等,特定领域
工具决定思维:关注工具变革的力量!

超级语言的诞生

机器语言 --> 代码直接执行,与CPU有关
汇编语言 --> 助记符,汇编器,与CPU有关
高级语言 --> 编译器,与CPU无关
超级语言 --> 整合已有程序,庞大计算生态

== python是唯一的超级语言! ==

2.2 实例2:Python蟒蛇绘制

== import turtle == 导入海归绘图库

“举一反三:”

Python蟒蛇绘制问题是各类图形绘制问题的代表
–圆形绘制、五角星绘制、国旗绘制、机器猫绘制…

2.3 模块1:turtle库的调用

2.3.1 turtle库基本介绍

--注:turtle库是turtle绘图体系的python实现
--1969年诞生,是python标准库之一,入门级图形绘制函数库
--Python计算生态 = 标准库 + 第三方库
-库Library、包Package、模快Module,统称模块

2.3.2 turtle绘图窗体布局

turltle.setup(width, height, startx, starty)
--注:-	setup()设置窗体大小及位置
        4个参数后两个可选,不选则默认在窗口的正中间,setup()不是必须的

2.3.3 turtle空间坐标体系

–1)绝对坐标:和数学中的坐标系(象限)知识相同
–turtle.goto(x,y)

–2)海龟坐标:后退<–>前进;左侧<–>右侧

–3)空间坐标体系:turtle.bk(d),turtle.fd(d),burtle.circle(r,angle)

2.3.4 turtle角度坐标体系

--1)绝对角度:0/360,90/-270,180/-180,270/-90
--turtle.seth(angle):改变海龟行进方向,angle为绝对度数,只改变方向不前进。
 
--2)海龟角度:turtle.left(angle),turtle.right(angle)

2.3.5 RGB色彩体系

--RGB指 红 蓝 绿 组合
--RGB整数值,小数值
--turtle.colormode(mode),默认小数值
   mode = 1 表示rgb小数值模式
   mode = 255 表示rgb整数值模式

2.4 turtle程序语法元素分析

2.4.1 库引用和 import

import turtle
turtle. 格式:<a>.<b>()
<库名>.<函数名>(<函数参数>)<库别名>.<函数名>(<函数参数>)

2.4.2 画笔控制函数

画笔操作后一直有效,一般成对出现

  1. turtle.penup() 别名 turtle.pu()
    抬起画笔,海龟在飞行,飞行的轨迹不在画布上面显示
  2. turtle.pendown(),别名 turtle.pd()
    落下画笔,海龟在爬行

画笔设置后一直有效,直至下次重新设置

  1. turtle.pensize(width) 别名 turtle.width(width)
    画笔宽度,海龟的腰围

  2. turtle.pencolor(color) color为颜色字符串或r,g,b值
    画笔颜色,海龟在涂装
    pencolor(color)的color可以有三种形式

  • 颜色字符串 :turtle.pencolor(“purple”)
  • RGB的小数值:turtle.pencolor(0.63, 0.13, 0.94)
  • RGB的元组值:turtle.pencolor((0.63,0.13,0.94))

2.4.3 运动控制函数

控制海龟行进:走直线 & 走曲线

  1. turtle.forward(d) 别名 turtle.fd(d)
    向前行进,海龟走直线
    d: 行进距离,可以为负数
  2. turtle.circle(r, extent=None)
    根据半径r绘制extent角度的弧形
  • r: 默认圆心在海龟左侧r距离的位置
  • extent: 绘制角度,默认是360度整圆
    在这里插入图片描述

2.4.4 方向控制函数

  1. turtle.setheading(angle) 别名: seth(angle)
    改变行进方向,海龟走角度
  2. turtle.left(),turtle.right()

在这里插入图片描述

range()函数

产生循环计数序列
range(N)产生 0 到 N-1的整数序列,共N个
range(M,N)产生 M 到 N-1的整数序列,共N-M个

第三章 基本数据类型

3.1 数字类型及操作

--3.1.1整数类型:与数学中概念一致,+|-均可,无范围限制
--pow(x,y)函数
--3.1.2 4种进制表示形式:
十进制,二进制(0b,0B开头),八进制(0o,0O开头),十六进制(0x,0X)
 
--3.1.3浮点数类型:浮点数范围和小数精度都存在限制,但常规计算可以忽略
浮点数间运算存在不确定尾数,发生在10E-16左右,不是bug
-- round(x,d):对x四舍五入,d是小数截取位数。用于浮点数间运算及比较。

-- 浮点数采用科学计数法表示<a>e<b>表示 a*10b
   例如:4.3e-3 值为0.0043    9.6E5 值为960000.0
   
--3.1.4复数类型:
  z = 1.23e-4+5.6e+89j
  Z.real获得实部,Z.imag获得虚部

3.1.5数值运算操作符:类型间可以混合运算,生成结果为“最宽”类型。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
–数值运算函数:
– abs(x) 绝对值
– divmod(x,y) => 同时输出商和余数
– pow(x,y[,z]) => 幂余,(x**y)%z
– round(x[,d]) => 四舍五入,d小数位数,默认为0
– max()最大值
– min()最小值
– int(x)
– float()
– complex(x)

3.2 实例3:天天向上的力量

  • GRIT,坚毅,对长期目标的持续激情及持久耐力
  • GRIT是获得成功最重要的因素之一,牢记天天向上的力量

3.3 字符串类型及操作

3.3.1 字符串类型的表示

– 单引号,双引号;三引号

– 索引 [M]
– 切片 [M,N,K]
在这里插入图片描述
在这里插入图片描述
str[::1] 的结果是012345678910

转义字符:\b回退,\n换行,\r回车(光标移到本行行首)
在这里插入图片描述

3.3.2 字符串操作符

– + 字符串拼接
– * 复制n次字符串
– in
在这里插入图片描述

3.3.3 字符串处理函数

– len(x)
– str(x) 任意类型所对应的字符串形式
– hex(x)或oct(x) 整数x的十六进制或八进制小写形式字符串
– chr(u) u为Unicode编码,返回其对应的字符
– ord(x) x为字符,返回其对应的Unicode编码

补充
若不想使print换行,添加end=""(空),
如print(t [eval (c )-1],end=’’)

3.3.4 字符串处理方法

  1. – S.lower()或S.upper() 返回字符串副本,全部字符小写/大写
    – S.split(sep=None) 返回一个列表,由str根据sep被分隔部分组成
    – S.count(sub) 返回子字符串sub在str中出现的次数
    在这里插入图片描述

  2. – S.replace(old,new)
    – S.center(width[,fillchar])
    在这里插入图片描述
    “python”.center(20,"=") 结果为 ‘=python=’
    在一个20字符的宽度中,让我们的python字符居中,同时在空余的部分用等号来填充。

  3. – S.strip(chars)从str中去掉在其左侧和右侧chars中列出的字符。
    – S.join(iter) 在iter变量除最后元素外每个元素增加一个S。例如:’,’.join(“12345”) #主要用于字符串分割
    在这里插入图片描述

3.3.5 字符串类型的格式化

  1. 字符串格式化使用.format()方法,用法如下:
    <模板字符串>.format(<逗号分隔的参数>)
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
** “{:10}”.format(“BIT”) ** 中默认是空格填充左对齐

在这里插入图片描述
所有字符都用英文半角

3.4 模块2:time库的使用

3.4.1 time库的基本介绍

  1. 时间获取:time() ctime() gmtime()
    在这里插入图片描述
    在这里插入图片描述
    gmtime()得到一个计算机内部可以操作的时间,struct_time格式

  2. 时间格式化: strftime() ,strptime()

  • 格式化:类似字符串格式化,需要有展示模板
  • 展示模板由特定的格式化控制符组成
  • strftime()方法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • strptime()方法
  • strptime()与strftime()是互补关系,能够将一段字符串变成时间
    在这里插入图片描述
  1. 程序计时:sleep(),perf_counter()

3.4.2 时间获取

.time() 获取当前时间戳,即计算计算机内部时间值,浮点数。

.ctime()获取当前时间并以易读方式表示,返回字符串

.gmtime()获取当前时间,表示为计算机可处理的时间格式

3.4.3 时间格式化

.strftime(tpl,ts) : tpl是格式化模板字符串,用来定义输出效果,ts是计算机内部时间类型变量
t = time.gmtime()
time.strftime("%Y-%m-%d %H:%M:%S", t)

t = time.gmtime()
time.strftime("%Y-%m-%d %H:%M:%S", t)

timeStr = “2018-01-26 12:55:20”
time.strptime(timeStr,"%Y-%m-%d %H:%M:%S")

3.4.4 程序计时应用

  1. 程序计时指测量起止动作所经历时间的过程
  • 测量时间:perf_counter(),非常精准
  • 产生时间:sleep(),让程序去休眠或产生一点时间
    在这里插入图片描述
    start = time.perf_counter()
    end = time.perf_counter()
    end - start
  1. sleep(s) s拟休眠时间,单位是秒,可以是浮点数
    在这里插入图片描述

3.5 实例4:文本进度条

采用sleep()模拟一个持续的进度
这里理解一个重要的系统概念:刷新
刷新的关键是\r

  • 刷新本质:用后打印的字符串覆盖之前的字符串。
  • 不能换行:print()需要被控制
  • 要能回退:打印后光标退回到之前的位置\r
# TextProBarV3.py
import time
scale = 50 # 文本进度条的大概的宽度
print("执行开始".center(scale//2,"-")) # p3.3.4 center填充函数
start = time.perf_counter() # 确定了一个开始时间
for i in range(scale + 1):
    a = "*" * i # 字符串与整数的乘积,表示复制字符串的次数,a是i个*的字符串
    b = "." * (scale - i)
    c = (i / scale) * 100
    dur = time.perf_counter() - start
    # 给end赋值空字符串,可以是print每一次输出字符串之后不会增加换行,只会把光标停留在当次输出字符串的后面
    # 这里的\r
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c, a, b, dur), end="") 
    time.sleep(0.1)
print("\n" + "执行结束".center(scale // 2, "-"))

第四章 程序的控制结构

4.1 程序的分支结构

“程序的控制结构”:顺序结构、分支结构、循环结构

4.1.1 单分支结构

语法: if <条件>:
<语句块>

4.1.2 二分支结构

语法: if <条件>:
<语句块1>
else:
<语句块2>

紧凑形式:适用于简单表达式的二分支结构
<表达式1> if <条件> else <表达式2>
在这里插入图片描述

4.1.3 多分支结构

语法:if <条件1>:
<语句块1>
elif <条件2>:
<语句2>

else:
<语句块N>
注: 注意多条件之间的包含关系,注意变量取值范围的覆盖。 通俗点: 多分支结构中,如果一个分支判断条件通过后,会执行对应的语句块,之后结束分支程序。即使,后续的elif条件也满足,也不会执行对应的语句块.所以这里其实也有一个顺序关系。

4.1.4 条件判断及组合

–条件判断操作符:<,<=,>=,>,==,!=

–条件组合三个保留字:and,or,not

4.1.5 程序的异常处理

try:
    <语句块1>
except [<异常类型>]<语句块2>

注:标注异常类型后,仅响应该异常,异常类型名字等同于变量。
高级使用:

try:
    <语句块1>
except:
    <语句块2>
else:           # 不发生异常的时候执行(奖励)
    <语句块3>
finally:        # 无论是否异常一定会执行
    <语句块4>

4.2 实例5:身体质量指数BMI

BMI = 体重(Kg)/身高2(m2)

注:阅读代码的时候,快速的方法是:先搞懂分支的范围关系,再深入看每个分支在做什么。而不是从上到下的顺序结构。

  1. 国际标准
#Cal
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值