第一章 程序设计基本方法
1.1 计算机的概念
/计算机是根据指令操作数据的设备,具备功能性和可编程性两个基本特性.
/摩尔定律:单位面积集成电路可容纳晶体管的数量约每两年翻一倍.翻倍翻倍翻倍翻倍.......(戈登.摩尔是Intel的创始人之一)
1.2 程序设计语言
/程序设计语言的执行方式包括编译执行和解释执行两种.
1.2.1 程序设计语言概述
/程序设计语言包括三类:机器语言.汇编语言.高级语言
/"编程不是一件很难的事"
1.3 Python语言概述
/Python语言是一个语法简洁,跨平台,可扩展的开源通用脚本语言.
1.3.1 Python语言的发展
balabalabala...
1.3.2 编写Hello程序
>>> print("Hello World")
Hello World
1.3.3 Python语言的特点
/语法简洁.跨平台.粘性扩展.开源理念.通用灵活.强制可读.支持中文.模式多样.类库丰富
1.4 Python语言开发环境配置\
/IDLE是一个轻量级Python语言开发环境,可以支持交互式和批量式两种编程方式.
1.4.1 安装Python解释器
balabalbalabala...
1.4.2 运行Hello程序
balabalabala...
1.4.3 运行Python小程序
/圆面积的计算
>>> radius = 25 #圆的半径是25
>>> area = 3.1415*radius *radius #输入计算圆面积的公式
>>> print(area)
1963.4375000000002
>>> print("{:.2f}".format(area)) #只输出两位小数
1963.44
>>>
/斐波那契数列的计算
>>> a,b = 0,1
>>> while a < 1000: #输出不大于1000的序列
print(a,end =",")
a,b =b,a+b
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,
1.5 程序的基本编写方法
1.5.1 IPO程序编写方法
/IPO(输入Input,处理Process,输出Output).
/输入Input:包括文件输入,网络输入,控制台输入,交互界面输入,随机数据输入,内部参数输入等.
/处理Process:程序对数据进行计算产生输出结果的过程.算法是程序的灵魂.
/输出Output:控制台输出,图形输出,网络输出,文件输出,操作系统内部变量输出.
1.5.2 理解问题的计算部分
/编写程序的目的是"使用计算机解决问题"
1.分析问题:计算机只能解决问题的计算部分.
2.划分边界
3.设计算法
4.编写程序
5.调试测试
6.升级维护
1.6 Python语言的版本更迭
/Python2.x一件已经是遗产,Python3.x是这个语言的现在和未来
/选新不选旧嘛!
第2章 Python程序实例解析
/温度转换
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("输入格式错误")
2.2 Python程序语法元素分析
/Python程序包括格式框架,注释,变量,表达式,分支语句,循环语句,函数等语法元素.
2.2.1 程序的格式框架
/Python语言采用严格的"缩进"来表明程序的格式框架.
/缩进表达了所属关系.
2.2.2 注释
#单行注释使用井号#引导
'''
多行注释
开头使用三个引号
结尾使用三个引号
'''
2.2.3 命名与保留字
/Python语言允许采用大写字母,小写字母,数字,下划线_和汉字等字符及组合给变量命名,但名字的首字母不能是数字,中间不能出现空格,长度没有限制.
/Python语言对大小写敏感.
/命名不可与保留字相同,Python语言有33个保留字,如下:
False | def | if | raise |
---|---|---|---|
None | del | import | return |
True | elif | in | try |
and | else | is | while |
as | except | lambda | with |
assert | finally | nonlocal | yield |
break | for | not | |
class | from | or | |
contine | global | pass |
2.2.4 字符串
/字符串是由双引号或者单引号括起来的零个或多个字符.
/字符串遵循正向递增(0: )和反向递减序号( :-1)
2.2.5 赋值语句
/程序中产生或计算新数据值得代码称为表达式,类似数学中的计算公式.
/"=",等号表示"赋值",将等号右侧的值,赋予等号左侧的变量.
/同步赋值:
<变量1>...<变量N> = <表达式1>...<表达式N>
2.2.6 input函数
/获得用户输入
/无论客户输入内容是什么,都用字符串形式输出.
2.2.7 分支语句
if<条件1>:
<语句块1>
elif<条件2>:
<语句块2>
...
else:
<语句块N>
2.2.8 eval()函数
/eval(<字符串>)函数是Python表达式的方式解析并执行字符串,并返回输出结果.
>>> x=1
>>> eval("x+1")
2
/eval()的作用是将输入的字符串转变成Python语句,并执行该语句.
2.2.9 print()函数
/输出函数
2.2.10 循环语句
while <条件>:
<语句块1>
<语句块2>
2.2.11 函数
/函数可以理解为对一组表达特定功能表达式的封装,它与数学函数类似,能够接收变量并输出结果.
def <函数名>():
<语句块>
2.3 实例2:Python蟒蛇绘制
略
2.4 turtle库语法元素分析
/for i in range(循环次数):
<语句块>
第3章 基本数据类型
3.1 数字类型
/Python 语言提供整数,浮点数,复数3种类型.
3.1.1 数字类型概述
/整数,复数,浮点数
3.1.2 整数类型
/十进制,二进制,八进制,十六进制
3.1.3 浮点数类型
/Python中的浮点数类型必须带有小数部分,小数部分可以为0
/浮点数有两种表达方式:十进制和科学计数法
/科学计数法:
4.3-3 = 0.0043
9.6E5 或 9.6E+5 = 960000.0
/浮点数在超过15位数字计算中产生的误差,与计算机内部采用二进制运算有关,使用浮点数无法进行极高精度的数学运算.
/所以在高精度运算中,可将浮点数转换为整数,进行计算.
/Python通过标准库decimal提供一个更高精度的数字类型Decimal,使用getcontext().prec参数自定义浮点数精度的位数.
import decimal
a=decimal.Decimal("3.141592653")
b=decimal.Decimal("1.234567898")
decimal.getcontext().prec=20
# 精确度为整数部分,小数点,小数点后共20位
print(a*b)
print(type(a*b))
#运行结果:
3.878509437986453394
<class 'decimal.Decimal'>
3.1.4 复数类型
/复数可以看作是二元有序实数对(a,b),表示为a+bj,其中a是实数部分,简称实部,b是虚部部分,简称虚部.复数是实数在二维平面空间旋转的一种表示.
/Python语言中,复数的叙述部分通过后缀J或者j来表示.
/可以通过<复数>.real和<复数>.imag分别获得<复数>的实数部分和虚数部分.
3.2 数字类型的操作
/内置的数值运算操作符
操作符 | 描述 |
---|---|
x+y | x与y的和 |
x-y | x减y |
x*y | x乘以y |
x/y | x除以y |
x//y | x除以y,取整 |
x%y | 模运算,x除以y,取余 |
-x | x的负值 |
+x | x本身 |
x**y | x的y次方 |
3.2.2 内置的数值运算函数
/内置的运算数值运算函数
函数 | 描述 |
---|---|
abs(x) | x的绝对值 |
divmod(x,y) | (x//y,x%y),输出为元组形式 |
pow(x,y[,z]) | (xy)%z,[..]表示该参数可以省略,即pow(x,y),它与xy相同 |
round(x[,ndigits]) | 对x四舍五入,保留ndigits位小数.round(x)返回四舍五入的整数值 |
max(x1,x2,x3...xn) | x1,x2,x3...xn中的最大值 |
min(x1,x2,x3...xn) | x1,x2,x3...xn中的最小值 |
/例:
可用pow(x,y,1000)求x的y次方的最后几位3位数.
可用pow(x,y,10000)求x的y次方的最后几位4位数.
3.2.3 内置的数字类型转换函数
函数 | 描述 |
---|---|
int(x) | 将x转换为整数,x可以是浮点数或字符串 |
float(x) | 返回浮点数x或者字符串x所对应的整数类型 |
complex(re[,im]) | 生成一个附属,实部为re,虚部为im,re可以是整数,浮点数或字符串,im可以是整数或浮点数,但不可以是字符串 |
3.3 模块1:math库的使用
/Python数学计算的标准函数库math共提供4个数学常数和44个函数
3.2.1 math库概述
/Python提供的内置数学类函数库.
/math库不支持复数类型
3.2.2 math库解析
/math库的数学常数
常数 | 数学表示 | 描述 |
---|---|---|
math.pi | π | 圆周率,值为3.141592653589793 |
math.e | e | 自然对数,值为2.7182818228459045 |
math.inf | ∞ | 正无穷大,负无穷大为-math.inf |
math.nan | 非浮点数标记,NaN(Not a Number) |
/math库的数值表示函数
函数 | 描述 |
---|---|
math.fabs(x) | 返回x的绝对值 |
math.fmod(x,y) | x%y,返回x与y的模,取余 |
math.fsum(x,y,...) | 浮点数精确求和 |
math.ceil(x) | 向上取整 |
math.floor(x) | 向下取整 |
math.factorial(x) | x的阶乘.如果x是小数或者是负数,返回ValueError |
math.gcd(a,b) | 返回a和b的最大公约数 |
math.frexp(x) | x=m*(2的e次方) 返回(m,e),当x=0时,返回(0.0,0) |
math.ldexp(x,i) | 返回x*(2的i次方)的值 |
math.modf(x) | 返回x的小数和整数部分 |
math.trunc(x) | 返回x的整数部分 |
math.copysign(x,y) | 用数值y的正负号替换数值x的正负号 |
math.isclose(a,b) | 比较a和b的相关性,返回True或False |
math.isfinite(x) | 当x不是无穷大或NaN,返回True;否则,返回False(负无穷也是False) |
math.isinf(x) | 当x为正无穷大或负无穷大,返回True;否则返回False |
math.isnan(x) | 当x是NaN,返回True;否则,返回False |
import math
print(math.modf(3.14))
#运行
(0.14000000000000012, 3.0)
import math
a = math.isfinite(math.inf)
b = math.isfinite(-math.inf)
c = math.isfinite(3.14)
print(a,b,c)
#运行
False False True
import math
a = math.isinf(math.inf)
b = math.isinf(-math.inf)
c = math.isinf(3.14)
print(a,b,c)
#运行
True True False
/math库的幂对数函数
函数 | 描述 |
---|---|
math.pow(x,y) | 返回x的y次幂 |
math.exp(x) | 返回e的x次幂,e是自然对数 |
math.expml(x) | 返回e的x次幂-1 |
math.sqrt(x) | 返回x的平方根 |
math.log(x[,base]) | 返回x的对数值,只输入x时,返回自然对数,即lnx |
math.log1p(x) | 返回1+x的自然对数值 |
math.log2(x) | 返回x的2对数值 |
math.log10(x) | 返回x的10对数值 |
/math库的三角函数
/略,知道能算各种三角函数得了,又繁琐,暂且也用不上,打出来也都忘.
/math库的高等特殊函数
/略
3.4 天天向上的力量
略
3.5 字符串类型及操作
/字符串是字符的序列表示,可以通过基本字符串操作符,内置字符串处理函数和字符串处理方法等对字符串进行操作.
3.5.1 字符串类型的表示
/正向递增(0开始向右),反向递减(-1开始向左),可以混用.
/反斜杠 \ 为特殊字符,表示转义,即该字符与后面相邻的字符共同组成新的含义:
\n表示换行
\表示反斜杠
'表示单引号
"表示双引号
\t表示制表符(Tab)
\a 蜂鸣,响铃
\b 回退,向后退一格
\f 换页
\r 回车,光标移动到下行首行
\v 垂直制表
等等等...
3.5.2 基本的字符串操作符
操作符 | 描述 |
---|---|
x+y | 连接字符串x与y |
xn或nx | 复制n次字符串x |
x in s | 如果x是s的子串返回True,否则返回False |
str[i] | 索引,返回第i个字符 |
str[N:M] | 切片,返回第N到第M个字符,不包含第M个字符 |
3.5.3 内置的字符串处理函数
函数 | 描述 |
---|---|
len(x) | 返回字符串x的长度,也可返回其他组合数据类型元素个数 |
str(x) | 返回任意类型x所对应的字符串形式 |
chr(x) | 返回Unicode编码x对应的单字符 |
ord(x) | 返回单字符x对应的Unicode编码 |
hex(x) | 返回整数x对应十六进制数的小写形式字符串 |
oct(x) | 返回整数x对应的八进制的小数形式字符串 |
3.5.4 内置的字符串处理方法
方法 | 描述 |
---|---|
str.lower() | 返回字符串str的副本,全部字符小写 |
str.upper() | 返回字符串str的副本,全部字符大写 |
str.islower() | 当str所有字符都是小写时,返回True,否则返回False |
str.isprintable() | 当字符串str是可以打印时,返回True,否则返回False |
str.isnumeric() | 当字符串str所有字符都是数字时,返回True,否则返回False |
str.isspace() | 当字符串str都是空格时,返回True,否则返回False |
str.endswith(suffix[,start[,end]]) | 当字符串str[start:end]是以suffix结尾时,返回True,否则返回False |
str.startswith(prefix[,start[,end]]) | 当字符串str[start:end]是以prefix开头时,返回True,否则返回False |
str.split(sep=None,maxsplit=-1) | 返回一个一个列表,由str根据sep被分割的部分构成.sep是分割的标识符,默认分割符是空格.maxsplit是最大分割次数,可以不给出 |
str.count(sub[,start[,end]]) | 返回str[start:end]中sub子串出现的次数 |
str.replace(old,new[,count]) | 返回字符串str的副本,所有子串old被替换为new,如果count给出,则前count次出现的old被替换 |
str.center(width,[,fillchar]) | 字符串居中函数 |
str.strip([chars]) | 返回字符串str的副本,在其左侧和右侧去掉chars中列出的字符 |
str.zfill(width) | 返回字符串str的副本,长度为width,不足部分在左侧添加0 |
str.format() | 返回字符串str的一种排版格式 |
str.join(iterable) | 返回一个新的字符串,由组合数据类型iterable便利的每个元素组成,元素间用str分割 |
3.6 字符串类型的格式化
/字符串通过format()方法进行格式化处理
/<模板字符串>.format(<逗号分割的参数>)
/模板字符串由一系列槽组成,用来控制修改字符串中嵌入值出现的位置.其基本思想是将format()方法中否好分割的参数,按照序号关系替换到字符串的槽中.
/槽用大括号{}表示,如果大括号中没有序号,则按照出现顺序替换.
/如果大括号中有参数序号,则按照序号替换.参数从0开始编号
3.6.2 format()方法的格式控制
/槽内部样式如下:
{<参数序号>:<格式控制标记>}
: | <填充> | <对齐> | <宽度> | <,> | <精度> | <类型> |
---|---|---|---|---|---|---|
引导符号 | 用于填充的单个字符 | <左对齐;>右对齐;^居中对齐 | 操的设定输出宽度 | 数字的千位分隔符,适用于整数和浮点数 | 浮点数小数部分的精度或字符串的最大输出长度 | 整数类型b,c,d,o,x,X;浮点数类型e,E,f,% |
/格式控制标记包含<填充><对齐><宽度><,><精度><类型>6个字段,每个字段都是可选的,可以组合使用的.
/<宽度>,<对齐>,<填充>是三个相关字段
>>> s = "PYTHON"
>>> "{0:30}".format(s) #30长度,默认左对齐,默认以空格填充
'PYTHON '
>>> "{0:*^30}".format(s) #30长度,以*填充,^居中
'************PYTHON************'
>>> "{0:>30}".format(s) #>右对齐
' PYTHON'
/格式控制标记中的逗号,用于显式数学类型的千位分隔符
>>> "{0:-^30}".format(1234567890)
'----------1234567890----------'
>>> "{0:-^30,}".format(1234567890)
'--------1,234,567,890---------'
>>> "{0:-^30,}".format(12345.67890)
'---------12,345.6789----------'
/<.精度>表示两个含义,由小数点(.)开头.对于浮点数,精度表示小数部分输出有效位数,对于字符串,精度表示输出的最大长度.
>>> "{0:.2f}".format(12345.67890)
'12345.68'
>>> "{0:*^30.3f}".format(12345.67890)
'**********12345.679***********'
"{0:*^30.3f}".format(12345.67111) #遵循四舍五入
'**********12345.671***********'
>>> "{0:.4}".format("PYTHON")
'PYTH'
/<类型>表示输出整数和浮点数类型的格式规则.对于整数类型,输出格式包括以下6种:
b | c | d | o | x | X |
---|---|---|---|---|---|
输出整数的二进制方式 | 输出整数对应的Unicode字符 | 输出整数的十进制方式 | 输出整数的八进制方式 | 输出整数的小写十六进制 | 输出整数的大写十六进制 |
/对于浮点数数类型,输出方式有以下4种:
e | E | f | % |
---|---|---|---|
输出浮点数对应的小写字母e的指数形式 | 输出浮点数对应的大写字母E的指数形式 | 输出浮点数的标准浮点数类型 | 输出浮点数的百分百形式 |
3.7 实例4:文本进度条
3.7.1 简单的开始
import time
scale = 10
print("------执行开始------")
for i in range(scale+1):
a,b = "**"*i,".."*(scale-i)
c = (i/scale)*100
print("{:^3.0f}%[{}->{}]".format(c,a,b))
time.sleep(0.1)
print("------执行结束------")
3.7.2 单行动态刷新
/转义符\r可以让光标回到开头
/end=""使结尾不换行
import time
for i in range(101):
print("\r{:3}%".format(i),end="")
time.sleep(0.05)
3.7.3 带刷新的文本进度条
/time.purt_counter() 添加时间,增加用户体验
import time
scale = 50
print("执行开始".center(scale//2,"-"))
t = time.perf_counter()
for i in range(scale+1):
a = "*"*i
b="."*(scale-1)
c=(i/scale)*100
t=time.perf_counter()-t
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,t),end="")
time.sleep(0.05)
print("\n"+"执行结束".center(scale//2,"-"))
网友评论