【python学习笔记】基本数据类型

基本数据类型


首先复习一下前两次的内容:

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

下面学习本次内容:基本数据类型

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

一、数字类型及操作

1. 整数类型

与数学中整数的概念是一致的,可正可负,没有取值范围限制
函数:pow(x, y) 计算x的y次方

pow(2,100)  #1267650600228229401496703205376

4种进制表示:

  • 十进制:1010,99,-217
  • 二进制,以0b或者0B开头:0b010,-0B101
  • 八进制,以0o或者0O开头:0o123,-0O456
  • 十六进制,以0x或者0X开头:0X78,-0X9a
2. 浮点类型

与数学中实数的概念一致,带有小数点及小数的数字,浮点数取值范围和小数精度都存在限制,但常规计算可以忽略
特点:浮点数间运算存在不确定尾数,不是bug,例:

>>>0.1 + 0.2 
0.30000000000004
>>>0.1 + 0.2 == 0.3
False
>>>round(0.1 + 0.2, 1) == 0.3
True
  • 我们可以使用round(x ,d)函数,对x进行四舍五入,d是小数截取位数

  • 浮点数间运算及比较用round()函数辅助

  • 浮点数可以采用科学计数法表示,以10为基数,格式如下:

    • 使用字母e或E作为幂的符号,以10为基数,格式:< a>e< b> 表示a * 10的b次方
3. 复数类型

与数学中的复数概念是一致的

  • a+bj被称为复数,其中a是实部,b是虚部
  • z.real获得实部,z.imag获得虚部
4. 数值运算操作符
  • 操作符是完成运算的一种符号体系
操作符及使用描述
x + y加,x与y之和
x - y减,x与y之差
x * y乘,x与y之积
x / y除,x与y之商
x // y取整数,x与y之整数商
x % y余数,模运算
x ** y幂运算,x的y次幂
  • 二元操作符有对应的增强运算符
增强操作符及使用描述
x op = y即x = x op y,op 为二元操作符
x+=y 、 x -= y 、 x *=y 等
  • 在python中类型间可进行混合运算,生成结果为“最宽”类型:

     - 三种类型存在一种逐渐“扩展”或“变宽”的关系:整数 -> 浮点数 -> 复数
    
5. 数值运算函数

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

