Python学习笔记(三)基本数据类型

一、数字类型及操作

(1)整数类型

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

(2)浮点类型

  • 与数学中实数概念一致
  • 带有小数点及小数的数字
  • 浮点数取值范围和小数精度都存在限制,但常规计算可以忽略
  • 取值范围数量级约 − 1 0 308 -10^{308} 10308 1 0 308 10^{308} 10308,精度数量级 1 0 − 16 10^{-16} 1016
  • 注意:浮点数间运算存在不确定尾数,不是bug
//==”是一个判断是否相等的运算符
0.1+0.2==0.3
//由于浮点数存在不确定尾数,所以结果为false
False

//round(x,d):对x四舍五入,d是小数截取位数
//在浮点数间运算存在不确定尾数
round(0.1+0.2,1)==0.3
True
  • 使用字母e或E作为幂的符号,以10为基数,格式如下:
    • < a > e < b > 表示a* 1 0 b 10^{b} 10b

(3)复数类型complex

  • 与数学中复数的概念一直
  • 如果 x 2 x^{2} x2=-1,那么x的值是什么?
  • 定义j= ( − 1 ) \sqrt{(-1)} (1) ,以此为基础,构建数学体系
  • a+bj被称为复数,其中,a是实部,b是虚部
  • 复数可以分离实数部分和虚数部分
    • 复数.real
    • 复数.imag
  • 复数的共轭
    • 复数.conjugate()
//复数实例
z=1+5j

(4)数值运算操作符

  • 操作符是完成运算的一种符号
操作符及使用描述
x+y加,x与y之和
x-y减,x与y之差
x*y乘,x与y之积
x/y除,x与y之商 10/3结果是3.3333333
x//y整数除,x与y之整数商 10/3结果是3
+xx本身
-yy的负值
x%y余数,模运算 10%3结果是1
x**y幂运算,x的y次幂, x y x^{y} xy .当y是小数时,开方运算 10**0.5结果是 10 \sqrt{10} 10
x op=y即 x=x op y,其中,op为二元操作符
  • 类型之间可进行混合运算,生成结果为“最宽”类型

    • 三种类型存在一种逐渐“扩展”或“变宽”的关系:
      • 整数–>浮点数–>复数
    • 例如: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,[…]表示参数可省略 pow(3,pow(3,99),10000)结果为4587
round(x[,d])四舍五入,d是保留小数位数,默认值为0
max(x1,x2,x3…,xn)最大值,返回x1,x2,x3…,xn中的最大值,n不限
min(x1,x2,x3…,xn)最小值,返回x1,x2,x3…,xn中的最小值,n不限
int(x)将x变成整数,舍弃小数部分
complex(x)将x变成复数

(5)布尔型

  • 整形的子类
  • 仅有两个值:True、False
  • 本质上是用整形的1、0分别存储的
>>>x=Treu
>>>int(x)
1

(6)字符串运算符

  • 原始字符串操作符(r/R):
    • 用于一些不希望转移字符起作用的地方
  • 所有的字符串都是Unicode字符串

二、实例:天天向上的力量

(1)基本问题1:持续的价值

  • 一年365天,每天进步1%,累计进步多少呢?
    • 1.0 1 365 1.01^{365} 1.01365
  • 一年365天,每天退步1%,累计剩下多少呢?
    • 0.99 9 365 0.999^{365} 0.999365

(2)需求分析

  • 数学公式可以求解,似乎没有必要用程序
  • 如果是“三天打鱼两天晒网”?
  • 如果是“双休日又不退步”?

(3)代码

dayup = pow(1.01,365);
daydown = pow(0.999,365);
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))

(4)基本问题2:千分之五和百分之一的力量

  • 一年365天,每天进步千分之五或1%,累计进步多少呢?
    • 1.00 5 365 1.005^{365} 1.005365 1.0 1 365 1.01^{365} 1.01365
  • 一年365天,每天退步千分之五或者1%,累计剩下多少呢?
    • 0.99 5 365 0.995^{365} 0.995365 0.9 9 365 0.99^{365} 0.99365

(5)代码

dayfactor = 0.005
dayup = pow(1+dayfactor,365)
daydown = pow(1-dayfactor,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))

(6)基本问题3:工作日的力量

  • 一年365天,一周5个工作日,每天进步1%
  • 一年365天,一周2个休息日,每天退步1%
  • 这种工作日的力量如何呢?

(7)代码

dayup=1.0
dayfactor = 0.01
for i in range(365):
	if i % 7 in [6,0]:
		dayup*=(1-dayfactor)
	else:
		dayup *= (1+dayfactor)
print("工作日的力量:{:.2f}".format(dayup))

(8)基本问题4:工作日的努力

  • 工作日模式要努力到什么水平,才能与每天努力1%一样?
  • A君:
    • 一年365天,每天进步1%,不停歇
    • 一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?

(9)代码

//定义一个函数
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.01
print("工作日的努力参数是:{:.3f}".format(dayfactor))

三、字符串类型及操作

(1)字符串类型的表示(两类四种)

  • 字符串由一堆单引号或一堆双引号表示
    • “请输入带有符号的温度值:”或者‘C’
  • 字符串是字符的有序数列,可以对其中的字符进行索引
    • “请”是“请输入带有符号的温度值:”的第0个字符
  • 字符串也可以由三单引号多行表示:
