Python语言程序设计——第三周:数据的基本类型

数据的基本类型

整数类型

与数学的整数概念一致
power(x,y)计算 x y x^y xy,可正可负,没有取值范围。表示形式为:

  • 十进制:201;-51
  • 二进制:以0b或者0B开头,如0b11;-0b10
  • 八进制:以0o或者0O开头,如0o12;-0o45
  • 十六进制:以0x或者oX开头,如0x5a,-0x74

浮点数类型

与数学中的实数概念一致

  • 取值范围为 − 1 0 308 -10^{308} 10308 1 0 308 10^{308} 10308,精度数量级 1 0 − 16 10^{-16} 1016
  • 浮点数间运算存在不确定的尾数,不是bug
  • ==表示判断
  • round(x,d)函数对x进行四舍五入,d是小数截取位数
    浮点数间运算及比较用round()函数辅助
  • 不确定尾数一般发生在 1 0 − 16 10^{-16} 1016左右,round()十分有用
  • 浮点数的科学记数法表示:
    使用字母e或E作为幂的运算,以10为底数,格式如下:
    e表示 a ∗ 1 0 b a*10^b a10b,如4.3e-3,9.6e5

复数类型

与数学中的复数概念一致
定义 j = − 1 j=\sqrt{-1} j=1 a + b j a+bj a+bj被称为复数, a a a为实部, b b b为虚部。
例如: z = 1.26 e − 4 + 5.6 e + 89 j z=1.26e-4+5.6e+89j z=1.26e4+5.6e+89j,利用z.real获得实部,z.imag获得虚部

数值运算操作符

x+y表示x与y之和
x-y表示x与y之差
x*y表示x与y之积
x\y表示x与y之商(产生是浮点数结果)
x\\y表示x整除y
x%y表示余数,模运算
x**y表示x的y次幂,作用同power(x,y)

非重点:二元操作符
x op= y

增强操作符及使用 描述
x op= y 即x=x op y,其中,op为二元操作符 ,包括+ - * / // % **

数值运算函数

函数及使用 描述
abs(x) 求x的绝对值
divmod(x,y) 商余,(x//mody,x%y),同时输出商和余数
power(x,y[,z]) 幂余,(x**y)%z,表示参数z可省略
round(x,[,d]) 四舍五入,d是保留小数位数,默认值为0
max{ x 1 , x 2 , . . . , x n {x_1,x_2,...,x_n} x1,x2,...,xn} 最大值,返回 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn的最大值,n不限
min{ x 1 , x 2 , . . . , x n {x_1,x_2,...,x_n} x1,x2,...,xn} 最小值,返回 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn的最小值,n不限
int(x) 将x变成整数,舍弃小数部分
float() 将x变成浮点数,增加小数部分
complex() 将x变成复数,增加虚数部分

实例3:天天向上的力量

每天进步0.001,每天退步0.001

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

每天进步0.005,每天退步0.005

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

工作日进步0.01,休息日退步0.01

#DayDayUpQ3.py
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))

工作日模式下,工作日每天努力到什么程度才能达到和每天努力的人相同的结果

#DayDayUpQ4.py
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.001
print("工作日的努力参数是:{:.3f}".format(dayfactor))

字符串类型及操作

字符串

Python语言程序设计——第三周:数据的基本类型_第1张图片
Python语言程序设计——第三周:数据的基本类型_第2张图片
Python语言程序设计——第三周:数据的基本类型_第3张图片
Python语言程序设计——第三周:数据的基本类型_第4张图片
Python语言程序设计——第三周:数据的基本类型_第5张图片

由0个或多个字符组成的有序字符序列

操作符及使用 描述
x+y 连接连个字符串x和y
n*x或x*n 连接n次字符串x
x in s 如果x是s的子串,返回True,否则返回False

获取星期字符串

#WeekNamePrintV1.py
WeekStr="星期一星期二星期三星期四星期五星期六星期日"
WeekId=eval(input("请输入星期数字(1-7):"))
pos=(WeekId-1)*3
print(WeekStr[pos:pos+3])
#WeekNameV2.py
WeekStr="一二三四五六日"
WeekId=eval(input("请输入星期数字(1-7):"))
print(星期+WeekStr[WeekId-1])

字符串处理函数

一些以函数形式提供的字符串处理功能

函数及使用 描述
len(x) 长度,返回字符串x的长度
str(x) 任意类型x所对应的字符串形式
hex(x)或otc(x) 整数x的十六进制或八进制小写形式字符串
chr(u) u位Unicode编码,返回其对应的字符
ord(x) x为字符,返回其对应的Unicode编码

注:

  • eval(x)与str(x)是一对对应的函数
  • chr(u)与ord(x)是一对对应的函数

Unicode编码

Python字符串的编码方式

  • 统一字符编码,即覆盖几乎所有字符的编码方式
  • 从0到1114111(0x10FFFF)空间,每个编码对应一个字符
  • Python字符串中每一个字符都是Unicode编码字符
    例如
for i in range(12):
	print(chr(9800+i),end=" ")
♈
 ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ 

字符串处理方法

Python语言程序设计——第三周:数据的基本类型_第6张图片

