数字类型及操作

整数类型

  • 可正可负,没有取值范围限制
  • 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.20.3000000004>>>0.1 + 0.2 == 0.3 False>>>round(0.1+0.2,1) == 0.3True
  • 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
+x x本身
-y y的负值
x % y 余数,模运算 10%3结果是1
x + y 加,x与y之和
x ** y 幂运算,x的y次幂,x^y

二元操作符

x+=y x-=y x*=y x/=y x//=y x%=y x**=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 = 1for 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
%S 00~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 = '*' * ib = '.' * (scale - i)c = (i/scale) * 100print("{:^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 = '*'* ib = '.' * (scale - i)c = (i/scale)*100dur = time.perf_counter()-startprint("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur))time.sleep(0.1)
print('\n'+"执行结束".center(scale//2,'-'))

举一反三

计算问题扩展

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

进度条扩展

  • 在任何运行时间需要较长的程序中增加进度条
  • 在任何希望提高用户体验的应用中增加进度条
  • 进度条是人机交互的纽带之一

文本进度条的不同设计函数

设计名称 趋势 设计函数
Linear Constant f(x) = x
Early Pause Speeds up f(x)=x+(1-sin(x* Π *2+Π/2)/-8)
Late Pause Slows down f(x)=x+(1-sin(x* Π *2+Π/2)/8)
Slow Wavy Constant f(x) = x+sin(x* Π * 5)/20
Fast Wavy Constant f(x) = x+sin(x* Π * 20)/80
Power Speeds up f(x)=(x+(1-x)*0.03)^2
Inverse Power Slows down f(x)=1+(1-x)^1.5*(-1)
Fast Power Speeds up f(x)=(x+(1-x)/2)^8
Inverse Fast Power Slows down f(x)=1+(1-x)^3*(-1)

04 Python基本数据类型相关推荐

  1. python基本数据类型float_Python基本数据类型

    目录 前言 Python作为一种弱类型编程语言,其数据类型较之于C/C++无论是在数据的存储还是调用都有着很大的区别.其特有的字典类型更是一个非常经典且功能强大的数据类型.下面一起来学习Python的 ...

  2. python六大数据类型详解

    python 六大数据类型详解 文章目录 python 六大数据类型详解 数据类型简介 Number(数值) String(字符串) Python字符串的45个方法详解 一.大小写转换 01.capi ...

  3. Python的零基础超详细讲解(第四天)-Python的数据类型

    Python 基本数据类型 Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型&q ...

  4. python的数据类型和变量

    python的数据类型和变量 数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种 ...

  5. python核心数据类型_Python核心数据类型-列表

    Python核心数据类型-列表 关于列表的重要属性 列表是任意对象的有序集合,列表中可以包含任何种类的对象,数字 字符串 或者是其他列表 列表可以通过偏移来读取其中的元素,也可以通过分片读取列表中的某 ...

  6. python判断数据类型type_Python 判断数据类型有type和isinstance

    Python 判断数据类型有type和isinstance 基本区别在于: type():不会认为子类是父类 isinstance():会认为子类是父类类型 执行结果如下: 用isinstance判断 ...

  7. Python基础数据类型之set集合

    Python基础数据类型之set集合 一.set数据类型介绍 二.set集合演示 三.set集合中hash介绍 1.哈希定义 2.数据类型的hash和不可hash 3.set中hash示例 四.set ...

  8. Python基础数据类型之字符串(二)

    Python基础数据类型之字符串(二) 一.字符串的常规操作 二.字符串的大小写转换 1.首字母大写 2. 每个单词首字母大写 3.大写转化为小写 4.所有字母变成大写字母 二.验证码忽略大小写 三. ...

  9. Python基础数据类型之字符串(一)

    Python基础数据类型之字符串(一) 一.字符串格式化 1.字符串占位符 2.字符串格式化操作 二.f-string格式化 三.字符串的索引 四.字符串的切片 1.常规切片使用方法 3.步长的介绍 ...

最新文章

  1. Spring 面向切面编程
  2. 以假乱真的“人造脸”,能骗过面部识别吗?
  3. JNDI数据源配置注意事项
  4. IAR编译的工程无法正常仿真的问题
  5. VNC over reverse SSH
  6. 【转】ANSI与GB2312的编码问题
  7. RUNOOB python练习题24 斐波那契数列的衍生问题
  8. oracle逻辑备份和物理备份,Oracle备份与恢复介绍(物理备份与逻辑备份)
  9. oracle 设置忽略关键字,记oracle里continue关键字的陷阱
  10. PyTorch系列入门到精通——模型创建与nn.Module
  11. 《微软System Center 2012 R2私有云部署实战》——1.4 微软私有云
  12. PHP实现添加到错题本,制作错题本的步骤、使用方式及窍门!
  13. Oracle 日历表详解(含节假日)
  14. linux 温度测试软件,linux上安装cpu温度监控软件
  15. 电路定理——替代定理
  16. 那让人生生死死的「生态位」
  17. 一部《再忆王家沱》讲述百年重庆历史,堪称中国版《百年孤独》
  18. python足球分析系统_NAO足球/高尔夫比赛视觉系统设计(python初级版)
  19. uva1601(The morning after Helloween)解题报告
  20. You are pushing more GUIClips than you are popping. Make sure they are balanced(Unity Console错误提示)

热门文章

  1. JAVA(阶段小结篇)
  2. WIN7 64位操作系统下成功安装Oracle10g(32位)
  3. 英特尔夏乐蓓:物联网正成为现实
  4. 书论97 姚配中《书学拾遗》
  5. ArcMap通过服务定义发布服务
  6. C3D:视频动作分类demo实现
  7. kpu 处理器_KPU · MaixPy 文档
  8. springBoot学习2--整合篇--基于狂神说
  9. 【深度推荐算法】DataWhale组队学习Task01: DeepCrossing
  10. 2021-最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)---手写代码篇