Python第二天 基本数据类型

基本数据类型

数字类型

整数

没有取值限制! 这个时python的数据类型的一个特点,整数没有溢出的概念。
所以当使用 pow(x,y) 时,想算多大算多大
python提供了4种进制表示,
十进制:(正常书写),123,456
二进制:(以0b或者0B开头),0b010 ,-0B101
八进制:(以0O或者0o开头 ,注意,是零欧不是零零),0o123,-0o456
十六进制:(以0X 或者0x 开头),0x9a,0X89

浮点数

带有小数点以及小数的的数字,就是浮点数。
浮点数的取值范围和小数精度都存在限制,但常规计算可以忽略
取值范围数量级约 -10^308^ - 10^308^ ,精度数量级10^-16^
精度数量级就是两个小数之间的差别,最多可以到10-16
浮点数之间的运算存在不确定尾数!这不是一个bug,Java也存在,C++也存在
例如0.1+0.2 的结果是 0.300000000004这个是计算机对数据运算的原理造成的。

计算机在表示数字时,使用的是二进制,Python使用的是53位二进制表示小数部分,10进制与2进制没有精准的对等关系,所以0.1是一个无限接近0的一个数,在这里插入图片描述
所以程序执行 0.1 + 0.2 == 0.3 输出位False
所以我们需要round函数,对比两个浮点数是否相等时,要这样写,round(0.1+0.2,1) == 0.3
round 是进行四舍五入的函数,
round(x,d) : 表示对x进行四舍五入,d是小数截取的位数,也就是保留几位小数
不确定位数一般发生在10-16 左右才会产生,所以round方法非常有限

幂的表示
使用e或者E 表示幂数
<底数> e/E <幂数> 例如:3e10 表示的就是310

复数

**只有Python 提供了复数**,python的复数与数学种复数一致

在这里插入图片描述

数值操作运算符
+,- ,* ,/ ,// (整数除), %
这里要说明的是python中的除法,/ 等到的结果是浮点型,所以10 / 3 = 3.33333,如果要获得整数那么就是用 // ,那么10 // 3 = 3
python提供的 x**y ,代表着xy 注意当,y为正数时为幂运算,等同pow(x,y),当y为小数时,就是开方了,例如 10 **0.5 = 根号下10

增强赋值语句,例如:x += y - > x = x+y 其他符号都具备这个功能

不同的数据类型混合运算时,会向上兼容,整数 -》 浮点数 -》 复数

数学运算函数
在这里插入图片描述
在这里插入图片描述
类型转换函数
在这里插入图片描述

练习:天天向上的力量

每天进步一点点,进步1%

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

使用抽象思维编写天天向上的力量

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

工作日向上的力量,周一到周五进步,周六周天休息退步

dayup = 1
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))

使用函数来抽象,并且对比一下,对于工作日向上的人来说,每天要努力多少,才能追赶上每天都进步1%的人呢?

def dayup(fd):
    dayup = 1
    for i in range(365):
        if i % 7 in[0,6]:
            dayup *= 1-0.01
        else:
            dayup *= 1+ fd
    return dayup

dayfactor = 0.01
while dayup(dayfactor) < 37.78:
        dayfactor += 0.001
print("工作日每天努力{:.3f} 才可以超过每天努力1%".format(dayfactor))

这个结果为1.9% 仔细算一笔帐,那么还不如每天进步1%来的轻松。
所以好好学习,天天向上!!!

字符串类型

字符串类型的表示

字符串由"" 或者’’ 表示,这只是对单行字符串的表示
对于多行字符串,还可以使用一对三单引号或者三双双引号来表示,表示多行字符串

Str1 = """ 1
                2
                    3"""
Str2 = '''4
            5
                6'''

这里就值得一说了,前面说过注释就是一对三个单引号,这里三个单引号又能表示多行字符串。为什么呢,因为Python并没有提供真正的注解,只是这个字符串没有被变量所接受,所以它并不会被程序所执行,我们没有办法去引用这个字符串,那么它就相当于就是一个字符串。

