第三周:基本数据类型

第三周:基本数据类型

1.整数类型 integer

(1)与数学中整数的概念一致,可正可负,没有整数限制

pow(x,y)函数:计算x的y次方,想算多大算多大,可以套用

(2)进制表示

十进制:正常数字

二进制:0b或0B开头

八进制:0o或0O开头

十六进制:0x或0O开头或h结尾

2.浮点类型 float

(1)与数学中的实数一致,带有小数点及小数的数字

(2)浮点数的取值范围和小数精度都存在限制,但常规计算可忽略

(3)浮点数间运算存在不确定尾数,不是bug

0.1+0.3#0.4
0.1+0.2#0.3000000000004,这就是不确定尾数,原因为计算机内部有关计算机小数的存储为二进制近似表示
0.1+0.2==0.3#False
round(0.1+0.2==0.3,1)#Ture
#准确的浮点数运算的标准库decimal
>>>from decimal import *
>>>Decimal('0.1')+Decimal('0.2')
Decimal('0.3')
#使用Decimal库,Decimal('数字')是基本表达形式,及这样表示依旧为数字

(4)浮点数间运算不确定尾数

round(x,d):对x四舍五入,d是小数截取位数

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

>>>round(123.456789,3)
123.457

(5)浮点数的科学计数法

#使用e或E作为幂的符号,以10为基数,格式如下:
<a>e<b>(<a>E<b>)表示a乘上10的b次方
4.3e-3为0.0043		9.6E5(9.6E+5)为960000.0

#若小数或整数部分0,则可保留小数点并省略为0的部分
-77.  .123  99.

(6)浮点数精度

>>>import sys
>>>sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024,
max_10_
exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_
exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, 
radix=2, rounds=1)
>>>sys.float_info.max
1.7976931348623157e+308

3.复数类型

复数在Python中以字符串'complex'表示其类型

与数学中复数的概念一致

定义j=√-1,等价为数学里的i,a+bj为复数,a为实部,b为虚部,a,b 均为浮点数类型

z=a+bj 实部:z.real 虚部:z.image

>>>type(1.23e-4+5.67e+89j)
<class'complex'>
>>>(1.23e-4+5.67e+89j).real
0.000123
>>>(1.23e-4+5.67e+89j).imag
5.67e+89

4. 真假无值

Ture 和 False 构成 bool 类型,严格讲,它们属于数值,Ture==1,False==0

None()表示无

>>>a = print("Hello World")
>>>a == None
True
#print函数运行后不返回任何内容

5. 整数序列

整数序列是数字类型的一种重要延伸,由 range()函数生产

#第一种,生成丛0开始的递增整数序列
#产生的整体为range类型,可通过遍历循环逐一获得序列整数,若b<0,则不产生
>>>for i in range(10):
    print(i,end"")
0 1 2 3 4 5 6 7 8 9
#第二种,生成a到b-1的递增的整数序列
>>>for i in range(10,20):
    print(i,end"")
10 11 12 13 14 15 16 17 18 19
#第三种,带有步长的
>>>for i in range(0,20,2):
    print(i,end"")
0 2 4 6 8 10 12 14 16 18
#总结:生成数字个数为末-初,有则除以步长

6.数值运算操作符

(1)二元数字运算符

+、-、*、/(结果为浮点数)、//(整除得整数部分)、%(取余)、**(幂运算)

(2)增强赋值运算符

功能为对两个数进行运算之后,去更改其中的一个数

x op=y

eg:x +=y、x -=y、x *=y、x /=y、x //=y、x %=y、x **=y

x **=3等价为x=x**3,s += count 等于 s 等于 s+count

(3)类型间进行混合运算时,生成结果为最宽类型

整数<浮点数<复数

eg:123+4.0=127.0

7.数值运算函数

函数及使用

描述

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,[..]表示参数z可省略

pow(3,pow(3,99),10000)结果为4587,为数字类型

round(x[,d])

四舍五入,d是保留小数位数,默认值为0

round(-10.123,2)结果为-10.12

max(x1,x2,x3,...,xn)

最大值,返回x1,x2,x3,...,xn中的最大值,n不限

max(1,9,5,4,3)结果为9

mix(x1,x2,x3,...,xn)

最小值,返回x1,x2,x3,...,xn中的最小值,n不限

min(1,9,5,4,3)结果为1

int(x)

将x变成整数,舍弃小数部分

int(123.45)结果为123;int("123")结果为123

float(x)

将x变为浮点数,增加小数部分

float(12)结果为12.0;float("1.23")结果为1.23

