Python基本数据类型

基本数据类型

3.1 数字类型及操作
3.1.1整数类型

与数学中整数的概念一致

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

image-20221002102214050

4种进制表示形式

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

与数学中实数的概念一致

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

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

image-20221002103058028

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

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

  • 使用字母e或E作为幂的符号,以10为基数,格式如下:

​ < a >e< b > 表示 a*10的b次方

  • 例如:4.3e-3 值为0.0043 9.6E5 值为960000.0
3.1.3复数类型

与数学中复数的概念一致

如果x的2次方 = -1,那么x的值是什么?

  • 定义j = √(-1),以此为基础,构建数学体系
  • a+bj被称为复数,其中,a是实部,b是虚部

复数实例

z = 1.23e-4+5.6e+89j

image-20221002104039305

z.real 获得实部

z.imag 获得虚部

3.1.4数值运算操作符

操作符是完成运算的一种符号类型

image-20221002104256793

image-20221002104334595

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

image-20221002104444911

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

  • 三种类型存在一种逐渐“扩展”或“变宽”的关系:

​ 整数 - >浮点数- >复数

  • 例如:123 + 4.0 = 127.0 (整数 + 浮点数 = 浮点数)
3.1.5数值运算函数

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

image-20221002104801722

image-20221002104822681

image-20221002104840184

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

基本问题:持续的价值

  • 一年365天,每天进步1%,累计进步多少呢?

​ 1.01的365次方

  • 一年365天,每天退步1%,累计剩下多少呢?

​ 0.99的365次方

需求分析

  • 数学公示可以求解,似乎没必要用程序
  • 如果是“三天打鱼两天晒网”呢?
  • 如果是“双休日又不退步”呢?
问题1:1%。(千分之一)的力量
  • 一年365天,每天进步1%,累计进步多少呢?

​ 1.001的365次方

  • 一年365天,每天退步1%,累计剩下多少呢?

​ 0.999的365次方

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

image-20221003095426292

问题2:5%。和1%的力量
  • 一年365天,每天进步5%。或1%,累计进步多少呢?

​ 1.005的365次方 1.01的365次方

  • 一年365天,每天退步5%。或1%,累计剩下多少呢?

​ 0.995的365次方 0.99的365次方

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

image-20221003100624501

引入变量dayfactor,其好处是:修改整体程序的一处代码即可

将dayfactor改为0.01

image-20221003100736065

问题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))

image-20221003103531621

问题4:工作日的努力
  • 工作日模式要努力到什么水平,才能与每天努力1%一样

  • A君:一年365天,每天进步1%,不停歇

  • B君:一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?

for…in…(计算思维)---->def…while…(”笨蛋法“,试错)

image-20221003150823100

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

根据df参数计算工作日力量的函数

参数不同,这段代码可共用

def保留字用于定义函数

while保留字判断条件是否成立

条件成立时循环执行

image-20221003151812432

工作日的努力参数是:0.019

工作日模式,每天要努力到1.9%,相当于365模式每天1%的一倍!

GRIT: perseverance and passion for long-term goals
1.01的365次方 = 37.78
1.019的365次方 = 962.89

  • GRIT,坚毅,对长期目标的持续激情及持久耐力
  • GRIT是获得成功最重要的因素之一,牢记天天向上的力量
3.3 字符串类型及操作
3.3.1字符串类型的表示

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

  • 字符串由一对单引号或一对双引号表示

“请输入带有符号的温度值:”或者‘C’

  • 字符串是字符的有序序列,可以对其中的字符进行索引

“请”是“请输入带有符号的温度值:”的第0个字符

字符串有 2类共4种 表示方法

  • 由一对单引号或双引号表示,仅表示单行字符串

“请输入带有符号的温度值:”或者‘C’

  • 由一对三单引号或三双引号表示,可表示多行字符串

‘’‘Python

​ 语言 ‘’‘

  • 如果希望在字符串中包含双引号或单引号呢?

‘这里有个双引号(“)’或者”这里有个单引号(‘)“

  • 如果希望在字符串中既包括单引号又包括双引号呢?

’‘’这里既有单引号(‘)又有双引号(”)’‘’

使用[]获取字符串中一个或多个字符

  • 索引:返回字符串中单个字符 <字符串>[M]

“请输入带有符号的温度值:[0]”或者TempStr[-1]

  • 切片:返回字符串中一段字符子串 <字符串>[M:N]

“请输入带有符号的温度值:”[1:3]或者TempStr[0:-1]

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

  • <字符串>[M:N],M缺失表示至开头,N缺失表示至结尾

“O一二三四五六七八九十“[:3]结果是”O一二“

  • <字符串>[M:N:K],根据步长K对字符串切片

”O一二三四五六七八九十“[1:8:2]结果是"一三五七"

