【Python】02-基本数据类型-数值&字符串&日期时间处理【cyairhp】

目录

一、库的引入

二、 数值类型

1、整数 - int

2、浮点型 - float

3、复数型 - complex

4、数值类型的关系

5、数值类型的操作

三、math库

1、两种导入方式

2、常用函数

3、其它函数

四、应用案例

五、字符串

1、字符串类型及其操作

2、字符串的常用方法

3、字符串类型的格式化

4、文本进度条

(1)简单的文本进度条

(2)单行动态刷新的文本进度条

(3)带刷新的文本进度条

(4)关于进度条的拓展

六、时间转换

1、time模块

(1) 获取当前时间

(2)时间转换及格式化

2、datetime模块

3、应用

(1)time.perf_counter()

(2)datetime


一、库的引入


 

# 蟒蛇绘制实例
import turtle
turtle.setup(650, 350,200,200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor("purple")
turtle.seth(-40)
for i in range(4):
    turtle.circle(40, 80)
    turtle.circle(-40, 80)
turtle.circle(40, 80/2)
turtle.fd(40)
turtle.circle(16, 180)
turtle.fd(40 * 2/3)

 

1、导入函数库的方法

  • 格式1:   import   <库名>     例如:import   turtle

                       调用格式:  <库名>.<函数名>   例: turtle.fd(100)

  • 格式2:    from  <库名>   import <函数名>     

                  或   from  <库名>   import *

                  调用函数不需要<库名>,直接使用<函数名> , 如:  

from turtle import *

fd(100)
  • 格式3:   import   <库名>   as  <别名>  例如:import   turtle as tu

内置标准库:

库名作用
math数学运算
os用来处理文件和目录
re正则表达式
random用于生成随机数
time时间模块
datetime日期和时间处理
sys提供一系列有关Python运行环境的变量和函数
············

 

二、 数值类型


        Python语言包括三种数字类型:int、float、complex

1、整数 - int

  • 与数学中的整数概念一致,如1001、-250、0x9a、0x89
  • 理论上没有取值范围限制
  • 整数类型共有4种进制表示:十进制、二进制、八进制和十六进制,默认情况下,整数采用十进制。
进制种类引导符号描述
十进制默认情况,如1001、-250
二进制0b 或 0B由字符0和1组成,如0b101、0B101
八进制0o 或 0O由字符0到7组成,如0o711、0O711
十六进制0x 或 0X由字符0和9、a到f、A到F组成,如0xABC

2、浮点型 - float

  • 带有小数点及小数的数字;数值范围存在限制,小数精度也存在限制
  • 浮点数最长可输出16个数字(计算机只能提供15个数字的准确性,最后一位由计算机根据二进制计算结果确定,存在误差)

       

  • 浮点数有两种表示方法:十进制表示和科学计数法,如:

         0.0,-77.,-2.17,96e4,4.3e-3,9.6E5

         科学计数法使用字母e或E作为幂的符号,以10为基数,如9.6E5也可表示为9.6E+5,其值为960000.0

拓展用法:标准库decimal

3、复数型 - complex

  • 与数学中的复数概念一致, z = a + bj, a是实数部分,b是虚数部分,a和b都是浮点类型,虚数部分用j或者J标识
  • 可以用z.real和z.imag分别获得它的实数部分和虚数部分

4、数值类型的关系

  • 三种类型可以相互转换

       函数:int(),float(),complex()

  • type(x),返回x的类型,适用于所有类型的判断

5、数值类型的操作

(1)数值运算

  • max()、min()、sum()、round()、

        

(2)内置函数:不用引入库,可直接使用的函数,

         详见 https://www.runoob.com/python/python-built-in-functions.html

 

常用函数:

  • input()、raw_input()、eval()、print()
  • int()、float()、str()、type()
  • len()、min()、max()、sum()、sorted()、range()、round()

 

三、math库


  • math库是Python提供的内置数学类函数库
  • math库不支持复数类型,提供了4个数学常数和44个函数(4类)

1、两种导入方式

  •                          

2、常用函数

函数数学表示描述
math.fsum([x,y,....])x+y+ ···浮点数精确求和
math.fabs(x)|x|x的绝对值
math.fmod(x,y)x%yx与y的模
math.ceil(x)\left \lceil x \right \rceil向上取整,返回不小于x的最小整数
math.floor(x)\left \lfloor x \right \rfloor向下取整,返回不大于x的最大整数
math.trunc(x) 返回x的整数部分
math.pow(x,y)x^{y}x的y次幂

                               

 

3、其它函数

  • 四个数学常数
  • 16个数值表示函数
  • 8个幂对数函数

  • 16个三角对数函数

  • 4个高等特殊函数

四、应用案例


       应用描述:一年365天,以第1天的能力值为基数,记为1.0,当好好学习时能力值相比前一天提高1‰,当没有学习时由于遗忘等原因能力值相比前一天下降1‰。每天努力和每天放任,一年下来的能力值相差多少呢?

import math
dayup = math.pow((1.0 + 0.001), 365) # 每天提高0.001
daydown = math.pow((1.0 - 0.001), 365) # 每天荒废0.001
print("向上: %.2f, 向下: %.2f."%(dayup, daydown))

运行结果:

 

  • 条件变化: 工作5天,休息2天
  • dayup, dayfactor = 1.0, 0.01
    for i in range(365):
        if i % 7 not in [6, 0]:
            dayup = dayup * (1 + dayfactor)
        else:
            dayup = dayup * (1 - dayfactor)
    print("向上5 天向下2 天的力量: {:.2f}.".format(dayup))
    

         运行结果:

 

五、字符串


1、字符串类型及其操作

(1) 字符串类型的表示

  • 单行 - 单引号(' ')或双引号(" ")
  • 多行 - 三引号(''' '''或 """ """)
  • 开始符、结束符为同一种定界符,成对组成;

(2) 字符与ASCII之间的转换

  • ord(char)  ----得到整数
  • chr(int)     ----得到字符

       

(3) 索引

     字符串的下标索引从0开始,之后一个字符的索引为-1

(4) 切片(截取)

      —通过两个索引值,访问序列中某一范围的元素

   格式:序列名[start : end]

  • 遵照”算头不算尾”原则;
  • 省略start,默认从头开始;省略,默认到结尾处

       

  还可以增加”步长值”,省略,默认为1

       

 

(5) 加法与乘法

  • 加法:实现字符串连接功能【字符串只能和字符串相加,数字只能和数字相加】
  • 乘法:产生新字符串,内容是原字符串内容重复多次

       

(6) 成员资格

  • 运算符:in 或not in
  • 返回值:布尔值

      

(7) 长度 len()、最大值max()、最小值min()

      

 

2、字符串的常用方法

方法 描述
str.find(sub [,start [,end]])检测 sub子串 是否包含在字符串str中,如果指定范围 start 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
str.rfind(sub [,start [,end]])类似于 find()函数,不过是从右边开始查找
str.count(sub [,start [,end]])返回 str[start, end] 在 sub子串出现的次数
str.replace(old,new[,count])返回字符串str的副本,所有old子串被替换为new,,若count给出,则替换不超过count次
str.split(sep=None,maxsplit=-1)返回一个列表,以 seq 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
str.join(seq)以指定字符串str作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
str.lower()转换字符串中所有大写字符为小写.
str.upper()转换字符串中所有小写字符为大写.
str.maketrans()创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
str.translate(table, deletechars="")根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中
str.strip([chars])在其左侧和右侧去掉chars中列出的字符
str.zfill(width)返回长度为 width 的字符串,不足之处在左侧填充0
str.startswith(prefix [,start [,end]])检查字符串是否是以指定子字符串 prefix 开头,是则返回 True,否则返回 False。如果start 和 end 指定值,则在指定范围内检查。
str.endswith(suffix [,start [,end]])检查字符串是否以 suffix 结束,如果start 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
str.isalnum()如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False
str.isalpha()如果字符串至少有一个字符并且所有字符都是字母或中文字则返回 True, 否则返回 False
str.isdigit()如果字符串只包含数字则返回 True 否则返回 False
rjust(width,[, fillchar])返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串

ljust(width[, fillchar])

返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。

rjust(width,[, fillchar])

2.1 常用方法

  • 查找与替换(find 、count & replace)

      str.find(sub [,start [,end]])

>>> str = 'This is my book'
>>> str.find('is')  # 从下标0开始,查找在字符串里第一个出现的子串
2
>>> str.find('is', 3)  # 从下标3开始,查找在字符串里第一个出现的子串
5
>>> str.find('os')  # 查找不到返回-1
-1
>>> str.rfind('is')  # rfind 与 find 类似,只是从右往左找
5

 

 

       str.count(sub [,start [,end]])

>>> str = 'this is string example'
>>> str.count('i')
3
>>> str.count('is', 5, 10)  # 返回 is在str[5, 10]中出现的次数
1
>>> str.count('is')
2

       str.replace(old,new[,count])

>>> str = 'this is string example!!! this is really string'
>>> str.replace('is', 'was')
'thwas was string example!!! thwas was really string'
>>> str.replace('is', 'was', 2)  # 最多替换2个
'thwas was string example!!! this is really string'
  • 分割与连接(split & join)

      str.split(sep=None,maxsplit=-1)

>>> str = 'this is string example,this is really string'
>>> str.split( )
['this', 'is', 'string', 'example,this', 'is', 'really', 'string']
>>> str.split('i', 1)  # 只以第一个i作为分隔符
['th', 's is string example,this is really string']
>>> str.split(',')
['this is string example', 'this is really string']

       str.join(seq),seq为序列

>>> '-'.join(('a','b','c')) 
'a-b-c'
>>> ' union all '.join(['select * from emp','select * from emp1'])
'select * from emp union all select * from emp1'
  • 大小写转换(lower & upper)

       str.upper()、 str.lower()

>>> str = 'this is string example'
>>> str.upper()
'THIS IS STRING EXAMPLE'

>>> str = 'THIS IS STRING EXAMPLE'
>>> str.lower()
'this is string example'

 

  • 映射与转换(maketrans & translate)

      

  • 删除与填充(strip & zfill)

     str.strip([chars])、

     str.lstrip([chars])、str.rstrip([chars])

>>> str = '  this is string example  '
>>> str.strip()
'this is string example'
>>> str = 'xxxthis is string example!xxx'
>>> str.strip('x')
'this is string example!'
>>> str.lstrip('x')
'this is string example!xxx'
>>> str.rstrip('x')
'xxxthis is string example!'

     str.zfill(width)

>>> str = 'this is string example'
>>> len(str)
22
>>> str.zfill(30)
'00000000this is string example'
  • 开始与结束(startswith & endswith)

      str.startswith(prefix [,start [,end]])

>>> str = 'this is string example'
>>> str.startswith('this')
True
>>> str.startswith('string', 8)
True
>>> str.startswith('this', 2, 4)
False

      str.endswith(suffix [,start [,end]])

>>> str = 'this is string example!'
>>> str.endswith('!')
True
>>> str.endswith('!',0,10)
False
>>> str.endswith('e')
False
  • 类型判断(isalnum、isalpha & isdigit)
>>> str = 'this is string example!'  # 包含空格
>>> str.isalnum()  # 判断字符串是否只包含数字或字母或中文
False
>>> str.isalpha()  # 判断字符串是否只包含字母或中文
False
>>> str.isdigit()  # 判断字符串是否只包含数字
False

>>> str = 'this'
>>> str.isalpha()
True

>>> str = 'this67'
>>> str.isalpha()
False
>>> str.isdigit()
False
>>> str.isalnum()
True

>>> str = 'this'
>>> str.isalnum()
True

>>> str = 'this这是'
>>> str.isalnum()
True
>>> str.isalpha()
True

>>> str = '7658'
>>> str.isalpha()
False
>>> str.isdigit()
True
>>> str.isalnum()
True
  • 使用指定的字符填充(ljust / rjust)
>>> str = 'this is string example!'
>>> str.ljust(30, '*')  # 左对齐
'this is string example!*******'
>>> str.rjust(30, '*')  # 右对齐
'*******this is string example!'

 

(2)打印时使换行符\n可见

  • repr(str)
In [67]: str='''er
    ...: kkii'''

In [68]: repr(str)
Out[68]: "'er\\nkkii'"

 

3、字符串类型的格式化

  有两种方式

(1)%

>>> pi = 3.14159
>>> print('pi = ', pi)
pi =  3.14159
>>>
>>> a =10
>>> b =20
>>> print('%4d + %4d = %4d'%(a,b,a+b))
  10 +   20 =   30
>>> print('%4d + %4d = %.2f'%(a,b,a+b))
  10 +   20 = 30.00

 

(2)str.format()  (推荐使用)

         格式:  <模板字符串>.format(<逗号分隔的参数>)

  • 说明: format()方法中模板字符串的槽除了包括参数序号,还可以包括格式控制信息。此时,槽的内部样式如下: {<参数序号>: <格式控制标记>}
  • 其中,格式控制标记用来控制参数显示时的格式 。 格式控制标记包括: <填充><对齐><宽度>,<.精度><类型>6个字段,这些字段都是可选的,可以组合使用,这里按照使用方式逐一介绍。

4、文本进度条

小技巧: import time库,使用sleep()、clock()等

(1)简单的文本进度条

import time

scale = 20
print('------执行开始------')
for i in range(scale+1):
    a, b = '**'*i, '··'*(scale-i)
    c = (i/scale)*100
    print('{:^3.0f}%[{}->{}]'.format(c,a,b))
    time.sleep(0.1)
print('------执行结束------')

运行结果:

 

 

(2)单行动态刷新的文本进度条

    与上例区别: 原地输出、动态刷新

 

import time
for i in range(101):
    print("\r{:2}%".format(i), end="")
    time.sleep(0.05)

(3)带刷新的文本进度条

import time
scale = 50
print("执行开始".center(scale//2,'-'))
t = time.clock()
for i in range(scale+1):
    a = '*' * i
    b = '.' * (scale - i)
    c = (i/scale)*100
    t -= time.clock()
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,-t),end='')
    time.sleep(0.05)
print("\n"+"执行结束".center(scale//2,'-'))

 

 

(4)关于进度条的拓展

结论: 可容忍开始时的慢速,不能容忍结束时的慢速

 

六、时间转换


日期和时间的一些常用处理方法,主要是在 time 和 datetime 这两个模块

1、time模块

  • time模块下有3种时间格式:时间戳(sesc)、时间元组(tupletime)、格式化字符串时间
  • 其所能表述的日期范围被限定在 1970 - 2038 之间,如果你写的代码需要处理在前面所述范围之外的日期,那可能需要考虑使用datetime模块更好。

(1) 获取当前时间

import time

# 获取当前时间的时间戳
ts = time.time()
print(ts)
# 运行结果:1610175653.113144


# 获取当前时间的时间元组
t = time.localtime()
print(t)
# 运行结果
# time.struct_time(tm_year=2021, tm_mon=1, tm_mday=9, tm_hour=15, tm_min=1, tm_sec=23, tm_wday=5, tm_yday=9, tm_isdst=0)
  • localtime() 输出结果为用一个元组装起来的9组数字处理时间
序号属性字段含义
0tm_year四位数的年2021
1tm_mon1 到 12
2tm_mday1 到 31
3tm_hour小时0 到 23
4tm_min分钟0 到 59
5tm_sec0 到 61 (60或61 是闰秒)
6tm_wday一周的第几日0到6 (0是周一)
7tm_yday一年的第几日一年中的第几天,1 到 366
8tm_isdst夏令时是否为夏令时,值有:1(夏令时)、0(不是夏令时)、-1(未知),默认 -1

 

(2)时间转换及格式化

import time

tupletime = time.localtime()

# 1)时间元组 —> 字符串,格式如 Sun Jan 10 11:07:53 2021
# time.asctime([tupletime]),接收时间元组,未给参数默认转换当前时间元组
print('time.asctime(tupletime):{}'.format(time.asctime(tupletime)))


# 2)时间戳 —>  字符串,格式如 Sun Jan 10 11:07:53 2021
# time.ctime([secs]),未给参数默认转换当前时间戳
print('time.ctime(secs):{}'.format(time.ctime(1610250145.3070025)))
print('time.ctime():{}'.format(time.ctime()))

# 3)时间戳 —> 时间元组
# time.gmtime([secs]),默认转换当前时间戳
print('time.gmtime():{}'.format(time.gmtime()))
print('time.gmtime(secs):{}'.format(time.gmtime(1610250145.3070025)))

# 4)时间元组 —> 时间戳
# time.mktime(tupletime)
t1 = time.localtime()
print('time.mktime(tupletime):{}'.format(time.mktime(t1)))


# 5)指定fmt格式的时间字符串 —> 时间元组
# time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')
print('time.strptime():{}'.format(time.strptime('2021-1-10 12:14:50', '%Y-%m-%d %H:%M:%S')))

# 6)时间元组 —> 指定fmt格式的时间字符串
# time.strftime(fmt[,tupletime])
print('time.strftime():{}'.format(time.strftime('%Y-%m-%d %H:%M:%S', tupletime)))

运行结果:

python中时间日期格式化符号:

  • %y 两位数的年份表示(00-99)
  • %Y 四位数的年份表示(000-9999)
  • %m 月份(01-12)
  • %d 月内中的一天(0-31)
  • %H 24小时制小时数(0-23)
  • %I 12小时制小时数(01-12)
  • %M 分钟数(00=59)
  • %S 秒(00-59)
  • %a 本地简化星期名称
  • %A 本地完整星期名称
  • %b 本地简化的月份名称
  • %B 本地完整的月份名称
  • %c 本地相应的日期表示和时间表示
  • %j 年内的一天(001-366)
  • %p 本地A.M.或P.M.的等价符
  • %U 一年中的星期数(00-53)星期天为星期的开始
  • %w 星期(0-6),星期天为星期的开始
  • %W 一年中的星期数(00-53)星期一为星期的开始
  • %x 本地相应的日期表示
  • %X 本地相应的时间表示
  • %Z 当前时区的名称
  • %% %号本身

时间类型转换图示:

     

 

 

2、datetime模块

datetime库可以从系统中获得时间,并以用户选择的格式输出。

基于 time 进行了封装,提供了更多实用的函数。在datetime 模块中包含了几个类,具体如下:

描述

datetime

同时有时间和日期
timedelta主要用于计算时间跨度
tzinfo时区相关
time只关注时间
date只关注日期

由于datetime.datetime类表达形式最为丰富,这里主要介绍这个类的使用。

datetime类中有3种时间类型:datetime、时间戳、格式化字符串

from datetime import datetime

# 1)获取当前日期和时间,精确到微秒
now = datetime.now()
print(now)  # 2021-01-10 14:43:50.501211

# 2)构建一个指定日期和时间的datetime对象
# datetime(year, month, day, hour, minute, second, microsecond)
# 其中,hour, minute, second, microsecond参数可以全部或部分省略
today = datetime(2021, 1, 11, 10, 30, 10, 7)
print(today)  # 2021-01-11 10:30:10.000007
print(today.year)
print(today.hour)


# 3)datetime类型 —> 字符串
now_d = datetime.now()
dts = now_d.strftime('%Y-%m-%d %H:%M:%S')
print(dts, type(dts))  # 2021-01-10 16:07:29

# 扩展:上述格式化符号可以与print的格式化函数一起使用
print('今天是{0:%Y}年{0:%m}月{0:%d}日'.format(now_d))
## 今天是2021年01月10日


# 4)字符串 —> datetime类型
std = datetime.strptime(dts, '%Y-%m-%d %H:%M:%S')
print(std, type(std))  # 2021-01-10 16:07:29

# 5)datetime类型 —> 时间戳
timestamp = std.timestamp()
print(timestamp)  # 1610266049.0

# 6)时间戳 —> datetime类型
ttd = datetime.fromtimestamp(1610250145.3070025)
print(ttd)  # 2021-01-10 11:42:25.307003

 

3、应用

        平时在使用pycharm等编辑器时是没有显示耗时的,如果想知道写的程序跑了多长时间,可以通过time模块和datetime获取

(1)time.perf_counter()

import time

start = time.perf_counter()  # 返回系统运行时间
time.sleep(3)  # 线程暂停几秒,这里可以替换为需要计时的程序
end = time.perf_counter()
print('用时:{:.4f}s'.format(end-start))

运行结果:

 

(2)datetime

from _datetime import datetime

start = datetime.now()
time.sleep(3)  # 线程暂停几秒,这里是需要计时的程序
end = datetime.now()
print('用时:{:.4f}s'.format((end-start).seconds))

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值