Python语言程序设计第3周笔记(第3章 基本数据类型)

文章介绍了Python中的数字类型,包括整数、浮点数和复数的运算操作及函数;字符串类型及其表示方法、操作符、处理函数和格式化技巧;还详细讲解了time库的使用,如获取时间、时间格式化和程序计时。此外,文中通过实例展示了如何创建文本进度条,以提升用户交互体验。
摘要由CSDN通过智能技术生成

3.1 数字类型及操作

  1. 整数类型
  • 可正可负,没有取值范围限制
  • pow(x,y)函数:计算 xy,想算多大算多大
  • 4种进制表示形式
    • 十进制:1010, 99, -217
    • 二进制,以0b或0B开头:0b010, -0B101
    • 八进制,以0o或0O开头:0o123, -0O456
    • 十六进制,以0x或0X开头:0x9a, -0X89
  1. 浮点数类型
  • 带有小数点及小数的数字
  • 浮点数取值范围和小数精度都存在限制,但常规计算可忽略
  • 取值范围数量级约-10307至10308,精度数量级10-16
  • 浮点数间运算存在不确定尾数,不是bug
    • round(x, d):对x四舍五入,d是小数截取位数
    • 浮点数间运算与比较用round()函数辅助
    • 不确定尾数一般发生在10-16左右,round()十分有效
  • 浮点数可以采用科学计数法表示
    • 使用字母e或E作为幂的符号,以10为基数,格式如下:< a > e < b > 表示 a*10b
    • 例如:4.3e-3 值为0.0043 9.6E5 值为960000.0
  1. 复数类型
  • a+bj被称为复数,其中,a是实部,b是虚部
  • 复数实例:z = (1.23e-4)+(5.6e+89)j
    • 实部是什么? z.real 获得实部
    • 虚部是什么? z.imag 获得虚部
  1. 数值运算操作符:操作符是完成运算的一种符号体系
操作符及使用描述
x + y加,x与y之和
x - y减,x与y之差
x * y乘,x与y之积
x / y除,x与y之商 10/3结果是3.3333333333333335
x // y整数除,x与y之整数商 10//3结果是3
+ xx本身
- xx的负值
x % y余数,模运算 10%3结果是1
x ** y幂运算,x的y次幂,xy
特:当y是小数时,开方运算10**0.5结果是 10 2 \sqrt[2]{10} 210
  • 二元操作符有对应的增强赋值操作符
增强操作符及使用描述
x op= y即 x = x op y,其中,op为二元操作符
x += y
x -= y
x *= y
x /= y
x //= y
x %= y
x **= y
  • 数字类型的关系:类型间可进行混合运算,生成结果为"最宽"类型
    • 三种类型存在一种逐渐"扩展"或"变宽"的关系:整数 -> 浮点数 -> 复数
  1. 数值运算函数:一些以函数形式提供的数值运算功能
函数及使用描述
abs(x)绝对值,x的绝对值
divmod(x,y)商余,(x//y, x%y),同时输出商和余数
eg: divmod(10, 3) 结果为 (3, 1)
pow(x, y[, z])幂余,(x**y)%z,[…]表示参数z可省略
eg: pow(3, pow(3, 99), 10000) 结果为 4587
round(x[, d])四舍五入,d是保留小数位数,默认值为0
eg: round(-10.123, 2) 结果为 -10.12
max(x1,x2, … ,xn)最大值,返回x1,x2, … ,xn中的最大值,n不限
eg: max(1, 9, 5, 4, 3) 结果为 9
min(x1,x2, … ,xn)最小值,返回x1,x2, … ,xn中的最小值,n不限
eg: min(1, 9, 5, 4, 3) 结果为 1
int(x)将x变成整数,舍弃小数部分
eg: int(123.45) 结果为123; int(“123”) 结果为123
float(x)将x变成浮点数,增加小数部分
eg: float(12) 结果为12.0; float(“1.23”) 结果为1.23
complex(x)将x变成复数,增加虚数部分
eg: complex(4) 结果为 4 + 0j

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

  1. 1‰的力量
  • 一年365天,每天进步1‰,累计进步多少呢?1.001365 = 1.44
  • 一年365天,每天退步1‰,累计剩下多少呢?0.999365 = 0.69
#DayDayUpQ1.py
dayup = pow(1.001, 365)
daydown = pow(0.999, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))
  1. 5‰和1%的力量
  • 一年365天,每天进步5‰或1%,累计进步多少呢?1.005365 = 6.17,1.01365 = 37.78
  • 一年365天,每天退步5‰或1%,累计剩下多少呢?0.995365 = 0.16,0.99365 = 0.03
