目录:

  • 3.1 数字类型及操作
  • 3.2 实例3: 天天向上的力量
  • 3.3 字符串类型及操作
  • 3.4模块2: time库的使用
  • 3.5实例4: 文本进度条

课程导学

前课复习

Python基本语法元素
  • 缩进、注释、命名、变量、保留字
  • 数据类型、字符串、整数、浮点数、列表
  • 赋值语句、分支语句、函数
  • input()、print()、eval()、print()格式化
Python基本图形绘制
  • 从计算机技术演进角度看待Python语言
  • 海龟绘图体系及import保留字用法
  • penup()、pendown()、pensize()、pencolor()
  • fd()、circle()、seth()
  • -循环语句:for和in、range()函数
保留字

python按8小时计算工时_python

温度转换

python按8小时计算工时_python按8小时计算工时_02

Python蟒蛇绘制

python按8小时计算工时_浮点数_03

第3章 基本数据类型
目录:

  • 3.1 数字类型及操作
  • 3.2 实例3: 天天向上的力量
  • 3.3 字符串类型及操作
  • 3.4模块2: time库的使用
  • 3.5实例4: 文本进度条

方法论- Python数字及字符串类型
实践能力-初步学会编程进行字符类操作
练习(可选)- 5道编程@Python123
测验- 10道单选+2道编程@Python123

- 3.1 数字类型及操作

目录:

  • 整数类型
  • 浮点数类型
  • 复数类型
  • 数值运算操作符
  • 数值运算函数

小结:

  • 整数类型的无限范围及4种进制表示
  • 浮点数类型的近似无限范围、小尾数及科学计数法
  • +、-、*、/、//、%、**、二元增强赋值操作符
  • abs()、divmod()、pow()、round()、max()、min()
  • int()、float()、complex()

3.1.1-整数类型

与数学中整数的概念一致

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

4种进制表示形式:

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

小结:关于Python整数,就需要知道这些。
•整数无限制pow()
•4种进制表示形式

3.1.2-浮点数类型

与数学中实数的概念一致

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

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

python按8小时计算工时_进度条_04

python按8小时计算工时_python按8小时计算工时_05


python按8小时计算工时_进度条_06

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

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

  • 使用字母e或E作为幂的符号,以10为基数,格式如下:
    e 表示a*10b
  • 例如:4.3e-3值为0.0043 9.6E5值为960000.0

小结:关于Python浮点数,需要知道这些。
•取值范围和精度基本无限制
•运算存在不确定尾数round()
•科学计数法表示

3.1.3-复数类型

与数学中复数的概念一致
如果x2= -1,那么x的值是什么?

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

复数实例
z = 1.23e-4+5.6e+89j

  • 实部是什么?z.real获得实部
  • 虚部是什么?z.imag获得虚部

3.1.4-数值运算操作符

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

python按8小时计算工时_python_07

python按8小时计算工时_python按8小时计算工时_08

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

python按8小时计算工时_字符串_09

数字类型的关系
类型间可进行混合运算,生成结果为"最宽"类型

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

3.1.5-数值运算函数

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

python按8小时计算工时_进度条_10

python按8小时计算工时_进度条_11


python按8小时计算工时_浮点数_12

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

3.2.1 问题分析

天天向上的力量
基本问题:持续的价值
-一年365天,每天进步1%,累计进步多少呢?
-一年365天,每天退步1%,累计剩下多少呢?1. 013650.99365

需求分析
天天向上的力量
-数学公式可以求解,似乎没必要用程序
-如果是"三天打鱼两天晒网"呢?
-如果是"双休日又不退步"呢?

3.2.2 第一问

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

编写上述代码,并保存为DayDayUpQ1.py文件

python按8小时计算工时_字符串_13

3.2.3 第二问

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

编写上述代码,并保存为DayDayUpQ2.py文件
使用变量的好处:一处修改即可

python按8小时计算工时_python按8小时计算工时_14

3.2.4 第三问

问题3:工作日的力量
-一年365天,一周5个工作日,每天进步1%
-一年365天,一周2个休息日,每天退步1%
-这种工作日的力量,如何呢?
1.01365(数学思维) ➡️ for…in… (计算思维)

#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天的过程抽象+ 自动化

python按8小时计算工时_python_15

3.2.5 第四问

问题4:工作日的努力

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

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

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

python按8小时计算工时_字符串_16

python按8小时计算工时_进度条_17

#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保留字判断条件是否成立
条件成立时循环执行

python按8小时计算工时_python按8小时计算工时_18

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

3.2.6 举一反三

python按8小时计算工时_python_19

python按8小时计算工时_字符串_20

天天向上的力量
-实例虽然仅包含8-12行代码,但包含很多语法元素
-条件循环、计数循环、分支、函数、计算思维
-清楚理解这些代码能够快速入门Python语言