函数及使用描述
abs(x)绝对值,x的绝对值
divmod (x ,y)商余,(x // y, x % y),同时输出商和余数
pow(x , y [ ,z ])幂余,(x**y)% z
roound(x [, d ])四舍五入,d为保留小数位,默认为0
max(x1,x2,x3…,xn)返回最大值
min(x1,x2,x3…,xn)返回最小值
int(x)将x变成整数,舍弃小数部分,不进行四舍五入运算
float(x)将x变成浮点数,增加小数部分
complex(x)将x变成复数,增加虚数部分

实例3:天天向上的力量

1.问题分析

基本问题:持续的价值

  • 一年365天,每天进步1%,累计进步多少呢?
  • 一年365天,每天退步1%,还剩下多少呢?
2. 问题: 1‰的力量
# DayDayUp01.py
dayup = pow(1.001,365)
daydown = pow(0.999,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
3. 问题: 5‰和1%的力量
# DayDayUp02.py
dayfactor = 0.005
dayup = pow(1+dayfactor,365)
daydown = pow(1-dayfactor,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
4. 问题:工作日进步1%,休息日退步1%
# DayDayUp03.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))
5. 问题:工作日的努力

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

#
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))
举一反三

抽象和自动化的思想
问题变化和拓展:

  • 工作日模式中,如果休息日不下降?
  • 每天多一份努力呢?多一份懈怠呢?
  • 三天打鱼两天晒网呢?

二、字符串类型及操作

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

字符串是由0个或多个字符组成的
由2类共4种表示方法:

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

这使得字符串中出现单引号或双引号变得很好处理

字符串的序号:

  • 正向递增序号
  • 反向递减序号

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

  • <字符串>[M:N],M缺失表示至开头,N缺失表示至结尾
  • <字符串>[M:N:K],根据步长 K对字符串切片

字符串的特殊字符:

  • 转义符:\

    • 转义符表达特定字符的本意
    • 转义符形成一些组合,表达一些不可打印的含义,例:“\b”回退,“\n”换行
2.字符串操作
操作符及使用描述
x + y连接两个字符串x和y
n * x复制n次字符串x
x in s如果x是s的子串,返回True,否则返回False

下面看几个例子:

  • 获取星期字符串:
weekStr = "星期一星期二星期三星期四星期五星期六星期日"
weekId = eval(input("请输入星期数字(1-7):"))
pos = (weekId - 1) * 3
print(weekStr[pos: pos+3])
  • 方法二:
weekStr = "一二三四五六日"
weekId = eval(input("请输入星期数字(1-7):"))
print("星期" + weekStr[weekId-1])
3.字符串处理函数

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

函数及使用描述
len(x)长度,返回字符串x的长度
str(x)任意类型x所对应的字符串形式
hex(x)或oct(x)将整数x的十六进制或八进制小写形式字符串
chr(u)u为Unicode编码,返回其对应的字符
ord(x)x为字符,返回其对应的Unicode编码
4.字符串的处理方式

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

  • “方法”特指< 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
5.字符串类型的格式化

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

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

:每一个槽与format中添加的参数相对应,按照对应的顺序添加到对应的槽中
槽内部对格式化的配置方式:

<填充>< 对齐><宽度><,><. 精度><类型>
引导符号用于填充的单个字符<左对齐、>右对齐、^居中槽设定的输出宽度数字的千分分隔符浮点小数精度或字符串最大输出长度整数类型:b,c,d,o,x,X浮点数类型:e,E,f,%

模块2:time库的使用

  • time库的基本情况
  • 时间获取
  • 时间格式化
  • 程序计时应用
1.time库的基本情况

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

import time

  • 计算机时间的表达
  • 提供获取系统时间并格式化输出功能
  • 提供系统及精确计时功能,用于程序性能分析

time库包括三类函数:

  • 时间获取:time()、ctime()、gmtime()
  • 时间格式化:strftime()、strptime()
  • 程序计时:sleep()、perf_counter()
2.时间获取
函数描述
time()获取当前时间戳,即计算机内部时间值,浮点数
ctime()获取当前时间并以易读方式表示返回字符串
gmtime()获取当前时间,表示为计算机可处理的时间格式
3.时间格式化

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

函数描述
strftime(tpl,ts)tpl是格式化模板字符串,用来定义输出效果,ts是计算机内部时间类型变量
strptime(str,tpl)str是字符串的时间值,tpl是格式化模板字符串,用来定义输入效果

时间格式化:

格式化字符串日期/时间说明
%Y年份
%m月份
%B月份名称
%b月份名称缩写
%d日期
%A星期
%a星期缩写
%H小时(24)
%I小时(12)
%p上下午
%M分钟
%S
4.程序计时应用
  • 程序计时指测量起止动作所经历时间的过程
  • 测量时间:perf_counter()指能够记录时间的流逝连续调用求差值
  • 产生时间:sleep(),拟休眠的时间,单位是秒

实例4:文本进度条

1.需求分析:
  • 采用字符串方式打印可以动态变化的进度条
  • 进度条需要能在一行中逐渐变化
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("------执行结束------")

运行结果:
输出效果

3.单行动态刷新

能够在每一行中根据程序的进度不断显示文本进度条

  • 刷新的本质:用后打印的字符覆盖之前的字符
  • 不能换行:print()需要被控制
  • 要能退回:打印后光标退回到之前的位置:\r
#TextProBarV2.py
import time
for i in range(101):
    print("\r{:3}%".format(i),end="")
    time.sleep(0.1)
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, '-'))

运行结果:
执行效果

5.“举一反三”
  • 例如:比较不同算法时间、统计部分程序运行时间
  • 在任何运行时间需要较长的程序中增加进度条
  • 在任何希望提高用户体验的应用程序中增加进度条
  • 进度条是人机交互的纽带之一
  • 进度条的展示效果,有兴趣可以去查看一些对应的函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

眉眼弯弯001

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

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

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

打赏作者

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

抵扣说明:

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

余额充值