#DayDayUpQ2.py
dayfactor = 0.005#使用变量的好处:一处修改即可
dayup = pow(1 + dayfactor, 365)
daydown = pow(1 - dayfactor, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))
  1. 工作日的力量
  • 一年365天,一周5个工作日,每天进步1%
  • 一年365天,一周2个休息日,每天退步1%
  • 这种工作日的力量,如何呢?
    1.01365 (数学思维) → for…in…(计算思维)
#DayDayUp3.py
dayup = 1.0
dayfactor = 0.01
for i in range(365):
    if i % 7 in [0,6]:#设置休息日为 i = 0 或者 i = 6
        dayup = dayup * (1 - dayfactor)
    else:
        dayup = dayup * (1 + dayfactor)
print('工作日的力量:{:.2f}'.format(dayup))
>>> (运行结果) 
工作日的力量:4.63
#尽管工作日提高1%,但总体效果介于 1‰ 和 5‰ 的力量之间
  1. 工作日的努力
  • 工作日模式要努力到什么水平,才能与每天努力1%一样?
  • A君: 一年365天,每天进步1%,不停歇
  • B君: 一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?
    for …in…(计算思维) → def…while… ("笨办法"试错)
    在这里插入图片描述
#DayDayUpQ4.py
def dayUP(df):#def保留字用于定义函数
    dayup = 1
    for i in range(365):
        if i % 7 in [0,6]:#设置休息日为 i = 0 或者 i = 6
            dayup = dayup * (1 - 0.01)
        else:
            dayup = dayup * (1 + df)
    return dayup
dayfactor = 0.01
while dayUP(dayfactor) < 37.78:#37.78是每天增加1%的工作量365天后的成果
    dayfactor += 0.001
print('工作日的努力参数是:{:.3f}'.format(dayfactor))
>>> (运行结果) 
工作日的努力参数是:0.019
#工作日模式,每天要努力到1.9%,相当于365模式每天1%的效果!
  1. GRIT:perseverance and passion for long-term goals
  • GRIT,坚毅,对长期目标的持续激情及持久耐力
  1. 举一反三
  • 问题的变化和扩展

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

    • "三天打鱼,两天晒网"呢?
    • "多一份努力"呢? (努力比下降多一点儿)
    • "多一点懈怠"呢?(下降比努力多一点儿)

3.3 字符串类型及操作

  1. 字符串类型的表示
  • 字符串:由0个或多个字符组成的有序字符序列
  • 字符串由一对单引号或一对双引号表示
  • 字符串是字符的有序序列,可以对其中的字符进行索引
  • 字符串有2类共4种表示方法
    • 由一对单引号或双引号表示,仅表示单行字符串
    • 由一对三单引号或三双引号表示,可表示多行字符串
    • 如果希望在字符串中包含双引号或单引号呢?
    • 如果希望在字符串中既包括单引号又包括双引号呢?
'这里有个双引号(")' 或者 "这里有个单引号(')" 
''' 这里既有单引号(')
	又有双引号 (")  '''

在这里插入图片描述

  • 使用[ ]获取字符串中一个或多个字符
    • 索引:返回字符串中单个字符:<字符串>[M]
    • 切片:返回字符串中一段字符子串:<字符串>[M:N]
      • 根据步长对字符串切片,M缺失表示至开头,N缺失表示至结尾:<字符串>[M:N:K]
"零一二三四五六七八九十"[1:8:2]
#"一三五七"
"零一二三四五六七八九十"[::-1]
#"十九八七六五四三二一零"
  • 转义符\:表达特定字符的本意
  • 转义符形成一些组合,表达一些不可打印的含义
