[关闭]
@terrygmk 2020-02-22T13:20:13.000000Z 字数 6505 阅读 270

Python语言程序设计-嵩天

学习笔记


目录

1套基础语法

数据类型

数字类型

整数
浮点数
复数

a+bj表示
z=3+4j
z.real 表示实部
z.imag 表示虚部

数值运算操作符

+-*/ 加减乘除
// 整数除 5//3=1
% 模运算,求余数 5%3=2
** 幂运算(相当于pow()函数) 5**3=125
增强赋值操作符 x op=y x+=y=>x=x+y
混合操作结果最宽,常见 整数+符点数=符点数 1+2.0=3.0

数值运算常用函数

序列与散列的共同点

操作
len(iter) 求元素个数
min(iter) 求最小值
max(iter) 求最大值
o.clear() 清除,只适用set ls dict,
x in O x 元素是否在O对象里面,是返回True
x not in O|
for item in iter 遍历

序列类型

序列通用规则

一维
元素可变
可下标索引访问

操作符及使用 说明
ls + ls2 连接2个序列
n*ls or ls*n n个a连接
ls[i] 索引
ls[m:n:k] 切片
ls.index(x[,i,j]) 求从i位置到j位置,x出现的索引
ls.count(x) x出现的次数
字符串类型
字符串类型的表示
字符串操作符
操作符及使用 说明
a + b 连接2个子串
n*a or a*n n个a连接
a in s a是s的子串返回True,否则False
字符串处理函数
函数 说明
int len(s) 字符串的长度
strng str(x) 任意类型转字符串
string hex(i) 返回整数i的16进制字符串形式
string oct(i) 返回整数i的8进制字符串形式
string chr(i) 返回整数i所表示的Unicode字符
int ord(ch) 返回字符ch对应的Unicode编码
Unicode编码
字符串方法
方法 说明
str.upper() or str.lower() 转大写or小写
str.split(sep) 分割字符串返回列表
str.count(sub) 子串出现的次数
str.replace(old,new) 替换
str.center(width[,fill_char]) 字符串居中
str.strip(chars) 去掉chars中的字符
str.join(iter) 用str连接iter中的每个元素
字符串格式化
方法 说明
{<槽的索引> :<填充> <对齐> <宽度> <,> <.精度> <类型>}
长度太长用什么填写 左<,右>,中^, 数字 数字的千分位 符点数的精度 b,c,d,o,x,X,e,E,f,%
  1. >>>'{1:=^20,.2f}'.format(0,98765)
  2. '=====98,765.00======'
元组类型

序列的一种,一旦创建,不可更改,除了元组的通用操作,无特殊操作
创建方法:
t = ()
t= tuple()
t= 1,2,3
t = (1,2,3)
t = (1,)
i = (1) # 这个是int 不是元组

列表类型

元组的一种,可随意更改

列表类型常用函数
操作
ls[i]=x 赋值
ls[i:j:k]=ls2 赋值,当k=1时,将i:j的元素删除,ls2里的元素插入到i的位置
del ls[i] 删除i索引位置的元素,长度变为(原来-1)
del ls[i:j:k] 删除切片中的元素
列表类型常用方法
方法
ls.append(x) 在末尾插入元素
ls.insert(i,x) 在i位置插入元素
ls.pop() 将最后一个删除并返回
ls.remove(x) 将列表中第1个出现的x删除
ls.copy() 返回副本
ls.clear() 清空
ls.reverse() 反转

散列类型

