第三章 基本数据类型

  • 3.1 数字类型及操作
  • 整数类型
  • 浮点数类型
  • 复数类型
  • 数值运算操作符
  • 数值运算函数
  • 3.2 实例3:天天向上的力量
  • 3.3 字符串类型及操作
  • 字符串类型的表示
  • 字符串操作符
  • 字符串处理函数
  • 字符串处理方法
  • 字符串类型的格式化
  • 3.4 模块2:time库的使用
  • time库基本介绍
  • 时间获取
  • 时间格式化
  • 程序计时应用
  • 3.5 实例4:文本进度条


方法论
  -Python语言数字及字符串类型
实践能力
  -初步学会编程进行字符类操作

3.1 数字类型及操作

整数类型

与数学中整数的概念一致
-可正可负,没有取值范围限制
-pow(x, y)函数:计算xy,想算多大算多大
如:pow(2, 100)
4种进制表示形式
-十进制:1010,99,-217
-二进制,以0b或0B开头:0b010,-0B101
-八进制,以0o或0O开头:0o123,-0O456
-十六进制:以0x或0X开头:0x9a,-0X89

浮点数类型

与数学中实数的概念一致
-带有小数点及小数的数字
-浮点数取值范围和小数精度都存在限制,但常规计算可忽略
-取值范围数量级约-10308至10308,精度数量级10-16
浮点数间运算存在不确定尾数,不是bug
0.1 + 0.2 0.3000000000000000004
二进制表示小数,可以无限接近,但不完全相同
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*10b
-例如:4.3e-3,9.6E5

复数类型

与数学中复数的概念一致
z = a + bj
-z.real 获得实部a
-z.imag 获得虚部b

数值运算操作符

操作符是完成运算的一种符号体系

java二元运算符 python python二元操作符_python


java二元运算符 python python二元操作符_字符串_02


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

java二元运算符 python python二元操作符_进度条_03


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

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

  整数 ->浮点数->复数

-例如:123 + 4.0 = 127.0 (整数+浮点数=浮点数)

数值运算函数

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

java二元运算符 python python二元操作符_进度条_04


java二元运算符 python python二元操作符_java二元运算符 python_05


java二元运算符 python python二元操作符_字符串_06

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

基本问题:持续的价值
-一年365天,每天进步1%,累计进步多少呢?1.01365
-一年365天,每天退步1%,累计剩下多少呢?0.99365
-如果是“三天打鱼两天晒网”呢?
-如果是“双休日又不退步”呢?

问题1:1‰的力量
-一年365天,每天进步1‰,累计进步多少呢?1.001365
-一年365天,每天退步1‰,累计剩下多少呢?0.999365

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

问题2:5‰和1%的力量
-一年365天,每天进步5‰或1%,累计进步多少呢?1.005365,1.01365
-一年365天,每天退步5‰或1%,累计剩下多少呢?0.995365,0.99365

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

采用循环模拟365天的过程:抽象+自动化

问题4:工作日的努力

-工作日模式要努力到什么水平,才能与每天努力1%一样?

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

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

def…while…("笨办法"试错)

java二元运算符 python python二元操作符_java二元运算符 python_07

#DayDayUpQ4.py
def dayUP(df):
    dayup = 1.0
    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.38:
    dayfactor += 0.001
print ("工作日的努力参数是:{:.3f}".format(dayfactor))

根据df参数计算工作日力量的函数;参数不同,这段代码可共用
def保留字用于定义函数
while保留字判断条件是否成立
条件成立时循环执行
运行结果:工作日的努力参数是0.019
GRIT:perseverance and passion for long-term goals
-GRIT,坚毅,对长期目标的持续激情及持久耐力
-GRIT是获得成功最重要的因素之一,牢记天天向上的力量

3.3 字符串类型及操作

字符串类型的表示

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

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

“请输入"或者’C’

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

“请"是"请输入"的第0个字符

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

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

“请输入"或者’C’

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

‘’’ Python

语言’‘’

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

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

-如果希望在字符串中既包含双引号又包括单引号

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

字符串的序号

java二元运算符 python python二元操作符_java二元运算符 python_08


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

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

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

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

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

‘0123456789’[:3]结果是’012’

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

‘0123456789’[1:8:2]结果是’1357’

‘0123456789’[::-1]结果是’987643210’(字符串逆序)

*转义符*

-转义符表达特定字符的本意

“这里有个双引号(”)" 结果为:这里有个双引号(")

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

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

字符串操作符

java二元运算符 python python二元操作符_字符串_09


获取星期字符串

-输入:1-7的整数,表示星期几

-输出:输入整数对应的星期字符串

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

字符串处理函数

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

java二元运算符 python python二元操作符_进度条_10


java二元运算符 python python二元操作符_字符串_11


Unicode编码

Python字符串的编码方式

Unicode和字符是一一对应的

-统一字符编码,即覆盖几乎所有字符的编码方式

-从0到1114111(0×10FFFF)空间,每个编码对应一个字符

-Python字符串中每个字符都是Unicode编码字符

java二元运算符 python python二元操作符_java二元运算符 python_12

字符串处理方法

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

-“方法”特指< a>.< b>()风格中的函数< b>()

-方法本身也是函数,但与< a>有关,< a>.< b>()风格使用

-字符串及变量也是< a>,存在一些方法

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

java二元运算符 python python二元操作符_java二元运算符 python_13


java二元运算符 python python二元操作符_开发语言_14


java二元运算符 python python二元操作符_字符串_15

字符串类型的格式化

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

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

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

java二元运算符 python python二元操作符_进度条_16


java二元运算符 python python二元操作符_python_17


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

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

java二元运算符 python python二元操作符_进度条_18


java二元运算符 python python二元操作符_进度条_19


java二元运算符 python python二元操作符_进度条_20

3.4 模块2:time库的使用

time库基本介绍

time库是Python中处理时间的标准库
-计算机时间的表达
-提供获取系统时间并格式化输出功能
-提供系统级精确计时功能,用于程序性能分析
import time
time.< b>()
time库包括三类函数
-时间获取:time(), ctime(), gmtime()
-时间格式化:strftime(), strptime()
-程序计时:sleep(), perf_counter()

时间获取

java二元运算符 python python二元操作符_字符串_21


java二元运算符 python python二元操作符_python_22

时间格式化

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

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

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

-strftime()方法

java二元运算符 python python二元操作符_进度条_23


java二元运算符 python python二元操作符_java二元运算符 python_24


java二元运算符 python python二元操作符_python_25


java二元运算符 python python二元操作符_进度条_26

程序计时应用

程序计时应用广泛

-程序计时指测量起止动作所经历时间的过程

-测量时间:perf_counter()

-产生时间:sleep()

java二元运算符 python python二元操作符_进度条_27


java二元运算符 python python二元操作符_字符串_28

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
print(, end = " ") print输出最后增加一个end中表示的信息,不想换行,就输入一个空字符串

#TextProBarV2.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, "-")

进度条扩展

-在任何运行时间需要较长的程序中增加进度条

-在任何希望提高用户体验的应用中增加进度条

-进度条是人机交互的纽带之一

java二元运算符 python python二元操作符_开发语言_29