【Python基础学习】3.基本数据类型

主要参考来源:慕课嵩天老师的“Python语言程序设计”[https://www.icourse163.org/course/BIT-268001?tid=1468130447]

3.1数据类型及其操作

  • 整数类型(对应数学中的整数)
    pow(x,y)表示x的y次方
    十进制(和普通整数一致,可正可负,正常表示)
    二进制(0b或0B开头,例如0b010,-0B101)
    八进制(0o或0O开头)
    十六进制(0x或0X开头)
  • 浮点数类型(对应数学中的实数)
    浮点数间运算存在不确定尾数(二进制和十进制不严格对应)
    round(x,d):对x四舍五入,d是小数截取位数
    不确定尾数一般发生在1e-16
    浮点数用科学计数法表示:aeb表示a*10的b次方,e也可写为E
  • 复数类型(对应数学中的复数)
    z.real获得实部,z.imag获得虚部
  • 数值运算操作符
    //整除,%取余,俩*幂运算
    二元操作符op:例如,x+=y,x%=y,x**=y
    类型间可进行混合运算,生成结果为“最宽”类型
  • 数值运算函数
函数及使用 描述
abs(x) 绝对值
divmod(x,y) 商余,(x//y,x%y),同时输出商和余数
pow(x,y[,z]) 幂余,(x**y)%z,[..]表示参数z可省略
round(x[,d]) 四舍五入
max(x1,x2,...,xn) 最大值,n不限
min(x1,x2,...,xn) 最小值,n不限
int(x) 将x变成整数,舍弃小数部分
float(x) 将x变成浮点数,增加小数部分
complex(x) 将x变成复数,增加虚数部分

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

Q1:千分之1的力量
#DayDayUpQ1.py
dayup = pow(1.001,365)
daydown = pow(0.999,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
#结果为 向上:1.44,向下:0.69
Q2:千分之五的力量
#DayDayUpQ2.py
dayfactor = 0.005
dayup = pow(1+dayfactor,365)
daydown = pow(1-dayfactor,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
#结果为 向上:6.17,向下:0.16
Q3:工作日的力量
#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.63
Q4:工作日的努力
#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))
#结果为 工作日的努力参数是:0.019

GRIT:perseverance and passion for long-term goals
GRIT,坚毅,对长期目标的持续激情及持久耐力
GRIT是获得成功最重要因素之一,牢记天天向上的力量

3.3字符串类型及操作

字符串类型的表示
字符串是字符的有序序列,可对其中的字符进行索引。
一对单引号或一对双引号,仅表示单行字符串
一对三单引号或三双引号表示,可表示多行字符串
索引和切片
切片中若起始位置缺失表示至开头,终止位置缺失表示至结尾
根据步长K对字符串切片:
"〇一二三四五六七八九十"[1:8:2]结果为"一三五七"
"〇一二三四五六七八九十"[::-1]结果为"十九八七六五四三二一〇"
转义符\,表达特定字符的本意,或者形成一些组合,表达一些不可打印的含义,例如,“\b”回退,“\n”换行,“\r”回车
字符串操作符

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

字符串处理函数

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

字符串处理方法
“方法”特指<a>.<b>()风格中的函数<b>()
方法本身也是函数,但与<a>有关
|方法及使用|描述|
|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(<逗号分割的参数>)

“{}:计算机{}的CPU占有率为{}%”.format("2018-10-10","C",10)
0、1、2为默认顺序
也可进行指定,{}中分别填入1、0、2,则对应“C”,"2018-10-10",10
槽内部对格式化的配置方式:{<参数序号>:<格式控制标记>}

: <填充> <对齐> <宽度> <,> <.精度> <类型>
引导符号 用于填充的单个字符 <左对齐,>右对齐,^居中对齐 槽设定的输出宽度 数字的千位分隔符 浮点数小数精度或字符串最大输出长度 整数类型b,c,d,o,x,X 浮点数类型e,E,f,%

3.4模块2:time库的使用

time库基本介绍

time库是Python中处理时间的标准库
时间获取:time(),ctime(),gmtime()
时间格式化:strftime(),strptime()
程序计时:sleep(),perf_time()

时间获取

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

时间格式化

格式化:类似字符串格式化,需要有展示模板
展示模板由特定的格式化控制符组成

函数 描述
strftime(tpl,ts) tpl是格式化模板字符串,用来定义输出效果 ts是计算机内部时间类型变量
格式化字符串 日期/时间说明 值范围和实例
%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
%I 小时(12h制) 01到12
%p 上/下午 AM,PM
%M 分钟 00到59
%S 00到59
函数 描述
strfptime(str,tpl) str是字符串形式的时间值,tpl是格式化模板字符串,用来定义输入效果

程序计时应用

程序计时指测量起止动作所经历时间的过程
测量时间:perf_counter()
产生时间:sleep()

函数 描述
perf_counter() 返回一个CPU级别的精确时间计数值,单位为秒 由于此计数值起点不确定,连续调用差值才有意义
sleep(s) s拟休眠的时间,单位为秒,可以是浮点数

3.5实例4:文本进度条

“文本进度条”问题分析
文本进度条:
采用字符串方式打印可以动态变化的文本进度条
进度条能在一行内逐渐变化
采用sleep()模拟一个持续的进度
“文本进度条”简单的开始

#TextProBarV1.py
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(0.1)
print("------执行结束------")

“文本进度条”单行动态刷新
刷新的关键是:\r
刷新的本质:用之后打印的字符覆盖之前的字符
不能换行:print()需要被控制
要能回退:打印后光标退回到之前的位置\r

#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,'-'))

“文本进度条”举一反三
计算问题扩展
进度条应用
文本进度条的不同设计函数
不同设计函数执行效果

例如使用Fast Power函数:

#TextProBar.py
import time
scale = 100
print("执行开始".center(scale//2,'-'))
i = 0
m = 0
start = time.perf_counter()
for i in range(scale + 1):
    m = int(pow((i/scale+1)/2,8)*scale) #使用了Fast Power设计函数
    a = '*' * m
    b = '.' * (scale - m)
    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,'-'))
posted @ 2023-01-18 21:44  战神FGH  阅读(148)  评论(0)    收藏  举报