”O一二三四五六七八九十“[::-1]结果是"十九八七六五四三二一O"

转义符”\“

  • 转义符表示特定字符的本意

”这里有个双引号(\”)“结果是这里有个双引号(")

  • 转义符形成一些组合,表达一些不可打印的含义

“\b”回退 “\n”换行(光标移动到下行首) “\r”回车(光标移动到本行首)

3.3.2字符串操作符

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

image-20221006104640926

获取星期字符串

  • 输入:1-7的整数,表示星期几
  • 输出:输入整数对应的星期字符串
  • 例如:输入3,输出 星期三
#WeekNamePrintV1.py
weekStr = "星期一星期二星期三星期四星期五星期六星期日"
weekId = eval(input("请输入星期数字(1-7):"))
pos = (weekId - 1) * 3
print(weekStr[pos : pos+3])

image-20221006105322017

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

image-20221006105626235

3.3.3字符串处理函数

一些以函数形式提供的字符串处理功能

image-20221007095923206

image-20221007100253710

image-20221007100309071

Unicode编码——Python字符串的编码方式

  • 统一字符编码,即覆盖几乎所有字符的编码方式
  • 从0到1114111(0x10FFFF)空间,每个编码对应一个字符
  • Python字符串中每个字符都是Unicode编码字符

一些有趣的例子

>>> "1 + 1 = 2" + chr(10004)
>>> '1 + 1 = 2✔'

>>> for i in range(12):
>>> print(chr(9800 + i),end = "")
>>> ♈♉♊♋♌♍♎♏♐♑♒♓

>>> "金牛座字符的Unicode值是:" + str(ord("♉"))
>>> '金牛座字符的Unicode值是:9801'
3.3.4字符串处理方法

"方法"在编程中是一个专有名词

  • ”方法“特指< a >.< b >()风格中的函数< b >()
  • "方法"本身也是函数,但与< a >有关,< a >.< b >()风格使用
  • 字符串及变量也是< a >,存在一些方法

一些以方法形式提供的字符串处理功能

image-20221007103622930

image-20221007103641957

image-20221007103657471

3.3.5字符串类型的格式化

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

  • 字符串格式化使用.format()方法,用法如下:

​ <模板字符串>.format(<逗号分隔的参数>)

槽——相当于一对占位信息符

image-20221007104200948

image-20221007104243285

槽内部对格式化的配置方式

{<参数序号> : <格式控制标记>}

image-20221007104735737

image-20221007105243060

image-20221007105523869

3.4 模块2:time库的使用
3.4.1time库基本介绍

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

  • 计算机时间的表达
  • 提供获取系统时间并格式化输出功能
  • 提供系统级精确计时功能,用于程序性能分析

​ import time

​ time.< b >()

time库包括三类函数

  • 时间获取: time() ctime() gmtime()

  • 时间格式化: strftime() strptime()

  • 程序计时: sleep(), perf_counter()

3.4.2时间获取

image-20221007155401505

image-20221007155542642

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UcNQ7mgO-1665140657314)(C:/Users/86155/AppData/Roaming/Typora/typora-user-images/image-20221007155603682.png)]

image-20221007155716255

3.4.3时间格式化

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

  • 格式化:类似字符串格式化,需要有展示模板

  • 展示模板由特定的格式化控制符组成

  • strftime()方法

image-20221007155855423

image-20221007160120940

格式化控制符

image-20221007160229680

image-20221007160337227

image-20221007160457833

将字符串变成计算机可读的时间

image-20221007160705130

image-20221007160850899

3.4.4程序计时应用
程序计时应用广泛
  • 程序计时指测量起止动作所经历时间的过程
  • 测量时间:pref_counter()
  • 产生时间:sleep()

image-20221007161102496

image-20221007161640056

image-20221007161140656

3.5 实例4:文本进度条
3.5.1"文本进度条"问题分析

文本进度条

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

如何获得文本进度条的变化时间

  • 采用sleep()模拟一个持续的进度
  • 似乎不那么难
3.5.2"文本进度条"简单的开始
#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("------执行结束------")

image-20221007182404074

3.5.3"文本进度条"单行动态刷新

刷新的关键是\r

  • 刷新的本质是:用之后打印的字符覆盖之前的字符

  • 不能换行:print()需要被控制

  • 要能回退:打印后光标退回到之前的位置\r

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

image-20221007183115330

IDLE屏蔽了\r功能

3.5.4"文本进度条"实例完整效果
#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.pref_counter() - start
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')
    time.sleep(0.1)
print("\n"+"执行结束".center(scale//2,'-'))

image-20221007185750449

个人学习记录会持续更新,不喜勿碰,如有指导建议,欢迎评论区留言,谢谢!!!

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Augenstern K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值