python-数据类型【数字、字符串、元组、列表、math库、random库、time库】
一、数字类型
1、整数类型
pow(x,y)计算x的y次幂(python的整数没有限制范围)
①十进制
②二进制 0b/0B开头
③八进制 0o/0O开头
④十六进制 0x/0X开头
2、浮点数类型
float
浮点数减运算存在不确定位数,不是bug
浮点数减运算及比较用 round(x,d) 对x四舍五入,d是小数点位数
print(0.1+0.2) ##0.30000000000000004 ##round(x,d)对x四舍五入,d是小数点位数 print(round(0.1+0.2,1)) ##0.3
科学计数法 :4e-3 :0.004
3、复数类型
z=a+bj,a是整数,b是虚数,a、b都是浮点类型,虚数用j或J标识
z.real ----- 获得复数的实数部分
z.image------- 获得复数的虚数部分
4、扩展关系
整数--->浮点数---->复数
混合运算结果为最宽类型【比如:整数+浮点数=浮点数】
5、三种数字类型互相转换
int()
float()
complex() ,复数不能直接转换成整数和浮点数
6、判断数字类型
type()
7、运算符
8、实例
def dayup(df): days = 1 for i in range(364): if i % 7 in[6,0]: days = days*(1-0.01) else: days = days*(1+df) return days df = 0.01 while dayup(df)<pow(1.01,365): df += 0.001 print('工作日的努力参数是:{:.3f}'.format(df))
二、字符串类型
1、单引号、双引号标识单行字符串
三单引号、三双引号标识多行行字符串
#字符串中包含单引号或双引号 print('ddf"ddd"') #ddf"ddd" print("ddf'ddd'") #ddf'ddd'
#字符串中包含单引号和双引号 print('''ddf'ddd',"hhh"''') #ddf'ddd',"hhh"
2、转义符:\
\n 换行符
3、字符序列
①索引 <string>[3],索引从【0 --> len(str)-1】,反向索引<string>[-1]
②子序列 <string>[0:3],不包括3的位置
③切片<string>[N:M:K],N开头,M结尾,K为步长
str = '零一二三四五六七八九十' print(str[:3]) ##零一二 print(str[5:]) #五六七八九十 print(str[1:8:2]) #一三五七 print(str[::-1]) #十九八七六五四三二一零
字符串逆序 : str[::-1]
4、【+】两个字符串连接成一个新的字符串
【*】本身字符串重复链接
str1 = 'abcd' str2 = 'lala' print(str1+str2) #abcdlala print(str1*2) #abcdabcd
weekStr = '一二三四五六七' weekId = eval(input('请输入星期数字(1-7):')) ##input输入的是字符串用eval去掉引号变成数字 print('星期'+weekStr[weekId-1])
5、len()--返回字符串长度
6、str()--转换为字符串
7、例子
months = "JanFebMarAprMayJunJulAugSepOctNovDec" n = input("请输入月份:") pos = (int(n)-1)*3 # print("月份名称缩写为:{}".format(months[pos:pos+3])) print("月份名称缩写为:"+months[pos:pos+3])
print(chr(10004)) #✔ for i in range(12): print(chr(9800 + i),end='') #星座字符 ♈♉♊♋♌♍♎♏♐♑♒♓
8、字符串操作方法
8、字符串格式化 .format(<参数序号>:<格式控制标记>)
格式控制标记:
①填充
②对齐,< 左对齐,> 右对齐,^ 居中
③宽度
print('{:=^20}'.format('BJYX')) ##========BJYX======== print('{:*>20}'.format('BJYX')) ##****************BJYX
④<,> 数字千位分隔符
⑤<.精度>
⑥类型 整数:b,c,d,o,x,X 浮点数:e,E,f,%
print('{:,.2f}'.format(23456.6789)) ##23,456.68
三、元组类型
※元组是包含多个元素的类型,元素间用逗号分割
t1 = (123,355,'hhh')
※元组可以是空的 t2 = ()
※元组可以只有一个元素 t2 =(123,),一个元素的元组要加逗号,不然则不是元组
※元组可以使用括号,也可以不使用
1、特点
※元组中的元素可以是不同类型,元组中也可以包含元组元素,但要加 ( ) 进行区分
t3 = 123,345,("哈哈哈",123)
※索引访问元组元素 t3[0],t3[0:4]
※元组定义后不能更改和删除!!!
※元组可以使用 +、*
四、列表类型(list)
可以增删操作
list元素可包含 数字、字符串、布尔、列表
1、列表的操作
vlist = [0,1,2,3,4] print(vlist*2) #[0, 1, 2, 3, 4, 0, 1, 2, 3, 4] print(vlist[2:]) #[2, 3, 4] print(len(vlist[3:])) ##2 for i in vlist[:3]: print(i) if 2 in vlist: print("yes") else: print("no")
vlist = [0,1,2,3,4] vlist.append('python') #[0, 1, 2, 3, 4, 'python'] print(vlist) vlist.reverse() print(vlist) #['python', 4, 3, 2, 1, 0] print(vlist.index(3)) #2 print(vlist.pop(3),vlist) #2 ['python', 4, 3, 1, 0]
2、split()函数:将字符串拆分成列表
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
str='啦啦啦 \n哈哈哈 呼呼 \n呼哈'
print(str.split( )) # 以空格为分隔符,包含 \n,['啦啦啦', '哈哈哈', '呼呼', '呼哈']
print(str.split(' ', 1 )) # 以空格为分隔符,分隔成两个,['啦啦啦', '\n哈哈哈 呼呼 \n呼哈']
3、list索引
从 vlist[0] -----> vlist[-1] 或 vlist[len(vlist)-1]
超出索引范围,报错IndexError
五、math库
六、random库
生成随机数
from random import * print(random()) #随机生成一个0-1的小数 print(uniform(0,10)) #随机生成一个0-10的小数 print(randint(0,10)) #随机生成一个0-10的整数 print(randrange(0,10,2)) #随机生成一个0-10,以2递增的整数 vlist = [0,1,2,'lala','haha',6,7] print(choice(vlist)) #在列表中随机选一个数 shuffle(vlist) #随机改变列表的顺序 print(vlist) print(sample(vlist,4)) #在列表中随机采样4个元素 ###随机种子 seed(10) print(uniform(0,10)) #5.714025946899135 print(uniform(0,10)) #4.288890546751146 seed(10) print(uniform(0,10)) #5.714025946899135 print(uniform(0,10)) #4.288890546751146 ##设置相同的随机种子,产生的随机数相同
七、time库
import time
1、时间获取
2、时间格式化
3、程序计时
八、案例,计算Π(蒙特卡罗方法-撒点方法)
# pi.py
from random import random
from math import sqrt ##开方
from time import perf_counter #程序计时
DARTS = 120000 ##抛撒点的总数量
hits = 0 ##在圆内点的数量
start = perf_counter()
for i in range(1,DARTS):
x, y = random(), random()
dist = sqrt(x**2 + y**2) ## pow(x**2 + y**2,0.5)
if dist <= 1.0:
hits = hits + 1
pi = 4 * (hits/DARTS)
print("Pi的值是 %s" % pi)
print("程序运行时间是 {:5f}s" .format(perf_counter()-start))
练习题
#字符串组合输出
str1 = input('请输入一个人的名字:') str2 = input('请输入一个国家的名字:') print('世界那么大,{}想去{}看看'.format(str1,str2))
N = input('请输入一个正整数N:') s = 0 for i in range(int(N)): s += i+1 print('1-N求和结果为'+s)
#九九乘法表 for i in range(1,10): for j in range(1,1+i): print("{}*{}={:2} ".format(j,i,i*j),end='') print('')
s = 0 for i in range(1,11): t = 1 for j in range(1,1+i): t= t * j s = s+t print('1+2!+...+10!的运算结果是:{}'.format(s)) s,t = 0,1 for i in range(1,11): t *= i s += t print('1+2!+...+10!的运算结果是:{}'.format(s))
##猴子吃桃问题 s = 1 for i in range(1,6): s = (s + 1)*2 print(s) n=1 for i in range(5,0,-1): n = (n+1)<<1 print(n)
##食谱搭配 diet = ['西红柿','豆角','黄瓜','虾仁','玉米'] for x in range(0,5): for y in range(0,5): if not(x==y): print("{}{}".format(diet[x],diet[y]))
##绘图 from turtle import * color('red','yellow') begin_fill() while True: forward(200) left(170) if abs(pos()) < 1: break end_fill() done()
#单行动态刷新 import time for i in range(11): print('\r{:3}%'.format(i),end='')##end=''不换行,\r会到行首 time.sleep(0.2)
#文本进度条 import time scale = 50 print('执行开始'.center(scale,'-')) 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,'-'))