- 程序的基本编写方法:IPO
I:input,输入,程序的输入(程序的开始)
P:process,处理,程序的主要逻辑
O:output,输出,程序的输出(程序展示运算结果的方式)
编程解决问题的步骤:分析问题(想清楚),划分边界(规划IPO),设计算法(关注算法),编写程序,调试测试(运行调试),升级维护(更新完善)【确定IPO→编写程序→调试程序】
二、计算机是根据指令操作数据的设备→特性:功能性,可编程性
功能性:对数据的操作,数据计算、输入输出处理和结果存储等
可编程性:根据一系列指令自动地、可预测地、准确地完成操作者的意图
计算机的发展参照摩尔定律(预测法则),表现为指数方式
程序设计是计算机可编程性的体现
三、编程语言的执行方式:编译和解释
源代码,目标代码
编译:将源代码一次性转换成目标代码的过程;一次性翻译,之后不再需要源代码;可优化,执行速度快
解释:将源代码逐条转换成目标代码同时逐条运行的过程;每次都需要源代码参与;不可优化
四、根据执行方式不同,编程语言分为:静态语音(使用编译执行的编程语言);脚本语言(使用解释执行的编程语言,如python)
静态语音——编译器一次性生成目标代码,优化更充分,运行速度快
脚本语言——执行程序时需要源代码,源代码在维护更灵活,跨多个操作系统平台
五、学习计算机编程好处:能训练思维(计算思维),增进认识,带来乐趣,提高效率,带来就业机会
六、python程序语法元素分析:程序的格式框架,注释,命名与保留字,字符串,赋值语句,input()函数,分支语句,eval()函数,print()函数,循环语句,函数
- 程序的格式框架:“缩进”:代码前的空格,用来表达程序的格式框架;严格明确,所属关系,长度一致
- 注释:辅助性信息,分为单行注释(以#开头)和多行注释(以”’开头和结尾)
- 命名与保留字:
变量:程序中用于保存和表示数据的占位符号;变量用标识符(名字)来表示,关联标识符的过程叫命名;用=赋值
命名规则:大小写字母、数字、下划线和汉字等字符及组合(注意:大小写敏感,首字符不能是数字,不与保留字相同,如123python是错的,python和Python不同)
保留字(关键字):内部保留使用的标识符,33个(书P39,需掌握其中的26个)
- 数据类型
字符串、整数、浮点数、列表
例:整数类型:110101 字符串类型:”110,101” 列表类型:[110,101]
- 字符串类型:由0个或多个字符组成的有序字符序列;由一对单引号或一对双引号表示;序号从0开始
序号分为正向递增序号(0,1,2,...)和反向递减序号(-1,-2,...)
索引:返回字符串中的单个字符 <字符串>[序号位置]
例:TempStr[-1]:获取TempStr字符串倒数第一个字符
切片:返回字符串中一段字符子串 <字符串>[M:N]
例:TempStr[0:-1]:从0开始,但不到最后一个字符的字符串
- 数字类型:整数(如12,-46)和浮点数(实数,带有小数部分,如1.8,-6.3)
- 列表类型:由0个或多个数据组成的有序序列,用[ ]表示,用逗号隔开;使用in判断一个元素是否在列表中
例:TempStr[-1] in ['C','c'] 判断前者是否与列表中的C或c相同,结果→True/False
- 语句与函数
- 赋值语句:由=构成的一行代码;用来给变量赋予新的数据值;赋值语句右侧的数据类型同时作用于变量
- 分支语句:由判断条件决定程序运行方向的语句;使用if,elif,else构成条件判断的分支结构
- 函数:根据输入参数产生不同输出的功能过程 <函数名>(<参数>)
- python程序的输入输出:
- input():从控制台获得用户输入的函数
使用格式:<变量>=input(<提示信息字符串>)
例:TempStr=input("请输入:")
- print():以字符形式向控制台输出结果的函数
(1) 基本使用格式:print(<拟输出的字符串或字符串变量>)
字符串类型的一对引号仅在程序内部使用,输出无引号
例:print("输入格式错误") >>>输入格式错误
(2)格式化:print("字符串{}".format(变量))
{}表示槽,后续变量填充到槽中
例:print("转换后的温度是{:.2f}C".format(C))
其中{:.2f}表示将变量C填充到这个位置时取小数点后2位
(3)print(a,b) 逗号使得输出时a和b之间有空格
- eval():去掉参数最外侧引号并执行余下语句的函数;评估函数
基本使用格式:eval(<字符串或字符串变量>)
例:eval("1") >>>1 eval("1+2") >>>3 eval(' "1+2" ') >>>"1+2" eval('print("Hello")') >>>Hello
eval(input(<输入提示字符串>)) 将字符串类型变成数字类型
七、
- 库引用与import:
- 库引用:扩充Python程序功能的方式;使用import完成,采用<a>.<b>()编码风格
- ①import<库名>
<库名>.<函数名>(<函数参数>) 或
②from <库名> import <函数名> / from <库名> import *
<函数名>(<函数参数>)
①不会出现函数重名问题,而②会出现函数重名问题
可使用第三种:③import <库名> as <库别名>
<库别名>.<函数名>(<函数参数>)
整数→浮点数→复数
abs(x):x的绝对值 divmod(x,y):商余,输出(x//y,x%y)
pow(x,y[,z]):幂余,(x**y)%z,其中z可省略
round(x[,d]):四舍五入,d是保留小数位数,默认值是0
max(x1,x2,...,xn):返回最大值 min(x1,x2,...,xn):返回最小值
int(x):把x变成整数,舍弃小数部分,可以把字符串变成整数
float(x):把x变成浮点数,增加小数部分,可以把字符串变成浮点数
complex(x):把x变成复数,增加虚数部分
九、天天向上的力量的重点:
for i in range(365):
if i%7 in [ , ]:
...
else:
...
- import 引入一个当前代码之外的功能,如turtle
- 循环语句与range()函数:
- 循环语句:按照一定次数循环执行一组语句
-
for <变量> in range(<参数>):
<被循环执行的语句>
其中,<参数>是循环的次数;<变量>表示每次循环的计数,0到<次数>-1
- range()函数 产生循环计数序列
-
①range(N) 产生0到N-1的整数序列,共N个
②range(M,N) 产生M到N-1的整数序列,共N-M个
八、数字类型及操作
- 整数类型 ——数学中的整数
-
可正可负
pow(x,y) 计算xy
4种进制:十进制
二进制:以0b或0B开头
八进制:以0o或0O开头
十六进制:以0x或0X开头
- 浮点数类型 ——数学中的实数
-
带有小数点及小数的数字
取值范围和小数精度存在限制,常规计算可忽略——基本无限制
取值范围数量级约-10308至10308,精度数量级10-16
浮点数间运算存在不确定尾数,不是bug
round(x,d):对x四舍五入,d是小数截取位数
科学计数法:<a>e<b> 或 <a>E<b> 表示a*10b
例:9.6E5 表示960000.0
- 复数类型 ——数学中的复数
-
a+bj a实部,b虚部
z.real 获得实部 z.imag 获得虚部
- 数值运算操作符
- x+y加; x-y减; x*y乘; x/y除,浮点数;x//y整数除,整数商(10//3=3)
- +x:x本身 -y:y的负值 x%y:余数(10%3=1) x**y:①幂运算,即xy ②当y是小数时,开方运算(10**0.5=根号10)
- x+=y x-=y x*=y x/=y x//=y x**=y x%=y
- 类型间可进行混合运算,生成结果为“最宽”类型
- 数值运算函数
十、字符串
字符串类型的表示
由一对单引号或一对双引号表示
字符串是字符的有序序列,可以对其中的字符进行索引
①有一对单引号或双引号表示,仅表示单行字符串
②由一对三单引号或三双引号表示,可表示多行字符串
正向递增序号(从0开始)和反向递减序号(从-1开始)
基本用法(上面第3页)
高级用法:[M:N:K]根据步长对字符串切片
-<字符串>[M:N],M缺失表示至开头,N缺失表示至结尾
-<字符串>[M:N:K],根据步长K对字符串进行切片
-倒序:[::-1]
转义符形成一些组合,表达一些不可打印的含义
\b 回退;\n 换行(光标移动到下行首);\r 回车(光标移动到本行首);\\ 反斜杠;\’ 单引号;\” 双引号;\t 制表符(Tab)
x in s 如果x是s的子串,返回True,否则返回False
- 字符串是由0个或多个字符组成的有序字符序列
- 表示方法:
- 字符串的序号:
- 索引(上面第3页)
- 切片
- 转义符\ 表达特定字符的本意
- 字符串操作符
- x+y 连接两个字符串 n*x或x*n 复制n次字符串x
- 字符串处理函数
len(x) 返回字符串x的长度
str(x) 任意类型x所对应的字符串类型 与eval()相反
hex(x) 形成整数x的十六进制的小写形式字符串
oct(x) 形成整数x的八进制的小写形式字符串
chr(u) u为Unicode编码,返回其对应的字符
ord(x) x为字符,返回其对应的Unicode编码
Python字符串中每一个字符都是Unicode编码字符
例:"n".center(5,"=") >>> '==n=='
注意:当str为单数,宽度为双数时,填充前少后多;str为双数,宽度为单数时,填充前多后少
字符串格式化使用.format()方法:
<模板字符串>.format(<逗号分隔的参数>)
- end=" " 表示不换行(在print函数中)
- 字符串处理方法
- “方法”在编程中是一个专有名词,特指<a>.<b>()风格中的函数<b>()方法本身也是函数,但与<a>有关;字符串及变量也是<a>,存在一些方法
- str.lower()或str.upper() 返回字符串的副本,全部字符小写/大写
- str.split(sep=None) 返回一个列表,由str根据sep被分隔的部分组成 例:"A,B,C".split(",") >>>['A','B','C']
- str.count(sub) 返回子串sub在str中出现的次数
- str.replace(old,new) 返回字符串str副本,所有old子串被替换为new子串
- str.center(width[,fillchar]) 字符串str根据宽度width居中,fillchar可选
- str.strip([chars]) 从str中去掉在其左侧和右侧chars中列出的字符 例:"= python=".strip(" =np") >>>"ytho"
- str.join(iter) 在iter变量除最后元素外每个元素后增加一个str, 主要用于字符串分隔 例: ",".join("12345") >>>"1,2,3,4,5"
- 字符串类型的格式化
- 格式化是对字符串进行格式表达的方式
- 槽:相当于一个占位信息符,使用一对"{}"来表示,只在字符串中有用
十一、time库
基本介绍
import time
time.<b>()
时间获取:time() ctime() gmtime()
时间格式化:strftime() strptime()
程序计时:sleep() perf_counter()
time() 获取当前时间戳,即计算机内部时间值,浮点数
time.time()
ctime() 获取当前时间并以易读方式表示,返回字符串
time.ctime()
gmtime() 获取当前时间,表示为计算机可处理的时间格式
time.gmtime()
ts是计算机内部时间类型变量
例:t=time.gmtime()
time.strftime("%Y-%m-%d %H-%M-%S",t)
>>>'2018-01-26 12:55:20'
%Y 年份(0000~9999) %m 月份(01~12)
%B 月份名称(January~December)
%b 月份名称缩写(Jan~Dec) %d 日期(01~31)
%A 星期(Monday~Sunday) %a 星期缩写(Mon~Sun)
%H 小时(24h制,00~23) %h 小时(12h制,01~12)
%p 上午/下午(AM/PM) %M 分钟(00~59)
%S 秒(00~59)
>>>import time
>>>start=time.perf_counter()
>>>end=time.perf_counter()
>>>end-start
>>>def wait():
time.sleep(3.3)
>>>wait() 程序将等待3.3秒之后再退出
- time库是python中处理时间的标准库
- time库包括三类函数:
- 时间获取
- 时间格式化——将时间以合理的方式表示出来
- strftime(tpl,ts) tpl是格式化模板字符串,用来定义输出效果
- 时间格式化的控制符:
- strptime(ts,tpl) 与 strftime(tpl,ts) 互补,将字符串转换为时间
- 程序计时应用
- 测量时间:perf_counter() 返回一个CPU级别的精确时间计数值,单位为秒;由于这个技术值起点不确定,连续调用差值才有意义
- 产生时间:sleep(s) s拟休眠的时间,单位是秒,可以是浮点数
十二、文本进度条
采用字符串方式打印可以动态变化的文本进度条
进度条需要能在一行中逐渐持续变化
采用sleep()模拟一个持续的进度
刷新的本质:用后打印的字符覆盖之前的字符
不能换行→print()需要被控制(print函数默认在输出字符之后会换行)
要能回退→打印后光标退回到之前的位置→\r(刷新的关键)
十三、程序的分支结构
<语句块>
<语句块1>
else:
<语句块2>
<表达式1> if <条件> else <表达式2>
注:是表达式而不是语句(有赋值)
<语句块1>
elif:
<语句块2>
......
else:
<语句块n>
< 小于 <= 小于等于 >= 大于等于 > 大于
== 等于 != 不等于
x and y : 与 ; x or y : 或 ; not x : 非
<语句块1> 或 <语句块1>
except: except <异常类型>:
<语句块2> <语句块2>
try:
<语句块1>
excpet:
<语句块2>
else:
<语句块3>
finally:
<语句块4>
(finally对应语句块4一定执行;else对应语句块3在不发生异常时执行;异常:语句块1→2→4;不异常:语句块1→3→4)
十四、身体质量指数BMI
读程序先看分支
十五、程序的循环结构
for <循环变量> in <遍历结构>:
<语句块>
从遍历结构中逐一提取元素,放在循环变量中;
由保留字for和in组成,完成遍历所有元素后结束;
每次循环,所获得元素放入循环变量,并执行一次语句块
(1)计数循环(N次)
for i in range(N):
<语句块>
遍历由range()函数产生的数字序列,产生循环
(2)计数循环(特定次)
for i in range(M,N,K):
<语句块>
从M开始,不到N(到N之前)的整数,步长为K
(3)字符串遍历循环
for c in s:
<语句块>
s是一个字符串,c表示字符串中的每个字符,遍历字符串每个字符,产生循环
(4)列表遍历循环
for item in ls:
<语句块>
ls是一个列表,遍历列表每个元素,产生循环
(5)文件遍历循环
for line in fi:
<语句块>
fi是一个文件标识符,遍历其每行,产生循环
Ctrl+C组合键,退出“循环执行又永不退出的循环程序”
反复执行语句块,直到条件不满足时结束
- 单行动态刷新
- 需要在输出字符串的后面增加信息,就在print函数中的end="信息";如果不希望增加换行,就end=" "
- 单分支结构
- 根据判断条件的结果而选择不同向前路径的运行方式
- if <条件>:
- 二分支结构
- 根据条件判断的不同而选择不同执行路径的运行方式
- if <条件>:
- 紧凑形式:适用于简单表达式的二分支结构
- 多分支结构
- 根据多个条件来选择不同语句块运行的一种分支结构
- if <条件>:
- 编写时要注意多条件之间的包含关系;注意变量取值范围的覆盖关系
- 条件判断及组合
- 操作符
- 用于条件组合的保留字
- 程序的异常处理
- try: try:
- 异常处理的高级使用:
- 遍历循环:遍历某个结构形成的循环运行方式 for in
- 无限循环:由条件控制的循环运行方式 while
while <条件>:
<语句块>
- 循环控制保留字 break 和 continue
- break 跳出并结束当前整个循环,执行循环后的语句(打破当前循环)
- continue 结束当次循环,继续执行后续次数循环(打破当次循环,不打破当前循环)
- break和continue可以与for和while循环搭配使用
- 多层循环
- 循环的高级用法
-
循环与else:
for <循环变量> in <遍历结构>: while <条件>:
<语句块1> 或 <语句块1>
else: else:
<语句块2> <语句块2>
当循环没有被break语句退出时,执行else语句块
else语句块作为“正常”完成循环的奖励(与异常处理中的else用法相似)
-
十六、random库
- 基本介绍
-
能够利用随机数种子产生“确定”伪随机数
random库是使用随机数的Python标准库,主要用于生成随机数
使用random库:import random
基本随机数函数:seed() random()
扩展随机数函数:randint() getrandbits() uniform()
randrange() choice() shuffle()
- 基本随机数函数
- 随机数种子确定随机序列的产生
- seed(a=None) 初始化给定的随机数种子,默认为当前系统时间
-
random() 生成一个[0.0,1.0)之间的随机小数
注:如果程序需要再现随机过程,就需要设定种子;如果只需要随机数,不需再现(复现),就可以不设定种子
- 扩展随机数函数
- 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中元素随机排列,返回打乱后的序列
十七、圆周率的计算
蒙特卡洛方法:在正方形中撒点有多少在圆内