complex(re,[,im])

将x变为复数,增加虚数部分,re 为实数,im 为虚数

complex(4)结果为4+0j

#abs()也可以计算复数的绝对值,输出为二维坐标系中复数位置到坐标原点的距离
>>>ans(-3+4j)
5.0
#divmod()输出商和余数属于元组类型,可通过赋值方式将结果同时传递给两个变量
#pow(x,y[,z])的速度快,如pow(3,pow(3999))%10000慢于pow(3,pow(3999),10000),因为后者是同时进行运算的
#模运算个好东西,n%m的结果映射到[0,m-1]的区间内
#round()的四舍五入按平等价值划分,即奇进偶不进,并非所有的Y.5都进位,看Y的奇偶得
#复数不能直接转换为其他数字类型,可通过.real和.imag将复数的实部和虚部分别转换
>>>float((10+99j).image)
99.0

8.实例三:天天向上的力量

#DayDayUpQ1.py
dayup =pow(1.001,365)
daydown =pow(0.999,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
#向上:1.44,向下:0.69
dayfactor = 0.005
dayup = pow(1+dayfactor,365)
daydown = pow(1-dayfactor,365))
print("向上:{.2f},向下:{.2f}".format(dayup,daydown))
#当前能力为N时,进步则N*(1+0.01),反之N*(1-0.01)
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))
def dayup(df):#def定义一个函数,df是个占位符,用来表示dayfactor的缩写
    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}".foemat(dayfactor))
#工作日的努力参数为0.019
#根据df参数计算工作日力量的函数,参数不同,代码可共用,def保留字用于定义函数
#while保留字判断条件是否成立,条件成立时执行循环

9.字符串类型及操作

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

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

eg:"请" '请'

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

'''Python

语言'''

注意:三单引号形成的是字符串,只是它的作用可以当成注释

如何把单、双引号当做字符?

'这里有个双引号(")'或者"这里有个单引号(')"

如果希望字符串中出现单引号和双引号的组合?

'''这里既有单引号(')又有(")双引号'''

10.time库

(1)time库是python中处理时间的标准库;计算机时间的表达;提供获取系统时间并格式化输出功能;提供系统级精确功能,用于程序性能分析

import time

time.<b>()

(2)包含的三类函数

时间获取:time()、ctime()、gmtime()

时间格式化:strftime()、strptime()

程序计时:sleep()、perf_counter()

函数

描述

time()

获取当前时间戳,单位为 s,浮点数

>>>time.time()

1536727223.63191689#从 1970.1.1 开始至今

ctime()

获取当前时间并以易读方式表示,返回字符串

>>>time.ctime

'Fri Jan 26 12:11:16 2018'(星期,月份,日,时,分,秒,年)

gmtime()

返回当前时间戳对应的 struct_time 类型时间,获取当前时间,表达为计算机可处理的时间格式

>>>time.gmtime

time.struct_time(tm_year=2018,tm_mon=1,

time_mday=26,tm_hour=4,tm_ser=16,

tm_wday=4,tm_yday=26,tm_isdst=0)

11.gmtime 和 localtime 区别

在Python中,localtimegmtime是两个用于获取时间信息的函数,它们的主要区别在于处理时区的方式。

  1. localtime函数
    • localtime函数将一个时间戳转换为本地时间,返回的是一个包含本地时间信息的struct_time对象。
    • 该函数考虑了当前系统的时区,因此返回的时间是根据本地时区调整后的。
    • 如果不传入参数,localtime会使用当前时间作为转换标准。
  1. gmtime函数
    • gmtime函数将一个时间戳转换为UTC时间(世界标准时间),即不考虑时区的时间。
    • 该函数返回的时间是基于格林尼治标准时间(GMT)的,不进行任何时区调整。
    • 如果不传入参数,gmtime也会使用当前时间作为转换标准。

localtime返回的是本地时间,考虑了时区的影响;而gmtime返回的是UTC时间,不考虑时区的影响。这两个函数在处理时间时需要根据具体需求选择使用,以确保时间信息的准确性。


 

(3)时间格式化

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

格式化:类似字符串格式化,需要有展示模版

展示模板需要由特定的格式化控制符组成

strftime(tpl,gt)

tpl是格式化模版字符串,用来定义输出效果

gt 是 struct_time 类型的时间,即 gmtime 所的

>>>t = time.gmtime()

>>>time.strftime("%y-%m-%d %h:%m:%s,t")

'2018-01-26 12:55:20'

strptime()