这里谈一下为为什么要使用两个引号来使用,如果要输出的字符串中有双引号怎么办??如果要输出的字符中有单引号怎么办???? 所以当我们内部要使用双引号时,外部使用单引号就可以了,内部使用单引号同理。

使用[ ] 来获取指定索引的字符,
切片操作 : [ M : N ],表示从M号下标开始切割字符一直切割到N号下标的前一个字符(左闭右开)
高级用法,M和N 都是可以缺失的。
当M省略时,M默认为0,例如Str[:3] 从0切割到3
当N省略时,默认N为最后一个字符位置+1,也就是从第N个字符到最后一个字符
还有一种用法为 [ M , N . K ],指的是以M为开头,以N-1为结尾,以步进为K 来获取字符,例如:零一二三四五,使用[0:5:2] ,获得的字符就是 : 一三
逆置字符串 :[::-1] ,使用的就是[M,N,K]。
*转义符 : *

在这里插入图片描述

字符串操作符

x + y :连接两个字符串x和y
x * n 或者 n *x :赋值n次字符串x
x in s : 如果x 是 s 的字串,返回True,否则返回False

小练习,获取星期字符串

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

字符串处理函数

len(x) : 返回字符串x 的长度,一个汉字一个符号,都算一个长度
str(x) :任意类型x所对应的字符串形式
hex(x) 或 oct(x) :将整数x准换位 ,十六进制 或者 八进制的小写字符串形式
chr(u) : u为Unicode编码,返回其对应的字符
ord(x) : x为字符,返回其对应的Unicode编码
在这里插入图片描述

字符串处理方法

8个常用的字符串类型方法:
str.lower() 或者 str.upper() : 返回字符串的副本,全部字符的小写或者大写

str.split(sep = None) : 返回一个列表,有str根据sep 分割的部分组成。
例如:”A,B,C".split(",") -> [‘A’,‘B’, ‘C’]

str.count(sub) : 表示在str 中 sub 出现的次数。

str.replace(old,new) : 输出str的副本,将old 字符串,替换为new 字符串。

str.center(width ,[fillchar]) : 字符串str根据宽度width居中,fillchar可选默认为空格,这个的意思是将str直接居中,第一个参数代表宽度,因为居中必须有一个整体的度量才能居中,第二个参数代表填充,这一行居中的字符为str,其他的字符该用什么填充。

str.strip(chars) : 从str中去掉在其左右两侧出现在chars字符串中出现的字符,例如 : “= python=”.strip(" =np")结果为 " ytho "

str.join(iter) : 在iter变量除了最后元素外每个字符后增加一个str,例如: “,”.join(“12345”) -》 “1,2,3,4,5”

字符串类型的格式化

使用 <模板字符串>.format(str1,str2) 来实现
在这里插入图片描述

当然也可以修改参数
在这里插入图片描述

格式控制 : 填充,对齐,宽度,这三个是一个模式,

在这里插入图片描述

= 代表要填充的字符,
^ 代表居中
20 代表宽度
同样我们也可以省略
在这里插入图片描述

具体的数字有关:<,> 数字的千位分割符,只有在供人阅读的时候使用,

类型 b :二进制形式
c :字符形式,也就是Unicode编码形式
d : 10进制格式
o:8进制格式
x:16进制格式
X:16进制大写格式

在这里插入图片描述
对于浮点数类型来说,
e:使用小写e,科学表示法
E : 使用大写E 科学表示法
f:使用浮点小数表示法
% :使用百分比的表示法

在这里插入图片描述

time库的使用

time库是Python 中处理时间的标准库,它可以提供获取系统时间,并格式化输出的功能,提供系统级精确计时功能,用于程序性能分析

时间获取

time.time() : 获取当前的时间戳,表示从1970 年1月1日 0 点开始经过秒数

time.ctime() : 获取当前时间并以易读的方式返回字符串,

