Python第二天 基本数据类型

  • Post author:
  • Post category: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 表示的就是3

10



复数

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

在这里插入图片描述


数值操作运算符


+,- ,* ,/ ,

// (整数除)

, %

这里要说明的是python中的除法,/ 等到的结果是浮点型,所以10 / 3 = 3.33333,如果要获得整数那么就是用 // ,那么10 // 3 = 3

python提供的 x**y ,代表着x

y

注意当,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]))



版权声明:本文为weixin_44916741原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。