与 strftime 函数刚好相反,用于提取字符串 str 中时间要素,生成一个 strut_time 类型的时间值

>>>timeString = '2023-09-02 13:26:22'
>>>strptime(timeString,"%Y-%m-%d %H:%M:%s")
time.struct_time(tm_year=2024, tm_mon=9, tm_mday=29, tm_
hour=20, tm_min=27, tm_sec=49, tm_wday=6, tm_yday=273, tm_isdst=-1)

格式化字符串

日期/时间说明

值范围和实例

%Y

年份

0000~9999,例如:2024

%m

月份

01~12,01~12 例如:08

%B

月份名称

January~December,例如:April

%b

月份名称缩写

Jan~Dec,例如:Apr

%d

日期

01~31,例如:25

%A

星期几

Monday~Sunday,例如:Wednesday

%a

星期缩写

Mon~Sun,例如:Wed

%H

小时(24h制)

00~23,例如:12

%I

小时(12h制)

01~12,例如:7

%p

上/下午

AM,PM,例如:PM

%M

分钟

00~59,例如:26

%S

00~59,例如:26

%x

日期

月/日/年,09/29/2024

%X

时间

时/分/秒,18/29/11

月份

全称

缩写

一月

January

Jan

二月

February

Feb

三月

March

Mar

四月

April

Apr

五月

May

May

六月

June

Jun

七月

July

Jul

八月

August

Aug

九月

September

Sep

十月

October

Oct

十一月

November

Nov

十二月

December

Dec

英文全称

缩写形式

Monday

Mon.

Tuesday

Tue.

Wednesday

Wed.

Thursday

Thu.

Friday

Fri.

Saturday

Sat.

Sunday

Sun.

>>>t = time.gmtime()
>>>time.strftime("%Y-%m-%d %H:%M:%S",t)
                    '2018-01-26 12:55:20'
>>>timeStr = '2018-01-26 12:55:20'
>>>time.strtime(timeStr,"%Y-%m-%d %H:%M:%S")

(4)程序计时

程序计时时间广泛;程序计时指测量起止动作所经历时间的进程

测量时间:perf_counter()

产生时间:sleep()

函数

描述

perf_counter()

返回英国CPU级别的精确时间计数值,单位为秒

由于这个计数值起点不确定,连续调用差值才有意义,并且差值是基于最开始调用之后,而非上一次

>>>start = time.perf_counter()

318.66599499718114

>>>end = time.perf_counter()

341.3905185375658

>>>end - start

22.724523540384666

sleep(s)

s拟休眠的时间,单位是秒,可以是浮点数

>>>def waite()#定义一个函数 waite

time.sleep(3.3)

>>>wait() #当调用 waith 函数时程序将等待3.3秒后再退出

12. 实例四.文本进度条

(1)单行动态刷新

刷新的本质:用后打印的字符覆盖原来的字符

不能换行:print()需要被控制

要能回退:打印后光标退回到之前的位置\r

#TextProBarv1.py
import time
for i in range(101):#0到100共101个数
    print("\r{:3}%").format(i),end()="")#end()=""使原来print的换行变为停留在当前光标,\r为在打印字符串之前,将光标退回到行首
    time.sleep(0.1)

(2)完整效果

#TextProBarV3.pу
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,'-'))

(3)课本高级版

#tqdmBar.py
from tqdm import tqdm
from time import sleep
for i in tqdm(range(1,100)):
    sleep(0.01)
#100%|██████████| 99/99 [00:01<00:00, 88.26it/s]

13.作业

在一个周期内,连续学习 3 天能力值不变,从第 4 天起到休息前,能力每天比前一天增长 1%,若中断学习,周期从头计算,问当每 10 天或 15 天休息一天后,365 天后的能力值是多少?

dayup = 1#能力初始值
dayfactor = 0.01#进步百分数
period = [4,5,6,0]#当为周四五六日时
decrease = 0#
for j in range(1,366):#进行365次循环
    temp = j - decrease
    tom = temp % 7#得到当前按程序讲的星期,而非实际的
    if j%10 == 0:#当连续学习10天时
        decrease += j - (tom - 1)
        tom = 1
    if tom in period:#
        dayup = dayup * (1 + dayfactor)
print('%f the result is %.2f'%(dayfactor,dayup))
ability = 1.0
T = 365//11
for j in range(T):
    for i in range(1,12):
        if i in [1,2,3]:
            ability = ability
            print(ability)
        elif i in [4,5,6,7,8,9,10]:
            ability = ability*1.01
            print(ability)
        else:
            ability = ability
            i = 1
            print(ability)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值