集合类型
集合特点
集合操作符
操作符 描述
S|T 并,返回一个新集合,包含在集合S和T中的所有元素
S-T 差,返回一个新集合,包含在集合S但不在T中的元素
S&T 交,返回一个新集合,包含同时在集合S和T中的元素
S^T 补,返回一个新集合,包含在集合S和T中的非相同元素
S<=T or S<T 返回Boolean,S是T的子集吗?
S>=T or S>T 返回Boolean,S是T的超集吗?
S |=T 并,更新集合S,包含在集合S和T中的所有元素
S -=T 差,更新集合S,包含在集合S但不在T中的元素
S &=T 交,更新集合S,包含同时在集合S和T中的元素
S ^=T 补,更新集合S,包含在集合S和T中的非相同元素
集合的方法
方法 描述
S.add(x) 如果x不在集合中,将x增加到S
S.discard(x) 移除S中元素x,如果x不在集合中,不报错
S.remove(x) 移除S中元素x,如果x不在集合中,产生KeyError异常
S.clear() 移除S中的所有元素
S.pop() 随机移除一个元素,并返回这个元素,如果S是空集,产生KeyError异常
S.copy() 返回集合的副本
集合函数
方法 描述
len(S) 返回元素个数
set(x) 其它类型的转为集合,或x不提供,则返回空集
x in S 移除S中元素x,如果x不在集合中,产生KeyError异常
x not in S 移除S中的所有元素
集合应用场景

数据去重
包含关系的比较

字典类型
方法
del ds[k] 删除key=k的元素
ds.keys()
ds.values()
ds.items()
ds.get(k,default) 返回k的值
ds.pop(k,default) 取出k的值
ds.popitem() 随机弹出,返回元组格式
ds.get()

控制结构

函数和代码利用

文件和数据格式化

程序设计方法学

python计算生态

7个常用模块

turtle库 - 绘制图形

time库

分类 函数
时间获取 time() 获取时间戳,返回浮点数
gmtime() 获取时间,返回<class 'time.struct_time'>
localtime() 同gmtime(),区别是本地的,中国是+8h
时间格式化 strftime(tpl,ts) 格式化时间,返回字符串
strptime(str,tpl) 格式化时间,返回字<class 'time.struct_time'>
程序计时 sleep(s) 休眠,浮点数,秒单位
程序计时 perf_counter() 返回CPU级别的时间,浮点数,秒单位,一般用time()替代即可
  1. >>> import time
  2. >>> time.time()
  3. 1582016465.4839685
  4. >>> time.gmtime()
  5. time.struct_time(tm_year=2020, tm_mon=2, tm_mday=18, tm_hour=9, tm_min=1, tm_sec=13, tm_wday=1, tm_yday=49, tm_isdst=0)
  6. >>> time.localtime()
  7. time.struct_time(tm_year=2020, tm_mon=2, tm_mday=18, tm_hour=16, tm_min=16, tm_sec=56, tm_wday=1, tm_yday=49, tm_isdst=0)
  8. >>> time.strftime('%Y-%m-%d %H-%M-%S',time.localtime())
  9. '2020-02-18 17-03-06'
  10. >>> time.strptime('2020-02-18 17-03-06','%Y-%m-%d %H-%M-%S')
  11. time.struct_time(tm_year=2020, tm_mon=2, tm_mday=18, tm_hour=17, tm_min=3, tm_sec=6, tm_wday=1, tm_yday=49, tm_isdst=-1)

16个示例

1.温度转换

问题描述

将俩种温度单位(摄氏度与华氏度)互转

代码

  1. #温度转换 TempConvert.py
  2. str_temp = input("请输入温度F或C结尾:")
  3. if str_temp[-1:] in ('F','f'):
  4. c_temp = (eval(str_temp[0:-1])-32)/1.8
  5. print('转换后的温度是:{:.2f}C'.format(c_temp))
  6. elif str_temp[-1:] in ('C','c'):
  7. f_temp = eval(str_temp[0:-1])*1.8+32
  8. print('转换后的温度是:{:.2f}F'.format(f_temp))
  9. else:
  10. print('输入有误')

举一反三

3.复利(持续)的力量

问题描述

问题一:一年365天,每天进步1‰,累计可进步多少?每天退步1‰,累计还剩下多少?
问题二:如果不是1‰,而是其它值呢
问题三:如果是工作日进步,休息日退步呢?
问题四:求解,一周工作5天的模式,工作日要多努力才能赶上天天工作的值?

