【第三周】基本数据类型笔记(2020.1.27)

3.1数字类型及操作

(一)整数类型

  • 可正可负,没有取值范围限制
  • pow(x,y)函数:计算X的y次方,想算多大算多大

四种进制表现形式

  • 十进制:1010,99,-217
  • 二进制:以0b或0B开头:0b010,-0B101
  • 八进制:以0o或0O开头:0o123,-0O456
  • 十六进制:以0x或0X开头:0x9a,-0X89

(二)浮点类型

与数学中实数的概念一致

  • 带有小数点及小数的数字
  • 浮点数取值范围和小数精度都存在限制,但常规计算可忽略
  • 取值范围数量级约-10的308次方至10的308次方,精度数量级10的负16次方。

注意:浮点数间运算存在不确定尾数,不是bug

>>>0.1+0.3
0.4
>>>0.1+0.2
0.3000000000000004

原因:计算机中十进制小数0.1是由53位二进制表示的小数部分,约10^(-16)
二进制表示小数,可以无限接近,但不完全相同

修改:

>>>0.1+0.2==0.3
False

>>>round(0.1+0.2,1)==0.3
True
  • round(x,d):对x四舍五入,d是小数截取位数
  • 浮点数间运算及比较用round()函数辅助
  • 不确定尾数一般发生在10^(-16)左右,round()十分有效

浮点数可以采用科学计数法表示

  • 使用字母e或者E作为幂的符号,以10为基数,格式如下:
    <a>e<b> 表示a*10^(b)

(三)复数类型

出现频率较少

(四)数字运算操作符

操作符及使用 描述
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本身
-y y的负值
x%y 余数,模运算 10%3结果是1
x**y 幂运算,x的y次幂,x^y

二元操作符有对应的增强赋值操作符

  • xop=y 即x=xopy,其中,op为二元操作符

类型间可进行混合运算,生成结果为“最宽”类型

  • 三种类型存在一种逐渐“扩展”或“变宽”的关系
    整数 ->浮点数 ->复数

数字运算函数

函数及使用 描述
abs(x) 绝对值,x的绝对值
divmod(x,y) 商余,(x//y,x%y),同时输出商和余数。例:divmod(10,3)结果为(3,1)
pow(x,y[,z]) 幂余,(x**y)%z,[..]表示参数z可省略。例:pow(3,pow(3,99),10000)结果为4587
round(x[,d]) 四舍五入,d是保留小数位数,默认值为0
max(X1,X2,,,,,Xn) 最大值
mix(X1,X2,,,,Xn) 最小值

一些以函数形式提供的数值运算功能

函数及使用 描述
int(x) 将x变成整数,舍弃小数部分
float(x) 将x变成浮点数,增加小数部分
complex(x) 将x变成复数,增加虚数部分

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

基本问题:持续的价值
问题1:1‰的力量

#DayDayupQ1.py
dayup=(1.001,365)
daydown=pow(0.999,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))

问题2:5‰和1%的力量

#DayDayUpQ2.py
dayfactor=0.005
dayup=pow(1+dayfactor,365)
daydown=pow(1-dayfactor,365)
print("向上:{:.2f},向下:{:.2f})"format(dayup,daydown))

问题3:工作日的力量

  • 一年365天,一周5个工作日,每天进步1%
  • 一年365天,一周2个休息日,每天退步1%
#DayDayUpQ3.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))

问题4:工作日的努力

  • A君:一年365天,每天进步1%,不停歇
  • B君:一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?
    for...in..(计算思维)==>def..while...(“笨办法”试错)
#DayDayUpQ4.py
def dayup(df):
      dayup=1
      for i in range(365):
           if i % 7 in [6,0]:
                dayup=dayup*(1-0.01)
           else:
                dayup=dayup*(1+df)  
       return dayup 
dayfactor=0.01
while dayUP(dayfactor)<37.78:
       dayfactor+=0.001 
print("工作日的努力参数是:{:.3f}".format(dayfactor))

3.3字符串类型及操作

由0个或多个字符组成的有序字符序列

  • 字符串由一对单引号或一对双引号表示
  • 字符串是字符的有序序列,可以对其;中的字符进行索引

字符串的序号
正向递增序号和反向递减序号

字符串切片高级用法
使用[M:N:K]根据步长对字符串切片

  • <字符串>[M:N],M缺失表示至开头,N缺失表示至结尾
  • <字符串>[M:N:K],根据步长K对字符串切片