"这里有个双引号(\")"
"\b"回退
"\n"换行(光标移动到下行首)
"\r"回车(光标移动到本行首)
  1. 字符串操作符
操作符及使用描述
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("请输入星期数字(1-7):"))
pos = (weekId - 1) * 3
print(weekStr[pos: pos+3])
#WeekNamePrintV2.py
weekStr = "一二三四五六日"
weekId = eval(input("请输入星期数字(1-7):"))
print("星期" + weekStr[weekId-1])
  1. 字符串处理函数:一些以函数形式提供的字符串处理功能
函数及使用描述
len(x)长度,返回字符串x的长度
str(x)任意类型x所对应的字符串形式
hex(x) 或 oct(x)整数x的十六进制或八进制小写形式字符串
chr(u)u为Unicode编码,返回其对应的字符
ord(x)x为字符,返回其对应的Unicode编码
len("一二三456")
#6
str(1.23)
#"1.23"
str([1,2])
#"[1,2]"
hex(425)
#"0x1a9"
oct(425)
#"0o651" 
  • Unicode编码
    • 统一字符编码,即覆盖几乎所有字符的编码方式
    • 从0到1114111(0x10FFFF)空间,每个编码对应一个字符
" 1 + 1 = 2 " + chr(10004)
#' 1 + 1 = 2 ✔' 
"这个字符♉的Unicode值是:" + str(ord("♉"))
#这个字符♉的Unicode值是:9801 
for i in range(12):
   print(chr(9800 + i), end="")
#♈♉♊♋♌♍♎♏♐♑♒♓
  1. 字符串处理方法
  • “方法”在编程中是一个专有名词,特指<a>.<b>()风格中的函数<b>(),方法本身也是函数,但与<a>有关,<a>.<b>()风格使用,字符串及变量也是<a>,存在一些方法