代码

  1. # 天天向上的力量 DayDayUpQ1.py
  2. # 按每天比还来多0.001算
  3. day_up = pow(1.001,365)
  4. day_down = pow(0.999,365)
  5. print('天天向上{:.2f},天天向下{:.2f}'.format(day_up,day_down))
  1. # 天天向上的力量 DayDayUpQ2.py
  2. # 按每天比还来多0.005算呢,0.002或其它呢
  3. day_factor = 0.005 # 使用变量的好处:一处修改即可
  4. day_up = pow(1+day_factor,365)
  5. day_down = pow(1-day_factor,365)
  6. print('天天向上{:.2f},天天向下{:.2f}'.format(day_up,day_down))
  1. # 天天向上的力量 DayDayUpQ3.py
  2. '''
  3. 工作日进步,休息日退步呢
  4. 1.01^365 :这是数学思维
  5. for ... in ... :这是计算思维
  6. 采用循环模拟365天的过程
  7. 抽象+自动化
  8. '''
  9. day_factor = 0.01 # 使用变量的好处:一处修改即可
  10. day_up = 1
  11. for i in range(365):
  12. if i % 7 in (1,2,3,4,5):
  13. day_up *= 1+day_factor
  14. else:
  15. day_up *= 1-day_factor
  16. print('工作日进步,休息日退步:{:.2f}'.format(day_up))
  1. # 天天向上的力量 DayDayUpQ4.py
  2. '''
  3. 求解:休息2天退步1%,要多努力才能赶走上天天进步1%的?
  4. 求day_factor?
  5. 用"笨方法"一直尝试
  6. '''
  7. def work_five(df):
  8. day_up = 1
  9. for i in range(365):
  10. if i % 7 in (1,2,3,4,5):
  11. day_up *= 1+df
  12. else:
  13. day_up *= 1- 0.01
  14. return day_up
  15. day_factor = 0.01 # 使用变量的好处:一处修改即可
  16. while(work_five(day_factor)<pow(1.01,365)):
  17. day_factor += 0.001
  18. print('休息2天的要多努力才能赶走上天天1%的:{:.3f}'.format(day_factor))

举一反三

深入理解计算思维:
模拟过程:for .. in ..模拟365天的过程
试错求值:while 比较直到解出值

4.文本进度条

问题描述

打印可在一行中逐渐动态变化的进度条

代码

  1. # TextBarV1.py
  2. import time
  3. scale = 10
  4. print('=====程序开始=====')
  5. for i in range(scale+1):
  6. a = i * '*'
  7. b = (scale - i) * '.'
  8. c = (i/scale)*100 # 当前执行百分比
  9. print('{:<3.0f}%[{}->{}]'.format(c,a,b))
  10. time.sleep(0.1)
  11. print('=====程序结束=====')
  1. # TextBarV2.py
  2. '''单行刷新的本质 ('\r' 和 end='')
  3. 1.刷新需要输出覆盖
  4. 2.不能换行 (控制print()函数,end='')
  5. 3.从行首开始输出( \r 在输出的最开始)
  6. '''
  7. import time
  8. for i in range(101):
  9. print('\r{:<3d}%'.format(i),end='')
  10. time.sleep(0.01)
  1. # TextBarV2.py
  2. '''单行刷新的本质 ('\r' 和 end='')
  3. 1.刷新需要输出覆盖
  4. 2.不能换行 (控制print()函数,end='')
  5. 3.从行首开始输出( \r 在输出的最开始)
  6. '''
  7. import time
  8. for i in range(101):
  9. print('\r{:<3d}%'.format(i),end='')
  10. time.sleep(0.01)
  1. # TextBarV3.py
  2. import time
  3. scale = 20
  4. start_time = time.time()
  5. print('程序开始'.center(scale,'='))
  6. for i in range(scale+1):
  7. a = i * '*'
  8. b = (scale - i) * '.'
  9. c = (i/scale)*100
  10. use_time = time.time() - start_time
  11. print('\r{:<3.0f}%[{}->{}]{:.02f}s'.format(c,a,b,use_time),end='')
  12. time.sleep(0.1)
  13. print('\n' + '程序结束'.center(scale,'='))

举一反三

代码

问题描述

代码

举一反三

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注