'''请输入
		    信息'''
  • 如果希望在字符串中包含双引号或单引号呢?
    • '这里有个双引号(")‘或者"这里有个单引号(’)"
  • 如果希望在字符串中既包含双引号有包括单引号呢?
    • ‘’‘这里既有单引号(’)又有双引号(")’’’

(2)字符串序号

  • 由左到右
    • 0 1 2 3 4 5 6 …
  • 由右到左
    • -1 -2 -3 -4 -5 -6…

(3)字符串的使用

  • 使用[]获取字符串中一个或多个字符
    • 索引:返回字符串中单个字符 <字符串>[M]
      • “请输入带有符号的温度值:”[0] 或者 TempStr[-1]
    • 切片:返回字符串中一段字符串字符 <字符串>[M:N]
      • “请输入带有符号的温度值:”[1:3]或者TempStr[0:-1]
      • 使用[M:N:K]根据步长对字符串切片
        • <字符串>[M:N],M缺失表示至开头,N缺失表示至结尾
          • “0一二三四五六七八九十”[:3]结果是"0一二"
        • <字符串>[M:N:K],根据步长K对字符串切片
          • “0一二三四五六七八九十”[1:8:2]结果是"一三五七"
          • “0一二三四五六七八九十”[::-1]结果是"十九八七六五四三二一0"
    • 字符串的特殊字符
      • 转义符\
        • 转义符表达特定字符的本意
          • “这里有个双引号(”)“结果为 这里有个双引符(”)
          • 转义符形成一些组合,表达一些不可打印的含义
          • "\b"回退 "\n"换行(光标移动到下行首) "\r"回车(光标移动到本行首)

(4)字符串操作符

  • 由0个或多个字符组成的有序字符序列
操作符及使用描述
x + y连续两个字符串x和y
n * x 或 x * n复制n次字符串x
x in s如果x是s的子串,返回True,否则返回False

(5)字符串处理函数

  • 一些以函数形式提供的字符串处理功能
函数及使用描述
len(x)长度,返回字符串x的长度 len(“一二三456”)结果为6
str(x)任意类型x所对应的字符串形式 str(1.23)结果为"1.23" str([1,2])结果为"[1,2]"
hex(x)或oct(x)整数x的十六进制或八进制小写形式字符串 hex(425)结果为"0x1a9" cot(425)结果为"0o651"
chr(u)u为Unicode编码,返回其对应的字符
ord(x)x为字符,返回其对应的Unicode编码

(6)字符串处理方法

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

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

(7)Python中常用的字符串处理方法

  • 一些以方法形式提供的字符串处理功能
方法及使用描述
str.lower()或strupper()返回字符串的副本,全部字符小写/大写 “AbCdEfG”.lower()结果为"abcdefg"
str.split(sep=Npne)返回一个列表,由str根据sep被分隔的部分组成"A,B,C".split(",")结果为[‘A’,‘B’,‘C’]
str.count(sub)返回子串sub在str中出现的次数 “an appple 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中去掉在其左侧和右侧chars中列出的字符"= Python= “.strip(” =np")结果为"ytho"
str.join(iter)在iter变量除最后元素外每个元素后增加一个str",".join(“123456”) 结果为"1,2,3,4,5" #主要用于字符串分隔等

(8)字符串类型的格式化

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

    • 字符串格式化使用.format()方法,用法如下:
      • <模板字符串>.format(<逗号分隔符的参数>)
      • {}称为槽。默认字符串中槽的顺序和format()中参数的顺序一一对应
    • 槽内部对格式化的配置方式
      • {<参数序号>:<格式控制标记>}
  • format()方法的格式控制

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

四、time库的使用

(1)time库是Python中处理时间的标准库

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

(2)time库包括三类函数

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

(3)时间获取

函数描述
time()获取当前时间戳,即计算机内部时间值,浮点数
ctime()获取当前时间并以易读方式表示,返回字符串
gmtime()获取当前时间,表示为计算机可处理的时间格式

(4)时间格式化

  • 将时间以合理的方式展示出来
    • 格式化:类似字符串格式化,需要有展示模板
    • 展示模板由特定的格式化控制符组成
    • 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,例如:Wedesday
%a星期缩写Mon~Sun,例如:Wed
%H小时(24h制)00~23,例如:12
%I小时(12h制)01~12,例如:7
%p上午/下午AM,PM,例如:PM
%M分钟00~59,例如:12
%S00~59,例如:12

(5)程序计时

  • 程序计时应用广泛
    • 程序计时指测量起止动作所经历时间的过程
    • 测量时间:perf_count()
    • 产生时间:sleep()
函数描述
perf_count()返回一个CPU级别的精确时间计数值,单位为秒 由于这个计数值起点不确定,连续调用差值才有意义
sleep(s)s为休眠的时间,单位是秒,可以是浮点数。

五、文本进度条(实例)

(1)需求分析

  • 采用字符串方式打印可以动态变化的文本进度条
  • 进度条需要能在一行中逐渐变化
  • 如何获得文本进度条的变化时间?
    • 采用sleep()模拟一个持续的进度

(2)简单开始

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
import time 
for i in range(101):
	//end能改变print输出最后增加的信息
	//\r使光标退回到当前行的行首
	print("\r{:3}%".format(i),end="")
	time.sleep(0.1)

(4)完整效果

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 = timeperf_counter()-start
	print("\r{:^3.0f}%[{} - > {}]{:.2f}s".format(c,a,b,dur),end='')
	time.sleep(0.1)
print("\n"+"执行结束".center(scale//2,'-'))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值