方法及使用描述
str.lower() 或 str.upper()返回字符串的副本,全部字符小写/大写
str.split(sep=None)返回一个列表,由str根据sep被分割的部分组成
str.count(sub)返回子串sub在str中出现的次数
str.replace(old, new)返回字符串str副本,所有old子串被替换为new
str.center(width[, fillchar])字符串str根据宽度width居中,fillchar可选
str.strip(chars)从str中去掉在其左侧和右侧chars中列出的字符
str.join(iter)在iter变量除最后元素外每个元素后增加一个str,主要用于字符串分隔等
"AbCdEfGh".lower()
#"abcdefgh"
"A,B,C".split(",")
#['A','B','C']
"an apple a day".count("a")
#4
"python".replace("n","n123.io")
#python123.io
"python".center(20, "=")
#'=======python======='
"= python=".strip(" =np)
#"ytho"
",".join("12345")
#"1,2,3,4,5"
#主要用于字符串分隔等
  1. 字符串类型的格式化
  • 格式化是对字符串进行格式表达的方式
  • 字符串格式化使用.format()方法:<模板字符串>.format(<逗号分隔的参数>)
  • 槽:占位信息符,使用"{}"来表示 ,只在字符串中有用
  • 槽内部对于格式化的控制方法:{<参数序号>:<格式控制格式>}
:<填充><对齐><宽度><,><.精度><类型>
引导符号用于填充的单个字符<左对齐
>右对齐
^居中对齐
槽设定的输出宽度数字的千位分隔符浮点数小数精度
字符串最大输出长度
整数类型
b,c(字符形式,unicode编码),d,o,x,X(大写的16进制)
浮点数类型
e,E(大写的科学计数法),f(非科学计数法),%
"{}:计算机{}的CPU占用率为{}%".format("2018-10-10", "C", 10)
👆(0)    👆(1)       👆(2)      👆(0)       👆(1)👆(2---------→ 字符串中槽{ }的默认顺序    ---------format()函数中的参数顺序
"{0:=^20}".format("PYTHON")
#'=======PYTHON======='
"{0:*>20}".format("BIT")
#'*****************BIT'
"{:10}".format("BIT")
#'BIT       '
"{0:,.2f}".format(13245.6789)
#'13,245.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%'

3.4 模块2: time库的使用

  1. time库基本介绍
  • time库是Python中处理时间的标准库
    • 计算机时间的表达
    • 提供获取系统时间并格式化输出功能
    • 提供系统级精确计时功能,用于程序性能分析
  • time库包括三类函数
    • 时间获取:time(),ctime(),gmtime()
    • 时间格式化:strftime(),strptime()
    • 程序计时:sleep(),perf_counter()
import time
time.<b>()
  1. 时间获取
函数描述
time()获取当前时间戳,即计算机内部时间值,浮点数(1970/1/1 0:00-当前)
ctime()获取当前时间并以易读方式表示,返回字符串
gmtime()获取当前时间,表示为计算机可处理的时间格式,struct_time格式
import time
time.time()
#1678954472.5733814
time.ctime()
#'Thu Mar 16 16:28:02 2023'
time.gmtime()
#time.struct_time(tm_year=2023, tm_mon=3, tm_mday=16, tm_hour=8, tm_min=28, tm_sec=16, tm_wday=3, tm_yday=75, tm_isdst=0)
  1. 时间格式化
  • 格式化:类似字符串格式化,需要有展示模板
  • 展示模板由特定的格式化控制符组成
  • strftime()方法
函数描述
strftime(tpl, ts)tpl是格式化模板字符串,用来定义输出效果
ts是计算机内部事件类型变量
strptime(str, tpl)str是字符串形式的时间值
tpl是格式化模板字符串,用来定义输入效果
格式化字符串日期/时间说明值范围和实例
%Y年份0000~9999,例如:1900
%m月份01~12,例如:10
%B月份名称January~December,例如:April
%b月份名称缩写Jan~Dec,例如:Apr
%d日期01~31,例如:25
%A星期Monday~Sunday,例如:Wednesday
%a星期缩写Mon~Sun,例如:Wed
%H小时(24h制)00~23,例如:12
%I小时(24h制)01~12,例如:7
%p上/下午AM,PM,例如:PM
%M分钟00~59,例如:26
%S00~59,例如:26
import time
t = time.gmtime()
time.strftime("%Y-%m-%d %H:%M:%S", t)
#'2023-03-16 09:01:36'
timeStr = '2023-03-16 09:01:36'
#timeStr是个字符串
time.strptime(timeStr, "%Y-%m-%d %H:%M:%S")
#time.struct_time(tm_year=2023, tm_mon=3, tm_mday=16, tm_hour=9, tm_min=1, tm_sec=36, tm_wday=3, tm_yday=75, tm_isdst=-1)
  1. 程序计时应用
  • 程序计时:测量起止动作所经历的时间的过程
函数用途描述
perf_counter()测量时间返回一个CPU级别的精确时间计数值,单位为秒(s)
由于这个计数值起点不确定,连续调用差值才有意义
sleep()产生时间s是拟休眠的时间,单位是秒(s) ,可以是浮点数
import time
start = time.perf_counter()
end = time.perf_counter()
end - start
#10.42554039999959
def wait():
	time.sleep(3.3)
wait()
#程序将等待3.3s后再退出

3.5 实例4: 文本进度条

  1. “文本进度条”问题分析
  • 文本进度条
    • 采用字符串方式打印可以动态变化的文本进度条
    • 进度条需要能在一行中逐渐变化
    • 文本进度条的变化时间:采用sleep()模拟一个持续的进度
  1. “文本进度条”简单的开始
#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("------执行结束------")
  1. “文本进度条”单行动态刷新
  • 刷新的本质:用后打印的字符覆盖之前的字符
  • 不能换行:print()需要被控制
  • 要能回退:打印后光标退回到之前的位置\r
#TextProBarV2.py
import time
for i in range(101):
	print("\r{:3}%".format(i), end = "")	
#\r:打印字符串之前,能够使光标退回到当前行的行首
#end:改变每一次print输出最后增加的信息
	time.sleep(0.1)
  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), end = "")
	time.sleep(0.1)
print("\n" + "执行结束".center(scale//2, "-"))
  1. “文本进度条”举一反三
  • 计算问题扩展
    • 文本进度条程序使用了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)

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

清梦daydream

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

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

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

打赏作者

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

抵扣说明:

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

余额充值