** Ref:**中国大学MOOC(慕课)_优质在线课程学习平台 (icourse163.org)
第一章 Python 语言程序设计
1.1 程序设计基本方法
1.1.1 计算机与程序设计
1. 计算机的概念
计算机具备两个特性:
-
功能性:对数据的操作,表现为数据计算、输入输出和结果存储等
-
可编程性:根据一系列指令自动地、可预测地、准确地完成操作者的意图
2. 计算机的发展
计算机的发展参照摩尔定律,表现为指数方式
- 计算机硬件所依赖的集成电路规模参照摩尔定律发展
- 计算机运行速度因此也接近几何级数快速增长
- 计算机所能高效支撑的各类运算功能不断丰富发展
默认定律:单位面积集成电路上容纳晶体管数量约每两年翻一番

3. 程序设计
程序设计是计算机可编程性的体现
- 程序设计,亦称变成,深度应用计算机的主要手段
- 程序设计应尽成为当今社会需求量最大的职业技能之一
- 很多岗位都将被计算机程序接管,程序设计将是生存技能
4. 程序设计语言
程序设计语言是一种用于交互的人造语言
- 程序设计语言,亦称编程语言,程序设计的具体实现方式
- 编程语言相比于自然语言更简单、更严谨、更准确
- 编程语言主要用于人类和计算机之间的交互
5. 程序设计语言
编程语言种类很多,但生命力强劲的却不多
- 编程语言有超过 600 多种,绝大部分都不再被使用
- C 语言诞生于 1972 年,它是第一个被广泛使用的编程语言
- Python 语言诞生于 1990 年,被广泛应用于人工智能和数据分析
1.1.2 编译和解释
1. 编程语言的执行方式
-
源代码:采用某种编程语言编写的计算机程序,人类可度
例如:result = 2 + 3
-
目标代码:计算机可直接执行,人类不可读(专家除外)
例如:11010010 00111011
2. 编译和解释
代码的执行方式:
- 编译:将源代码一次性转化成目标代码的过程

- 解释:将源代码逐条转化成目标代码同时逐条运行的过程