方法及使用 描述
str.lower()或str.upper() 返回字符串的副本,全部字符小写/大写
str.split(seq=None) 返回一个列表,由str根据seq被分割的部分组成
str.count(sub) 返回字串sub在str中出现的次数
str.replace(old,new) 返回字符串str副本,所有old子串被替换为new
str.center(width[,fillchar]) 字符串str根据宽度width居中,fillchar可选
str.strip(chars) 从str中去掉在其左侧和右侧chars中列出的字符
str.join(iter) 在iter变量最后除最后元素外每个元素后增加一个str #主要用于字符串分隔等

字符串类型的格式化

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

  • 字符串格式化使用.format()方法,用法如下:
 <模板字符串>.format(<逗号分隔的参数>)

Python语言程序设计——第三周:数据的基本类型_第7张图片
Python语言程序设计——第三周:数据的基本类型_第8张图片
Python语言程序设计——第三周:数据的基本类型_第9张图片
Python语言程序设计——第三周:数据的基本类型_第10张图片
Python语言程序设计——第三周:数据的基本类型_第11张图片

Python语言程序设计——第三周:数据的基本类型_第12张图片

time库的使用

time库基本介绍

Python语言程序设计——第三周:数据的基本类型_第13张图片
Python语言程序设计——第三周:数据的基本类型_第14张图片

函数 描述
time() 获取当前时间戳,即计算机内部时间值,浮点数
>>> time.time()
1583248765.1645014
ctime() 获取当前时间并以易读方式表示,返回字符串
>>> time.ctime()
'Tue Mar 3 23:19:33 2020'
gmtime() 获取当前时间,表示为计算机可处理的时间格式
>>> time.gmtime()
time.struct_time(tm_year=2020, tm_mon=3, tm_mday=3, tm_hour=15, tm_min=28, tm_sec=39, tm_wday=1, tm_yday=63, tm_isdst=0)

时间格式化

Python语言程序设计——第三周:数据的基本类型_第15张图片

函数 描述
strfttime(tpl,ts) tpl是格式化模板字符串,用来定义输出效果
ts是计算机内部时间类型变量
>>> t=time.gmtime()
>>> time.strftime("%Y-%m-%d %H:%M:%S",t)
'2020-03-03 15:33:24'
strptime(tpl,ts) str是字符串形式的时间值
tpl是格式化模板字符串,用来定义输入效果
>>> timestr='2020-03-03 15:33:24'
>>> time.strptime(timestr,"%Y-%m-%d %H:%M:%S")
time.struct_time(tm_year=2020, tm_mon=3, tm_mday=3, tm_hour=15, tm_min=33, tm_sec=24, tm_wday=1, tm_yday=63, tm_isdst=-1)`
格式化字符串 日期/时间说明 值范围和实例
%Y 年份 0000~9999,例如:1900
%m 月份 01~12,例如:10
%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

程序计时

  • 程序计时指测量起止动作所经历时间的过程
函数 描述
per_counter() 返回一个CPU级别的精确时间计数值,单位为秒
由于这个计数值起点不确定,连续调用差值才有意义
>>> start=time.perf_counter()
>>> end=time.perf_counter()
>>> end-start
7.049843562000206
sleep(s) s拟休眠时间,单位是秒,可以是浮点数
>>> def wait():
time.sleep(3.3)
>>> wait()

实例4 文本进度条

  • 采用字符串方式打印可以动态变化的文本进度条
  • 进度条需要能在一行中逐渐变化
  • 采用sleep()模拟一个持续的进度
#TextProBarV1.py
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("------执行结束------")

结果如下:

------执行开始------
 0 %[->..........]
10 %[*->.........]
20 %[**->........]
30 %[***->.......]
40 %[****->......]
50 %[*****->.....]
60 %[******->....]
70 %[*******->...]
80 %[********->..]
90 %[*********->.]
100%[**********->]
------执行结束------

文本进度条单行动态刷新

  • 刷新的本质:用后打印的字符覆盖之前的字符
  • 不能换行:print()需要被控制
  • 要能回退:打印后光标退回到之前的位置\r
#TextProBarV1.py
import time
for i in range(101):
    print("\r{:3}%".format(i),end="")
    time.sleep(0.1)

完整效果

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

python123测试

四位玫瑰数

四位玫瑰数是4位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬
例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数,3位数的自幂数被称为水仙花数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬
请输出所有4位数的四位玫瑰数,按照从小到大顺序,每个数字一行。

for i in range(1000,10000):
    m=str(i)
    if i==pow(eval(m[0]),4)+pow(eval(m[1]),4)+pow(eval(m[2]),4)+pow(eval(m[3]),4):
        print(i)

100以内素数之和

求100以内所有素数之和并输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬
素数指从大于1,且仅能被1和自己整除的整数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

提示:可以逐一判断100以内每个数是否为素数,然后求和。

#Prime
def is_prime(n):
    for i in range(2,n):
        if n%i == 0:
            return False
    return True
sum = 0
for i in range(2,100):
    if is_prime(i):
        sum += i
print(sum)

你可能感兴趣的:(Python语言程序设计——第三周:数据的基本类型)