import time as t
print(t.ctime())

结果为 :Fri May 22 16:28:34 2020
格式为 星期 月 日 时:分:秒 年

time.gmtime() : 获取当前时间,表示为计算机可以处理的时间格式
输出为:
在这里插入图片描述
可以在编码时直接 . 引用获取 想要操作的单位。
在这里插入图片描述

时间格式化

类似字符串的格式化,使用展示模板来规定输出

strftime(tpl, ts) : tpl 表示格式化的模板字符串,用来定义输出效果,ts是计算机内部时间类型变量。

举个例子

import time 
t = time.gmtime()
time.strftime("%Y-%m-%d-%H:%M:%S",t)

结果为 : 2020-05-22-08:39:23

在这里插入图片描述
在这里插入图片描述
既然时间变量可以转为字符串,那么字符串同样可以转时间变量。

time 库中提供了 time.strptime(timeStr,str) : timeStr代表了时间字符串,str 代表了输入的时间格式

str = time.strptime(timeStr,"%Y-%m-%d-%H:%M:%S")
print(str)

结果:在这里插入图片描述

程序计时应用

测量时间 : perf_counter() :
获取时间差值

import time
start = time.perf_counter()
end = time.perf_counter()
res = end - start;

结果是一个以秒为单位的一个浮点数。

产生时间函数 : sleep(s) : 让程序休眠多少秒,s是一个以秒为单位的整型

练习:文本进度条

实现一个文本的进度条,简单的文本进度我们可以这样来做。每0.1秒完成10%。使用sleep函数进行休眠0.1秒,打印一行进度条

#TextProBarV1
import time
#一行进度条长10个单位
scale = 10
Stringstart = "执行开始"
Stringend = "执行结束"
#刚学完字符串的格式化输出就可以使用一下 长度为10的字符串,
# 使用Stringstart居中,左右使用- 填充
print("{:-^16}".format(Stringstart))
for i in range(scale+1):
    #由i 个* 号组成的字符串a
    a = '*' * i
    #由scale - i 个 . 组成的字符串b
    b = '.' * (scale-i)
    #计算当前进度,i/scale 获得当前的百分比,*100 获取对应的证书
    c = (i/scale)*100
    #采用浮点小数法表示,居中,宽度为3,保留0位小数
   # print("{:=3.0f}%[{}->{}]".format(c, a, b))
   # print("{:<3.0f}%[{}->{}]".format(c, a, b))
    print("{:>3.0f}%[{}->{}]".format(c,a,b))
    #系统睡眠0.1秒
    time.sleep(0.1)
print("{:-^16}".format(Stringend))

结果:
在这里插入图片描述

再进一步,单行动态刷新,所以我们第一点,不能换行,第二点,必须把光标回退到原点

所以我们来再进一步

import time
#从0%打印100%
for i in range(101):
    #输出时,首先先将光标回退到原点, \r
    #宽度为3
    # end=”“ 代表输出之后,要添加的操作,end=”“ 意味着不做任何操作,
    # end 在 print 中默认为换行 \n
    print("\r{:3}%".format(i),end="")
    time.sleep(0.1)

此时程序运行的结果就是动态增加的了。

import time
scale = 50
#使用center 进行居中,左右用 - 进行填充
print("执行开始".center(scale//2,'-'))
#使用字符串格式化进行填充
#print("{:-^25}".format("执行开始"))
#获取当前时间
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"+"{:-^25}".format("执行结束"))

课后练习:

在这里插入图片描述

#获取输入之后去除引号
str1 = eval(input())
#获取平方根
res = pow(str1,0.5)
#+ 填补 , > 右对齐, 宽度30, .3f 保留三位小数浮点显示
print("{:+>30.3f}".format(res))

在这里插入图片描述

list1 = input().split("-")
print("{}+{}".format(list1[0],list1[-1]))

猜你喜欢

转载自blog.csdn.net/weixin_44916741/article/details/106268801