3. 静态语言和脚本语言
根据执行方式不同,编程语言分为两类
-
静态语言:使用编译执行的编程语言
例如,C/C++语言、Java语言等
-
脚本语言:使用解释执行的编程语言
例如,Python语言、JavaScript语言、PHP语言
执行方式不同,优势各有不同
- 静态语言:编译器一次性生成代码,优化更充分,程序运行速度更快
- 脚本语言:执行程序时需要源代码,维护更灵活,跨多个操作系统平台
1.1.3 程序的基本编写方法
1. IPO
程序的基本编写方法
- I:Input 输入,程序的输入
- P:Process 处理,程序的主要逻辑
- O:Output 输出,程序的输出
2. 理解 IPO
- 输入
- 程序的输入方式有很多,如文件输入、网络输入、控制台输入、交互界面输入、内部参数输入等
- 输入是一个程序的开始
- 输出
- 程序的输出方式亦有很多种,如控制台输出、图形输出、文件输出、网络输出、操作系统内内部变量输出等
- 输出是程序展示运算结果的方式
- 处理
- 处理是程序对输入数据进行计算产生输出结果的过程
- 处理方法统称为算法,它是程序最重要的部分
- 算法是一个程序的灵魂
3. 问题的计算部分
一个待解决的问题中,可以用程序辅助完成的部分
- 计算机只能解决计算部分,即问题的计算部分
- 一个问题可以有很多种角度理解,产生不同的计算部分
- 问题的计算部分一般都有输入、处理、输出的过程
4. 编程解决问题的步骤
- 确定 IPO:明确计算部分及功能边界
- 编写程序:将计算求解的设计变成现实
- 调试程序:确保程序将按照正确逻辑能够正确运行
1.1.4 计算机编程
编程能够训练思维
- 编程体现了一种抽象式交互关系、自动化执行的思维模式
- 计算思维,区别逻辑思维和实证思维的第三种思维模式
- 能够促进人类思考,增进观察力和深化对交互式关系的理解
编程能够增进认识
- 编程不单纯式求解计算问题
- 不仅要思考解决办法,还要思考用户体验、执行效率等
- 能够帮助程序员加深用户行为以及社会文化认识
编程能够带来乐趣
- 编程能够提供展示自身思想和能力的舞台
- 让世界增加新的颜色,让自己变得更酷,提升心理满足
- 在信息空间里思考创新,将创新变为现实
编程能够提高效率
- 能够更好地利用计算机解决问题
- 显著提高工作、生活和学习效率
- 为理想的实现提供一种借助计算机的高效手段
编程能够带来就业机会
- 程序员是信息时代最重要的工作岗位之一
1.2 Python开发环境配置
1. Python语言概述
Python 译为“蟒蛇”
Python 语言拥有者是Python Sorftware Foundation (PSF)
PSF 是非盈利组织,致力于保护 Python 语言开放、开源和发展
Guido van Rossum
1991年正式对外发布 Python1.x 系列版本
2002 年发布了 Python2.x 系列版本
2008 年发布了 Python3.x 系列版本
Python2.x 与 Python 3.x 是不兼容的
2. Python 开发环境配置
Ref:python官网
国内访问官网速度很慢,可以参考https://python123.io/download)
3. Python 程序编写与运行
交互式和文件式
- 交互式:对每个输入语句即时运行结果,适合语法练习
- 文件式:批量执行一组语句并运行结果,编程的主要方式
实例1 圆面积的计算
r = 1
area =3.1415 * r * r
print (area)
print ("{:.2f}".format(area))
实例2 绘制多个同切圆
import turtle
turtle.pensize(2)
turtle.circle(10)
turtle.circle(40)
turtle.circle(80)
turtle.circle(160)
实例3 绘制一个五角星
from turtle import *
color('red', 'red')
begin_fill()
for i in range(5):
fd(200)
rt(144)
end_fill()
1.3 实例1 温度转换
1. 问题分析
该问题中的计算部分的理解和确定
-
理解1:直接将温度进行转换
-
理解2:将温度信息发布的声音或图像形式进行理解和转换
-
理解3:监控信息信息发布渠道,实时获取并转换温度值
采用理解1
划分边界
- 输入:带华氏或摄氏标志的 温度值
- 处理:根据温度标志选择适当的温度转换算法
- 输出:带摄氏或华氏标志的温度值
2. 源码
#TempConvert.py
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("输入格式错误")
1.4 Python 程序语法元素分析
1. 程序的格式框架
缩进:一行代码开始前的空白区域,表达程序的格格式框架
-
严格明确:缩进是语法的一部分,缩进不正确程序运行错误
-
所属关系:表达代码间包含和层次关系的唯一手段
-
长度一致:程序内一致即可,一般用4个空格或1个TAB
注释:不被程序执行的辅助性说明信息,温度转换程序中的第一部分 #TempConvert 就是注释信息。
-
单行注释:以 # 开头,其后内容为注释
-
多行注释:以 ''' 开头和结尾
例如,
''' 这是多行注释的第一行
这是多行注释的第二行 '''
2. 命名与保留字
变量:程序中用于保存和表示数据的占位符号,如tempstr、C、F
- 变量采用标识符(名字)来表示,关联标识符的过程叫命名
- 可以用等号(=)像变量赋值或修改值,=被称为赋值符号
变量的命名:
- 大小写字符、数字、下划线和汉字等字符组合
- 大小写敏感、首字符不能是数字、不与保留字相同
保留字:被编程语言内部定义并保留使用的标识符(变量)
- Python 语言有33个保留字(也叫关键字),如 if 、 elif 、else 、in 等等
- 保留字严格区分大小写,if 是保留字,而 IF 是用户自定义的变量

黑色的 26 个是在 Python 基础语法体系中出现的,而红色的 7 个在本门课程不会涉及。
3. 数据类型
如10,011,101计算机该如何解释呢?
- 这是一个二进制数字或者十进制数字
- 这是一段文本,作为文本,逗号也是文本中的一部分,一共包含10个字符
- 这是用逗号分隔的3个数字
计算机识别就出现了歧义
数据类型:供计算机程序理解的数据形式
- 程序设计语言不允许存在语法歧义,需要定义数据的类型
- 程序设计语言通过一定方式向计算机表达数据类型的形式
字符串类型
由一对单引号或双引号括起来的0个或多个字符组成的有序字符序列
字符的索引可以通过正向递增序号和反向递减序号两种

字符串的使用:
-
索引:返回字符串中单个字符 <字符串>[M]
例如,name = 'lxf' , name[0] 就是 l
-
切片:返回字符串中一段字符字串 <字符串>[M:N]
例如:name = 'lxf',name[0:2]就是 lx(左开右闭,包含0、1不好含2)
-
列表类型:[10,011,101]
数字类型
数字类型包含整数类型和浮点数类型
-
整数:数学中的整数
例如,32 或者 -89
-
浮点数:数学中实数,带有小数部分
例如,1.8 或者 -1.8
列表类型
由0个或多个数据组成的有序序列
-
列表使用[]表示,采用逗号(,)分隔元素
例如,['F','f']
-
使用保留字 in 判断一个元素是否在列表中
例如,temsptr[-1] in [ 'C' , 'c' ],在的话返回Trune,否则返回False
4. 语句与函数
赋值语句:
-
由赋值符号(=)构成一行代码
-
用来给变量赋予新的数据值
例如,C = (eval(tempstr[0:-1]) -32)/1.8 #右侧计算结果赋给变量C
-
赋值语句右侧的数据类型同时作用于变量
例如,tempstr = input(“请输入带有符号的温度值:)
**分支语句:**由判断条件决定程序运行反向的语句
-
使用保留字 if、elif、else 构成条件判断的分支结构
例如,if tempstr [-1] in [ 'F' , 'f' ]: #如果条件为True则执行冒号后带有缩进的语句
-
每个保留字所在行最后一个冒号(:) 是语法的一部分
冒号及后续缩进用来表示后续语句与条件语句的所属关系
**函数:**根据输入参数产生不同输出的功能过程
-
类似数学中的函数,y = f(x)
例如,input 、eval、print 等
5. 输入输出
输入函数 input()
从控制台获得用户输入的函数
-
input() 函数的使用格式
<变量> = input(<提示信息字符串>)
-
用户输入的信息以字符串类型保存在<变量>中
tempstr = input ("请输入") #tempstr 用来保存用户输入的信息
输出函数print()
以字符形式向控制台输出结果的函数
-
print() 函数的使用格式
print(<拟输出字符串或字符串变量>)
-
字符串类型的一对引号仅在程序内部使用,输出无引号
print("输入格式错误") #向控制台输出 输入格式错误
-
格式化
print("转换后的温度是{:.2f}C".format(C))
其中,{}表示槽,后续变量填充到槽中;{:.2f}表示将变量C填充到这个位置时取小数点后2位

评估函数eval()
去除参数最外侧引号并执行余下语句的函数
-
eval() 函数的基本使用格式
eval(<字符串或字符串变量>)
eval(“1 +2 ")将会输出3
-
将任何字符串类型的信息变成 Python 语句
6. 温度转换实例的代码分析
#TempConvert.py
# 注释信息
tempstr = input(“请输入带有符号的温度值:)
# 将用户输入的信息保存到变量tempstr中
if tempstr [-1] in ['F','f']:
C = (eval(tempstr[0:-1]) -32)/1.8
print("转换后的温度是{:.2f}C".format(C))
# 判断用户输入的最后1为是否是F或f,是则执行if后续语句
elif tempstr [-1] in ['C','c']:
F = 1.8*eval(tempstr[0:-1]) + 32
print("转换后的温度是{:.2f}F".format(F))
# 判断用户输入的最后1为是否是C或c,是则执行elif后续语句
else:
print("输入格式错误")
# 判断用户输入的信息是否是以F|f|C|c结尾,不是则执行else后续语句
第一周练习作业
1. 获得用户输入的一个整数,参考该整数值,打印输出"Hello World",要求:
如果输入值是0,直接输出"Hello World"
如果输入值大于0,以两个字符一行方式输出"Hello World"(空格也是字符)
如果输入值小于0,以垂直方式输出"Hello World"
n = eval(input())
if n == 0:
print("Hello World")
elif n > 0:
print("He\nll\no \nWo\nrl\nd")
else:
for c in "Hello World":
print(c)
2. 获得用户输入的一个字符串,格式如下:
M OP N
其中,M和N是任何数字,OP代表一种操作,表示为如下四种:+, -, *, /(加减乘除)
根据OP,输出M OP N的运算结果,统一保存小数点后2位。
注意:M和OP、OP和N之间可以存在多个空格,不考虑输入错误情况。
s = input()
print("{:.2f}".format(eval(s)))
第二章 Python 基本图形绘制
2.1 深入理解 Python 语言
2.1.1 计算机技术的演进
1. 计算机系统结构时代(1946-1981)
- 1946 年第一台计算机诞生
- 1981 年第一台 IBM PC 机诞生,计算机走向个人时代
- 这 35 年产生了很多种CPU、操作系统、编译器和解释器等,重点解决了计算能力问题
2. 网络视图时代(1981-008)
- 2008 年安卓系统诞生,计算机由 PC 时代向移动时代转换
- 这 27 年,互联网和Windows视窗操作系统出现并得以发展,解决了人与计算机、计算机与计算机的交互问题
3. 复杂信息系统时代(2008-2016)
- 计算机首次打败了国际围棋世界冠军
- 云计算、大数据、网络安全等等迅猛发展,旨在解决数据问题
4. 人工智能时代(2016- )
- 基础工作被计算机接管,旨在解决人类的问题

2.1.2 编程语言的多样初心
1. C:适合做操作系统
- 学习本质:指针、内存、数据类型
- 语言本质:理解计算机系统结构,使运行起来效率更高
- 解决问题:性能
- 适用对象:计算机类专业
2. Java:针对特定开发和岗位需求
- 学习内容:对象、跨平台、运行时
- 语言本质:理解主客体关系
- 解决问题:跨平台
- 适用对象:软件类专业
3. C++
- 学习内容:对象、多态、继承
- 语言本质:理解主客体关系
- 解决问题:大规模程序
- 适用对象:计算机类专业
4. VB
- 学习内容:对象、按钮、文本框
- 语言本质:理解交互逻辑(人机)
- 解决问题:桌面应用
- 适用对象:不确定
5. Python
- 学习内容:编程逻辑、第三方库
- 语言本质:理解问题求解
- 解决问题:各类问题
- 适用对象:所有专业
6. HTML/CSS/JS
- 不可替代的前端技术、全栈能力
2.1.3 Python 语言的特点
1. 深入理解 Python 语言
- Python 语言是通用语言
- Python 语言是脚本语言
- Python 语言是开源语言
- Python 语言是跨平台语言
- Python 语言是多模型语言
2. Python 特点与优势
-
强制可读性
-
较少的底层语法元素
-
多种编程方式
-
支持中文字符
-
丰富的第三方库
-
跨操作系统平台
2.1.4 ”超级语言”的诞生
1. 机器语言
- 一种二进制语言,直接适用二进制代码表达指令
- 计算机云关键(CPU)可直接执行,与具体 CPU 型号油管
2. 汇编语言
- 一种将二进制代码直接对应助记符的编程语言
- 汇编语言与 CPU 型号油管,程序不通用,需要汇编器转换
3. 高级语言
- 更接近自然语言,同时更容易描述计算机问题
- 高级语言代码与具体 CPU 型号无关,编译后运行
4. 超级语言
- 具备庞大的计算生态,可以很容易利用已有代码功能
- 编程思维不再是刀耕火种,而是集成开发

2.2 实例2 Python 绘制蟒蛇
1. Python 蟒蛇绘制问题分析
-
问题1:计算机绘图是什么原理
一段程序为何能够产生窗体?为何能在窗体上绘制图形?
-
问题2:Python 蟒蛇绘制从哪里开始
如何绘制一条线?如何绘制一个弧形?如何绘制一个蟒蛇?
2. Python 蟒蛇绘制的源码
#pythondraw
import turtle
turtle.setup(2000,1000,20,20)
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.circel(40,80/2)
turtle.fd(40)
turtle.circel(16,180)
turtle.fd(40 * 2/3)
turtle.down()
3. 代码的含义

2.3 模块1:turtle 库的适用
2.3.1 turtle 库基本介绍
1. turtle 库概述
turtle(海龟)库是 turtle 绘图体系的PYthon实现
- turtle 绘图体系:1969 年诞生,主要用于程序设计入门
- Python 语言的标准库之一
- 入门级的图形绘制函数库
Python 计算生态包括标准库和第三方库
-
标准库:随解释器直接安装到操作系统中的功能模块
-
第三方库:需要经过安装才能使用的功能模块
-
库Library、包Pacakge、模块Module,统称模块
2. turtle 的原理
turtle 是一种真实的存在
- 有一只海龟,其实在窗体正中心,在画布上游走
- 走过的轨迹行形成了绘制的图形
- 海龟由程序控制,可以变颜色,改变宽度等
2.3.2 turtle 绘制窗体布局
1. 窗体在显示器上的位置和大小

2. turltle 空间坐标体系
画布上以中心为原点的坐标体系
- 绝对坐标

turtle.goto函数:去到哪个位置

- 海龟坐标

3. turtle 角度坐标体系
画布上以空间 x 轴为0度的角度坐标体系
- 绝对坐标

- 海龟角度

案例

4. RGB 色彩体系
由三种颜色构成万物色
- RGB指红蓝绿三个通道的颜色组合
- 覆盖视力所能感知的所有颜色
- RGB每色取值范围是0-255或0-1小数

turtle 默认采用小数值,可切换为整数值
2.4 turtle 程序语法元素分析
2.4.1 库引用与import
1. 库引用
扩充 Python 程序功能的方式
-
使用 import 保留字完成,采用 < a >.< b >() 的编码风格
import <库名>
<库名>.<函数名>(<函数参数>)
-
使用 import 和 from 保留字完成
from <库名> import <函数名> 或from <库名> import *
<函数名>(<函数参数>)
-
使用 import 和 as 保留字共同完成
import <库名> as 别名
<别名>.<函数名>(<函数参数>)
第一种方法不会出现函数重名的问题,但较为繁琐
第二种方法会出现(多个库中的函数名冲突或引用库和自定义库函数冲突,但较为简洁
第三种方法中和了这两种方法
2.4.2 turtle 画笔控制函数
设置后一直有效
1. penup
turtle.penup() 别名turtle.pu() 抬起画笔, 海龟在飞行
2. pendown
turtle.pendown() 别名 turtle.pd() 落下画笔,海龟在爬行
3. pensize
turtle.pensize(width) 别名 turtle.width(width) 画笔宽度,海龟的腰围
4. pencolor
turtle.pencolor(color) color为颜色字符串或RGB值 画笔颜色,海龟在涂装
-
颜色字符串:turtle.pencolor("purple")
-
RGB的小数值:turtle.pencolor(0.63,0.13,0.94)
-
RGB的元组值:turtle.pencolor((0.63,0.13,0.94))

2.4.3 turtle 运动控制函数
控制海龟行进方向:走直线 & 走曲线
1. forward
turtle.forward(d) 别名 turtle.fd(d) 向前行进,海龟走直线
- d:表示行进距离,可以为负数,单位为像素
2. circle
turtle.circle(r,extent=None) 根据半径 r 控制 extent 角度的弧形
- r :绘制半径,默认圆心在海龟左侧 r 距离的位置
- extent :绘制角度,默认是 360 度整圆
2.4.4 turtle 方向控制函数
控制海龟面对方向:绝对角度 & 海龟角度
1. setheading
turtle.setheading(angle) 别名 turtle.seth(angle) 改变行进方向,绝对角度
-
angle:改变行进方向,海龟走角度
turtle.seth(-45)
2. left & right
turtle.left(angle) 海龟左转
turtle.right(angle) 海龟右转
- angle:在海龟当前行进方向上旋转的角度

2.4.5 循环语句与 range 函数
1. for 循环
按照一定次数循环执行一组语句
for < 变量 > in 值
语句

2. range函数
range (<初始值>,<结尾值>,<步长>)
-
产生循环技术序列
range(n) 产生 0 到 n-1 的整数序列,共 n 个
-
range(m,n)
产生从 m 到 n-1 的整数序列,共 n-m 个
2.4.6 Python 绘制蟒蛇代码分析
#pythondraw
import turtle
引用海龟库
turtle.setup(2000,1000,20,20)
设置窗体
turtle.penup()
turtle.fd(-250)
turtle.pendown()
抬起画笔,向后移动250个像素,落下画笔。即改变画笔初始位置
turtle.pensize(25)
turtle.pencolor("purple")
turtle.seth(-40)
设置画笔宽度为25个像素,画笔颜色为purple,画笔行进方向为绝对角度的-40度
for i in range(4):
turtle.circle(40,80)
turtle.circle(-40,80)
设置画笔沿半径是40像素的圆绘制80度的弧形,然后再以反向40度为半径绘制80度的弧形
正反指的是圆心在画笔的左右侧
turtle.circel(40,80/2)
设置画笔沿半径是40像素的圆绘制40度的弧形
turtle.fd(40)
设置画笔向前行进40像素的直线
turtle.circel(16,180)
turtle.fd(40 * 2/3)
turtle.down()
程序运行之后,不会退出。
删除则会在程序运作完成后自动退出
第三章 基本数据类型
3.1 数字类型及操作
3.1.1 整数类型
1. 与数学中整数的概念一致
- 可正可负,没有取值范围限制
- pow(x,y) 函数,计算 x 的 y次方
2. 四种进制表示形式
- 十进制:例如 1010,99,-217等等
- 二进制:以 0b 或 0B 开头,例如 0b010
- 八进制:以 0o 或 0O 开头,例如 0o123
- 十六进制:以 0x 或 0X 开头,例如 0x9a
3.1.2 浮点数类型
1.与数学中的实数概念一致
- 带有小数点及小数的数字
- 浮点数取值范围和小数精度都存在限制,但常规计算可忽略
- 取值范围数量级约为 -10的308次方 至 10的308次方,精度数量级10的-16次方
2. 浮点数间运算存在不确定尾数

这种情况出现在多种语言,不是bug。
3. round函数
round(x,d):对x四舍五入,d是小数截取位数。
小数的比较需要借助round函数进行
4. 浮点数可以使用科学计数法来表示
-
使用字母 e 或 E 作为幂的符号,以 10 为基数,格式如下:
< a > e < b > 表示a*10的b次幂
-
例如,4.3e-3 的值为0.0043
3.1.3 复数类型
1. 与数学类型中的复数类型是一致的
-
a + bj被称为复数,其中 a 是实部,b 是虚部
-
实数类型在空间中有很大的应用,但本文不提供更详细的使用
-
只有 python 语言种提供了复数类型。
3.1.4 数学运算操作符
1. 操作符是完成运算的一种符号体系
| 操作符 | 描述 |
|---|---|
| x + y | 加,x 与 y 之和 |
| x - y | 减,x 与 y 之差 |
| x * y | 乘,x 与 y 之积 |
| x / y | 除,x 与 y 之商 |
| x // y | 整数除,x 与 y 之整数商 ,10 // 3 结果是3 |
| + x | x 本身 |
| - x | y 的负数 |
| x % y | 余数,模运算。10 % 3 的结果是1 |
| x ** y | 幂运算,x 的 y 次幂 |
类型间可进行混合运算,生成结果为“最宽”的类型
- 三种类型存在一种逐渐 “扩展” 或 “变宽” 的关系“
- 整数 -> 浮点数 -> 复数
3.1.4 数值运算函数
| 函数及使用 | 描述 | 案例 |
|---|---|---|
| abs(x) | 绝对值,x 的绝对值 | abs(-10.01) 的结果是10.01 |
| divmod(x,y) | 商余,同时输出商和余数 | divmod(10,3) 的结果是 (3,1) |
| pow(x,y[,z]) | 幂余,(x**y)%z ,[..]表示参数可省略 | pow(2,8,255) 的结果是1 |
| round(x[,d]) | 四舍五入,d 是保留小数位数,默认值为 0 | round(10.123,2) 的结果是10.12 |
| max(x1,x2,xn) | 最大值,返回x1……xn中的最大值,n不限 | max(1,2,3,4) 的结果是4 |
| min(x1,x2,xn) | 最小值,返回x1……xn中的最小值,n不限 | max(1,2,3,4) 的结果是1 |
| int(x) | 将 x 变成整数,舍弃小数部分 | int(1.23) 的结果是1 |
| float | 将 x 变成浮点数,增加小数部分 | float(1) 的结果是1.0 |
| complex(x) | 将 x 变成复数,增加虚数部分 | complex(1) 的结果是(1 + 0j) |
3.2 实例3 天天向上的力量
基本问题:持续的价值
1. 一年 365 天,每个工作日进步 1% ,累计进步多少呢?
#daydayup.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))
print(f"工作日的力量: {dayup:.2f}")
#daydayup.py
def dayup(df):
dayup = 1
for i in range(365):
if i % 7 in [6,0]:
dayup = dayup * (1 - df)
else:
dayup = dayup * (1 + df)
return dayup
dayfactor = 0.01
result = dayup(dayfactor)
print(f"{result:.2f}")
2. 每个工作日进步多少,可以打到365天每天进步1%
#daydayup.py
def dayup(df):
dayup = 1
for i in range(365):
if i % 7 in [6,0]:
dayup = dayup * (1 - df)
else:
dayup = dayup * (1 + df)
return dayup
dyfactor = 0.01
while dayup(dyfactor) < (1.01**365):
dyfactor += 0.01
print(f"工作日的努力参数是:{dyfactor:.2f}")
3. 四则计算器
def calculator():
# 提示用户输入数字和运算符
aa = float(input("请输入第一个数字:"))
bb = float(input("请输入第二个数字:"))
operator = input("请选择运算符(+、-、*、/):")
# 根据运算符进行相应的计算
if operator == "+":
result = aa + bb
elif operator == "-":
result = aa - bb
elif operator == "*":
result = aa * bb
elif operator == "/":
if bb != 0: # 避免除以零错误
result = aa / bb
else:
print("除数不能为零")
return
else:
print("无效的运算符")
return
# 输出计算结果
print(f"{int(aa)} {operator} {int(bb)}的运算结果是:{result}")
# 调用计算器函数
calculator()
3.3 字符串类型及其操作
3.3.1 字符串类型的表示
1. 字符串的表示
字符串是由 0 个或多个字符组成的有序字符序列
- 字符串由一对单引号或双引号表示;
- 可以对其中的字符进行索引
字符串有两类共四种表示方法
-
由一对单引号或双引号表示,仅表示单行字符串
例如,“请输入带有符号的温度值:”
-
由一对三单引号或三双引号表示,可表示多行字符串
例如,
'''
hello python
hello world
'''
2. 字符串的序列
正向递增序号和反向递减序号
以"请输入带有符号的温度值:"为例
| -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 请 | 输 | 如 | 带 | 有 | 符 | 号 | 的 | 温 | 度 | 值 | : |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
3. 字符串的使用
使用 [ ]获取字符串中的一个或多个字符
-
索引:返回字符串中的单个字符
< 字符串 > [ M ]
"〇一二三四五六七八九十"[0] 的结果是 “〇”
-
切片:返回字符串中的一段字符串
< 字符串 > [ M:N:K] 表示从 M 开始,到 N -1
M 缺少代表至开头,N 缺失代表至结尾
K表示步长,可缺失,缺失默认为1;可为负值,负值代表将切片结果倒序
"〇一二三四五六七八九十"[0:2] 的结果是 “〇一”
"〇一二三四五六七八九十"[:3] 的结果是 “〇一二”
"〇一二三四五六七八九十"[1:8:2] 的结果是 “一三五七”
"〇一二三四五六七八九十"[::-1] 的结果是 “九八七六五四三二一〇”
4. 转义符\
-
转义符表达特定字符的本意
"这里有个双引号"" 结果为 这里有个双引号"
-
转义符形成一些组合,表达一些不可打印的含义
| 符号 | 含义 |
|---|---|
| \b | 回退 |
| \n | 换行(光标移动到下一行首) |
| \r | 回车(光标移动到本行首) |
3.3.2 字符串操作符
1. 字符串操作符
| 操作符及使用 | 描述 |
|---|---|
| x + y | 连接两个字符串 |
| n * x 或 x * n | 复制 n 次字符串 |
| x in s | 如果 x 是 s 的字串,返回True,否则返回False |
3.3.3 字符串处理函数
| 函数 | 描述 | 案例 |
|---|---|---|
| len(x) | 返回字符串的长度 | len("lxf") 的结果是 3 |
| str(x) | 将变量x变成字符串类型 | str(123) 的结果是 123 |
| hex(x) | 将十六进制x转化成二进制的字符串类型 | |
| oct(x) | 将八进制425转化成二进制的字符串类型 | |
| chr(x) | 返回 Unicode 编码中 u 对应的字符 | |
| ord(x) | 返回 x 对应的 Unicode 编码值 |
Unicode 编码是 Python 的字符串编码方式
- 统一字符编码,即覆盖几乎所有字符的编码方式
- 从 0 到 1114111 (0x10FFFF) 空间,每个编码对应一个字符
- Python 字符串中每个字符都是Unicode编码字符
3.3.4 字符串处理方法
"方法" 在编程中是一个专有名词
-
方法特指< a >.< b >()风格中的函数< b >()
-
方法本身也是函数,但与< a > 无关,
< a >.< b >()风格是面向对象编程的一种使用风格,a是对象,函数 b 是 a 能提供的函数,而且方法必须采用 "." 的形式使用
本文只讲解 Python 基础语法体系,下面不对面向对象的编程方法深一步探讨
-
字符串及变量也是 < a > ,存在一些方法
| 函数 | 描述 | 案例 |
|---|---|---|
| lower() | 返回字符串的副本,全部字符小写 | "AbcDe".lower() 的结果是 abcde |
| upper() | 返回字符串的副本,全部字符大写 | "AbcDe".upper() 的结果是 ABCDE |
| title() | 返回字符串的副本,首字母大写 | "AbcDe".title() 的结果是 Abcde |
| split(sep) | 将字符串 按照逗号 , 进行分割,存入列表中 | "a,b,c,D,e,a".split(",") 的结果是 ['a', 'b', 'c', 'D', 'e', 'a'] |
| count(sub) | 返回字串 sub 在字符串中出现的次数 | "abcDea".count("a") 的结果是 2 |
| replace(old,new) | 返回字符串副本,所有 old 字串被替换为 new | "abcDea".replace("b","B") 的结果是 aBcDea |
| center(width[,fillchar]) | 字符串根据宽度width居中,fillchar可选 | "abc".rcenter(9,"=") 的结果是 ===abc=== |
| strip(chars) | 去掉字符串在其左侧和右侧char中列出的字符 | "python".strip("np") 的结果是 ytho |
| str.join(iter) | 在iter变量除最后元素每个元素后增加一个str #主要用于字符串分隔 | ",".join("python") 的结果是 p,y,t,h,o,n |
3.3.5 使用format对字符串的格式化
1. 字符串的格式化--槽
- 字符串格式使用 .format() 方法,用法如下:
- < 模板字符串 >.format(< 逗号分隔的参数 >)
- 逗号分隔的参数从前到后分别是 0 、1 、2
其中,模板字符串中用槽 "{}" 来表示后面的参数,槽可以使用默认顺序和指定顺序
-
默认顺序:当槽中不指定参数的序号时候,模板字符串中从左到右的槽分别是代表参数 0 、 1 、2
"{}:计算机{}的CPU占用率为{}%".format("2024-05-23", "C", "10")
对应的结果是: 2024-05-23:计算机C的CPU占用率为10%
-
指定顺序:槽中用数字序列表示参数
"{1}:计算机{0}的CPU占用率为{2}%".format( "C", "2024-05-23","10")
对应的结果也是: 2024-05-23:计算机C的CPU占用率为10%
2. 字符串的格式化--输出格式
格式:{<参数序号>:<格式控制标记>}.format("字符串")

默认格式化输出是 空格,左对齐 , 字符串原本宽度;
案例1:填充对齐宽度
"{0:=^20}".format("python")
#含义
=======python=======
代码含义是:
{0:=^20}是格式化字符串的格式说明符,其中:0表示格式化参数的索引,这里是第一个参数。=表示填充字符,即在原字符串前后分别填充=。^表示居中对齐。20表示总宽度为 20。
.format("python")则是将字符串"python"格式化并插入到格式化字符串中对应的位置。
因此,最终输出结果是一个长度为 20 的字符串,其中包含了居中对齐的 "python",并在两侧用 = 填充。例如,如果原字符串不足以填满总宽度,那么填充字符 = 将会被用于填充。

案例2:精度和类型
"{0:,.2f}".format(12345.123456)
#含义
12,345.12
代码含义
{0:,.2f}是格式化字符串的格式说明符,其中:0表示格式化参数的索引,这里是第一个参数。:后面是格式化的规则。,表示在数字中插入千位分隔符。.2f表示将浮点数保留两位小数并进行格式化。
.format(12345.123456)则是将浮点数12345.123456格式化并插入到格式化字符串中对应的位置。
3.4 time 库的使用
1. time 库基本介绍
time 库是 Python 中处理时间的标准库
- 计算机时间的表达
- 提供获取系统时间并格式化输出功能
- 提供系统级别精确计时功能,用于程序性能分析
time库的函数
- 时间获取:time() ctime() gmtime()
- 时间格式化:strftime() strptime()
- 程序计时:sleep() perf_counter()
2. 时间获取
-
time() 获取当前时间戳,即计算机内部时间值,浮点数
例如,time.time()
-
ctime() 获取当前时间并以易读方式来表示,返回字符串
例如,time.ctime()
-
gmtime() 获取当前时间,表示为计算机可处理的时间格式
例如,time.gmtime()
3. 时间格式化
将时间以合理的方式展示出来
- strffime(tpl,ts) tpl 是格式化字符串,用来定义输出效果,ts是计算机内部时间类型变量

在 Python 的时间格式化字符串中你可以使用不同的格式码来表示日期、时间和其他时间相关信息。以下是一些常用的格式码:
%Y:四位数的年份,例如:2024%m:两位数的月份,范围从 01 到 12%d:两位数的日期,范围从 01 到 31%H:两位数的小时,24 小时制,范围从 00 到 23%M:两位数的分钟,范围从 00 到 59%S:两位数的秒数,范围从 00 到 59%A:星期的全名,例如:Monday%a:星期的缩写,例如:Mon%B:月份的全名,例如:January%b或%h:月份的缩写,例如:Jan%Z:时区的名称%z:时区偏移量,格式为:±HHMM 或 ±HH:MM
除了上述的格式码外,还可以使用其他特定于时间格式化的字符,例如空格、冒号、破折号等,来构建所需的格式。
例如,"%Y-%m-%d %H:%M:%S" 表示以以下格式显示日期和时间:2024-05-23 14:59:59。
这些格式码和特殊字符组合在一起,可以满足各种时间格式化的需求。
将时间以指定格式输入进去
- strptime(str,tpl) str 是字符串形式的时间值,tpl 是格式化模板字符串,用来定义输入效果

4. 程序计时应用
-
sleep(s) s是拟休眠的时间,单位是秒,可以是浮点数
import time print("start") time.sleep(1) print ("stop") -
perf_counter()
该函数返回一个CPU级别的精确时间数值,单位为秒
由于这个计数值起点不确定,连续调用才有意义
比如,程序开始执行时候调用一次,程序结束的时候再调用一次,两次做差就可以得到程序运行时间
import time start = time.perf_counter() time.sleep(2) end = time.perf_counter() print (int(end -start))
3.5 实例4 文本进度条
v1
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(1)
print("------执行结束-----")
v2 实现动态刷新
- 刷新的本质是:用后来打印的字符覆盖之前的字符
- 不能换行:print()需要被控制
- 要能回退:打印后光标退回到之前的位置\r
import time
scale = 10
print("------执行开始-----")
for i in range(scale +1):
a = "*" * i
b = "." * (scale -i)
c = (i/scale)*100
print("\r{:3}%[{}->{}]".format(c,a,b),end="")
time.sleep(1)
print("------执行结束-----")
v3
#TextProBarV3.py
import time
scale = 10
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,'-'))
评论区