04 Python基本数据类型

数字类型及操作

整数类型

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

四种进制

  • 十进制:213,99,-14
  • 二进制:以0b或0B开头:0b010,-0B110
  • 八进制:以0o或0O开头:0o123,-0O456
  • 十六进制:以0x或0X开头:0x9a,0x89

浮点数类型

与数学概念一致

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

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

    >>>0.1 + 0.2
    0.3000000004
    
    >>>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
  • 例如4.3e-3值为0.0043 9.6E5值为960000.0

复数类型

与数学概念一致

z = 1.23e-4 + 5.6e+89j
z.real获得实部;z.imag获得虚部

数字运算操作符

操作符及使用描述
x + y加,x与y之和
x - y减,x与y之差
x * y乘,x与y之积
x / y除,x与y之商 10/3 结果是3.3333333335
x // y整数除 ,x与y之整数商 10//3结果是3
+xx本身
-yy的负值
x % y余数,模运算 10%3结果是1
x + y加,x与y之和
x ** y幂运算,x的y次幂,x^y

二元操作符

x+=yx-=yx*=yx/=yx//=yx%=yx**=y

数字类型的关系

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

  • 三种类型存在一种逐渐“扩展”或“变宽”的关系:
    整数 -> 浮点数 -> 复数
  • 例如 : 123 + 4.0 = 127.0 (整数 + 浮点数 = 浮点数)

数值运算函数

函数及使用描述
abs(x)x的绝对值 abs(-10.01)结果为10.01
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 round(-10.123,2)结果为-10.12
max(x1,x2,…,x3)最大值 max(1,3,1,34)结果为34
min(x1,x2,…,x3)最大值 min(1,3,1,34)结果为1
int(x)将x变成整数,舍弃小数部分 int(123.45)结果为123;int(“123”)结果为123
float(x)将x变成浮点数,增加小数部分 float(12)结果为12.0;float(“1.23”)结果为1.23
complex(x)将x变成复数,增加虚数部分 complex(4)结果为4+0j

天天向上的力量

问题1:1‰的力量

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

问题2:工作5‰

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

问题3:工作日增加%1,休息日减少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:休息的情况下,每天需要工作多少

#DayDayUpQ4
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个或多个字符组成的有序字符序列

  • 字符串由一对单引号或一对双引号表示
    "I love you"或’z’
  • 字符串是字符的有序序列,可以对其中的字符进行索引
    "I love you " "I"是第0个字符