问题的变化和扩展
-工作日模式中,如果休息日不下降呢?
-如果努力每天提高1%,休息时每天下降1‰呢?
-如果工作3天休息1天呢?

问题的变化和扩展
-"三天打鱼,两天晒网"呢?
-"多一份努力"呢?(努力比下降多一点儿)
-"多一点懈怠"呢?(下降比努力多一点儿)

- 3.3 字符串类型及操作

目录:

  • 字符串类型的表示
  • 字符串操作符
  • 字符串处理函数
  • 字符串处理方法
  • 字符串类型的格式化

小结:

  • 正向递增序号、反向递减序号、<字符串>[M:N:K]
  • +、*、in、len()、str()、hex()、oct()、ord()、chr()
  • .lower()、.upper()、.split()、.count()、.replace()
  • .center()、.strip()、.join()、.format()格式化

3.3.1-字符串类型的表示

字符串

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

  • 字符串由一对单引号或一对双引号表示
    "请输入带有符号的温度值: "或者’C’
  • 字符串是字符的有序序列,可以对其中的字符进行索引
    "请"是"请输入带有符号的温度值: "的第0个字符

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

  • 由一对单引号或双引号表示,仅表示单行字符串
    "请输入带有符号的温度值: "或者’C’
  • 由一对三单引号或三双引号表示,可表示多行字符串
    ‘’’ Python
    语言’’’
    Q: 老师老师,三引号不是多行注释吗?

Python语言为何提供2类共4种字符串表示方式?

  • 如果希望在字符串中包含双引号或单引号呢?
    '这里有个双引号(")‘或者"这里有个单引号(’)"
  • 如果希望在字符串中既包括单引号又包括双引号呢?
    ‘’‘这里既有单引号(’)又有双引号(") ‘’’

python按8小时计算工时_浮点数_21

字符串的使用

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

  • 索引:返回字符串中单个字符<字符串>[M]
    "请输入带有符号的温度值: "[0]或者TempStr[-1]
  • 切片:返回字符串中一段字符子串<字符串>[M: N]
    "请输入带有符号的温度值: "[1:3]或者TempStr[0:-1]
字符串切片高级用法

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

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

转义符\

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

3.3.2-字符串操作符

字符串操作符:由0个或多个字符组成的有序字符序列

操作符及使用

描述

x+ y

连接两个字符串x和y

n *x 或x *n

复制n次字符串x

x ins

如果x是s的子串,返回Tr u e,否则返回False

获取星期字符串:

  • 输入:1-7的整数,表示星期几
  • 输出:输入整数对应的星期字符串
  • 例如:输入3,输出星期三
#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])

3.3.3-字符串处理函数

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

python按8小时计算工时_python按8小时计算工时_22

python按8小时计算工时_python按8小时计算工时_23

python按8小时计算工时_python_24

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

一些有趣的例子:

python按8小时计算工时_浮点数_25

3.3.4-字符串处理方法

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

  • "方法"特指.()风格中的函数()
  • 方法本身也是函数,但与有关,.()风格使用
  • 字符串或字符串变量是,存在一些可用方法

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

python按8小时计算工时_字符串_26

python按8小时计算工时_python按8小时计算工时_27

python按8小时计算工时_python_28

3.3.5-字符串类型的格式化

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

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

python按8小时计算工时_浮点数_29

python按8小时计算工时_python按8小时计算工时_30

python按8小时计算工时_进度条_31

python按8小时计算工时_python_32

python按8小时计算工时_python按8小时计算工时_33

- 3.4模块2: time库的使用

3.4.1 time库基本介绍

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

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

time库包括三类函数

  • 时间获取:time() ctime() gmtime()
  • 时间格式化:strftime() strptime()
  • 程序计时:sleep(), perf_counter()

3.4.2 时间获取

python按8小时计算工时_进度条_34

python按8小时计算工时_字符串_35

3.4.3 时间格式化

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

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

python按8小时计算工时_python_36

python按8小时计算工时_python_37

python按8小时计算工时_进度条_38

python按8小时计算工时_字符串_39


python按8小时计算工时_python按8小时计算工时_40

3.4.4 程序计时应用

程序计时:
程序计时应用广泛

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

python按8小时计算工时_进度条_41

python按8小时计算工时_浮点数_42

- 3.5实例4: 文本进度条

3.5.1 问题分析

python按8小时计算工时_python_43

需求分析

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

问题分析

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

python按8小时计算工时_浮点数_44

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)

python按8小时计算工时_字符串_45


IDLE屏蔽了\r功能

python按8小时计算工时_进度条_46

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.perf_counter() - start
	print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')
	time.sleep(0.1)
print("\n"+  "执行结束".center(scale//2,'-'))

python按8小时计算工时_字符串_47

3.5.4 举一反三

计算问题扩展

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

进度条应用

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

python按8小时计算工时_进度条_48

python按8小时计算工时_字符串_49

python按8小时计算工时_进度条_50

作业