字符串的特殊字符
转义符\

  • 转义符表示特定字符的本意
  • 转义符形成一些组合,表达一些不可打印的含义

字符串的操作符

由0个或多个字符组成的有序字符序列

操作符及使用 描述
x+y 连接两个字符串x和y
nx或xn 复制n次字符串x
x in s 如果x是s的子串,返回True,否则返回False

获取星期字符串

#weekNamePrintV1.py
weekStr="星期一星期二星期三星期四星期五星期六星期日"
weekId=eval(input("请输入星期数字(1-7):"))
 pos=(weekId-1)*3
print(weekStr[pos:pos+3])

字符串处理函数

函数及使用|描述
len(x)|长度,返回字符串的长度
str(x)|任意类型x所对应的字符串形式
hex(x)或oct(x)|整数x的十六进制或八进制小写形式字符串

Unicode编码
python字符串的编码形式

  • 统一字符编码,即覆盖几乎所有字符的编码方式
  • 从0到1114111(0*10FFFF)的空间,每个编码对应一个字符
  • python字符串中每个字符都是Unicode编码字符
    12星座代表字符
for i in range(12):
     print(chr(9800+i),end="")

字符串处理方法

方法及使用 描述
str.lower或str.upper() 返回字符串的副本,全部字符小写/大写
str.split(sep=None) 返回一个列表,由str根据sep被分隔的部分组成
str.count(sub) 返回子串sub在str中出现的次数
str.replace(old,new) 返回字符串str副本,所有old子串被替代为new
str.center(width[,fillchar]) 字符串str根据宽度width居中,fillchar可选
str.strip(chars) 从str中去掉在其左侧和右侧chars中列出的字符
str.join(iter) 在iter变量除最后元素外每个元素后增加一个str

字符串类型的格式化

格式化是对字符串进行格式表达的方式

  • 字符串格式化使用.format()方法,用法如下:
    <模板字符串>.format(<逗号分隔的参数>)
:               引导符号
<填充>      用于填充的单个字符
<对齐>      <左对齐 >右对齐 ^居中对齐
<宽度>      槽设定的输出宽度
<,>        数字的千位分隔符
<.精度>     浮点数小数精度或字符串最大输出长度
<类型>      整数类型 浮点数类型

3.4time库的使用

time库是python中处理时间的标准库

  • 时间获取:time() ctime() gmtime()
  • 时间格式化:strftime() strptime()
  • 程序计时:sleep(),perf_counter()
函数 描述
time() 获取当前时间戳,即计算机内部时间值,浮点数
ctime() 获取当前时间并以易读方式表示,返回字符串
gmtime() 获取当前时间,表示为计算机可处理的时间格式

时间格式化
将时间以合理的方式展示出来

  • 格式化:类似字符串格式化,需要有展示模板
  • 展示模板由特定的格式化控制符组成
  • strftime()方法
函数 描述
strftime(tpl,ts) tpl是格式化模板字符串,用来定义输出效果。ts是计算机内部时间类型的变量
strptime(str,tpl) str是字符串形式的时间格式化。tpl是格式化模板字符串,用来定义输入效果

程序计时

  • 程序计时指测量起止动作所经历事件的过程
  • 测量时间:perf_counter()
  • 产生时间:sleep()
函数 描述
per_counter() 返回一个CPU级别的精确时间计数值,单位为秒。由于这个计数值起点不确定,连续调用差值才有意义
sleep s拟休眠时间,单位是秒,可以是浮点数

3.5文本计数条

需求分析

  • 采用字符串方式打印可以动态变化的文本进度条
  • 进度条需要能在一行中逐渐变化

问题分析

  • 采用sleep()模拟一个持续的进度
  • 似乎不那么难

“文本进度条”简单开始

#TextProBarV1.py
import time
scale=10
print("------执行开始------")
for i range(scale+1)
     a='*' * 1
     b='.' * (scale-i)
     c=(i/scale)*100
     print("{:^3.0f}%[{}->{}]".format(c,a,b))
     time.sleep(0.1)
print("------执行结束------")

单行动态刷新

#TextProBarV2.py
import time
for i in range(101):
     print("\r{:3}%".format(i),end="")
     time.sleep(0.1)

完整效果

#TextProBarV3.py
import time
scale = 50
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,'-'))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342