字符串2类4种 表示方法

  • 由一对单引号或双引号表示,仅表示单行字符串
    "I love you "或 ‘C’
  • 由一对三单引号或三双引号表示,可表示多行字符串
    ‘’‘python
    语言’’’
  • 如果希望在字符串中包含双引号或单引号
    '这里有个双引号(")‘或者"这里有个单引号(’)"
  • 如果希望在字符串中即包括单引号又包括双引号
    ‘’’ 这里既有单引号(’)又有双引号(")’’’

字符串的序号
字符串是有序序列,可以对其中的字符进行索引
字符串的序号正向递增和反向递减
-5-4-3-2-1(反向递减)
我好喜欢你
0 1 2 3 4 (正向递增)

字符串的使用

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

  • 索引 返回字符串中单个字符 <字符串>[M]
    “我好喜欢你”[0]或者 Str[-1]
  • 切片 返回字符串中一段字符子串 <字符串>[M:N]
    “我好喜欢你”[0:3]或者 Str[0:-1] (从0开始不到3,从0开始不到-1)

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

  • <字符串>[M:N],M缺失表示至开头,N缺失表示至结尾
    “零一二三四五六七八九十”[:3]结果是"零一二"
  • <字符串>[M:N:K],根据步长K对字符串切片
    “零一二三四五六七八九十”[1:8:2]结果是"一三五七"
    “零一二三四五六七八九十”[::-1]结果是"十九八七六五四三二一零"

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

  • 转义符表达特定字符的本意
    “这里有个双引号(”)“结果为 这里有个双引号(”)
  • 转义符形成一些组合,表达一些不可打印的含义
    "\b"回退 "\n"换行(光标移动到下行首) "\r"回车(光标回到本行首)

字符串操作符

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

获取星期字符串

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

字符串处理函数

函数及使用描述
len(x)长度,返回字符串x的长度 len(“123四五六”)结果为6
str(x)任意类型x对应的字符串形式 str(1.23)结果为"1.23" str([1,2])结果为"[1,2]"
hex(x)或oct(x)整数x的十六进制或八进制小写形式字符串 hex(425)结果是"0x1a9"oct(425)结果是"0o651"
chr(u)u为Unicode编码,返回其对应字符
ord(x)x为字符,返回其对应的Unicode编码
Unicode编码

python字符串的编码方式

  • 统一字符编码,即覆盖几乎所有字符的编码方式
  • 从0到1114111(0x10FFFF)空间,每个编码对应y一个字符
  • Python字符串中每个字符都是Unicode编码字符
>>> "1+1=2"+chr(10004)
'1+1=2✔'
>>> for i in range(12):
	print(chr(9800+i),end="")

	
♈♉♊♋♌♍♎♏♐♑♒♓

字符串处理方法

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

  • “方法”特指< a >.< b >()风格中的函数 < b >()
  • 方法本身也是函数,但是与< a >有关,< a >.< b >()风格使用
  • 字符串及b变量也是,存在一些方法
一些方法形式提供的字符串处理功能
方法及使用描述
str.lower()或str.upper() 或 str.title()返回字符串的副本,全部字符小写/大写"AbCdEfGh".lower()结果是"abcdefgh" 按句子规定大小写
str.split(sep=None)返回一个列表,由str根据sep被分割的部分组成"A,B,C".split(",")结果为[‘A’,‘B’,‘C’]
str.count(sub)返回子串sub在str中出现的次数"an apple a day".count(a)结果为4
str.replace(old,new)返回字符串str副本,所有old子串被替换为new"python".replace(“n”,“n123.io”)结果为"python123.io"
str.center(width[,fillchar])字符串str根据宽度width居中,fillchar可选"python".center(20,"=")结果为’======= python =======’
str.strip(chars) / str.lstrip() / str.rstrip()从str中去掉在其左侧和右侧chars中列出的字符"= python".strip(" =np")结果为"ytho"
str.join(iter)在iter变量除最后元素外每个元素后增加一个str",".join(“12345”)结果为"1,2,3,4,5"#主要用于字符串分割等

字符串类型的格式化

格式化是对字符串进行格式表达的方式
  • 字符串格式化使用.format()方法,用法如下:
    <模板字符>.format(<逗号分隔的参数>)

“{}:计算机{}的CPU占用率为{}%”.format(“2018-10-10”,“C”,10)
 0    1              2               0        1    2
字符串槽默认顺序–>              format()中参数默认顺序–>

“{1}:计算机{0}的CPU占用率为{2}%”.format(“2018-10-10”,“C”,10)
进行不同的对应 1对应"C"等等

< 填充 >< 对齐 >< 宽度 ><,> < .精度 > < 类型 >
引导符号用于填充的单个字符< 左对齐 >右对齐 ^居中对齐槽设定的输出宽度

>>> "{0:=^20}".format("PYTHON")
'=======PYTHON======='
>>> "{0:*>20}".format("BIT")
'*****************BIT'
>>> "{:10}".format("BIT")
'BIT       '
: < 填充 > < 对齐 > < 宽度 ><,>< .精度 >< 类型 >
数字的千位分隔符浮点数小数精度 或 字符串最大输出长度整数类型 b, c, d, o, x, X 浮点数类型 e,E,f,%

>>> "{0:,.2f}".format(12345.6789)
'12,345.68'
>>> "{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)
'110101001,Ʃ,425,651,1a9,1A9'
>>> "{0:e},{0:E},{0:f},{0:%}".format(3.14)
'3.140000e+00,3.140000E+00,3.140000,314.000000%'

time库的使用

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

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

time库包含三类函数

  • 时间获取:time() ctime() gmtime()
  • 时间格式化:strftime() strptime()
  • 程序计时:sleep() perf_counter()
函数描述
time()获取当前时间戳,即计算机内部时间值,浮点数
>>> time.time()
1573438579.0728571 (1970年1月1日到目前为止秒为单位的值)
ctime()获取当前时间并以易读的方式表示,返回字符串
>>> time.ctime()
‘Mon Nov 11 10:17:56 2019’
gmtime()获取当前时间,表示为计算机可以处理的时间格式
>>> time.gmtime()
time.struct_time(tm_year=2019, tm_mon=11,
m_mday=11, tm_hour=2, tm_min=19,
tm_sec=29, tm_wday=0, tm_yday=315, tm_isdst=0)

时间格式化

  • 格式化:类似字符串格式化,需要有展示模板
  • 展示模板由特定的格式化控制符组成
  • strftime()方法
函数描述
strftime(tpl,ts)tpl是格式化模板字符串,用来定义输出效果
ts是计算机内部时间类型变量
>>> t = time.gmtime()
>>> time.strftime("%Y-%m-%d %H:%M:%S",t)
‘2019-11-11 03:00:28’
格式化字符串日期/时间说明值范围和实例
%Y年份0000~9999,例如:1997
%m月份01~12,例如:12
%B月份名称January~December,例如:July
%d日期01~31,例如:25
%A星期Monday~Sunday,例如:Wednesday
%a星期缩写Mon~Sun,例如:Wed
%H小时(24h制)00~23,例如:21
%I小时(12h制)01~12,例如:4
%p上/下午AM,PM,例如:PM
%M分钟00~59,例如:44
%S00~59,例如:14
函数描述
strptime(str,tpl)str是字符串形式的时间值
tpl是格式化模板字符串,用来定义输入效果
>>> timeStr = ‘2019-11-11 03:00:28’
>>> time.strptime(timeStr,"%Y-%m-%d %H:%M:%S")
time.struct_time(tm_year=2019, tm_mon=11,
tm_mday=11, tm_hour=3, tm_min=0, tm_sec=28, tm_wday=0, tm_yday=315, tm_isdst=-1)

程序计时

程序计时应用广泛

  • 程序计时指测量起止动作所经历时间的过程
  • 测量时间:perf_counter()
函数描述
perf_counter()返回一个CPU级别的精确时间计数值,单位为秒由于这个计数值起点不确定,连续调用差值才有意义
>>> start = time.perf_counter()
>>> end = time.perf_counter()
>>> end - start
9.109551900000042
sleep(s)s拟休眠的时间,单位是秒,可以是浮点数
>>> def wait():
time.sleep(3.3)
>>> wait() #程序将等待3.3s后退出

文本进度条

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

    如何获得文本进度条的变化时间
  • 采用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("------执行结束------")

------执行开始------
 0 %[->..........]
10 %[*->.........]
20 %[**->........]
30 %[***->.......]
40 %[****->......]
50 %[*****->.....]
60 %[******->....]
70 %[*******->...]
80 %[********->..]
90 %[*********->.]
100%[**********->]
------执行结束------

单行动态刷新

  • 刷新本质:用后打印的字符覆盖之前的字符
  • 不能换行:print()需要控制
  • 要能回退:打印后光标退回到之前的位置\r
#TextBarV1.py
import time
for i in range(101):
    print("\r{:3.0f}%".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))
    time.sleep(0.1)
print('\n'+"执行结束".center(scale//2,'-'))
    

举一反三

计算问题扩展

  • 文本进度条程序使用了perf_counter()计时
  • 计时方法适合各类需要统计时间的计算问题
  • 例如:比较不同算法时间、统计部分程序运行时间

进度条扩展

  • 在任何运行时间需要较长的程序中增加进度条
  • 在任何希望提高用户体验的应用中增加进度条
  • 进度条是人机交互的纽带之一
文本进度条的不同设计函数
设计名称趋势设计函数
LinearConstantf(x) = x
Early PauseSpeeds upf(x)=x+(1-sin(x* Π *2+Π/2)/-8)
Late PauseSlows downf(x)=x+(1-sin(x* Π *2+Π/2)/8)
Slow WavyConstantf(x) = x+sin(x* Π * 5)/20
Fast WavyConstantf(x) = x+sin(x* Π * 20)/80
PowerSpeeds upf(x)=(x+(1-x)*0.03)^2
Inverse PowerSlows downf(x)=1+(1-x)^1.5*(-1)
Fast PowerSpeeds upf(x)=(x+(1-x)/2)^8
Inverse Fast PowerSlows downf(x)=1+(1-x)^3*(-1)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值