Python学习(二)
Python编程之数据类型
数字与字符串类型
.类型的概念:类型是编程语言对数据类型的一种划分,python语言的类型:数据类型,字符串类型,元组类型,列表类型,字典类型,文件类型
数字类型
python共包括三种数据类型:整数类型,浮点数类型,复数类型
整数类型:
python中整数没有取值范围的限制。
整数有四种进制的表示形式:1000(十进制),0xffff(十六进制),0b1001(二进制),0o1245(八进制)
浮点数类型:
浮点数是有精度限制的(import sys 调用sys.float_info可以知道精度)。
浮点数类型运算时可能出现不确定的尾数,这并非bug而是由于计算机内部以二进制存储数据,十进制和二进制间的小数不存在严格的对应关系。
0.1 + 0.2 == 0.3 #结果是 False
round(0.1+0.2, 1) == 0.3 #结果是 True
#round(x,d)四舍五入,x表示对象的数,d表示位数表示浮点数精度位数
科学计数法:例如4.3e-3表示0.0043
复数类型:
表示 z = a+bj
z.real获得实部,z.imag获得虚部
数值运算操作符
注意,在python中整数相除的结果是浮点数,若要进行整数除,应该用:a//b;a**b表示a的b次幂。
类型之间是可以共同运算的,但是会默认生成更宽类型的数据,整数与浮点数运算成浮点数,浮点数与复数运算成复数。
数值运算函数
abs(x) #输出x的绝对值
divmod(x,y) #输出(x//y, x%y)
pow(x, y[,z]) #[]表示这个参数可以省略,表示 (x**y)%z
round(x[,d]) #四舍五入函数,d表示小数点后精度,默认为0即取整
max(x1, x2...xn) #找最大值
min(x1, x2...xn) #找最小值
int(x) #将数据转换为整数
float(x) #将数据变为浮点数,增加小数部分
complex(x) #将数据变为复数,增加复数部分
type(x) #返回x的数字类型
但是复数不能转换为浮点数和整数。
示例
# day_up
def day_up(df):
day = 1
for i in range(365):
if (i % 7) in [0, 6]:
day *= (1 - 0.01)
else:
day *= (1 + df)
return day
dayfactor = 0.01;
d = 0.01
while day_up(d) < 37.78:
d += 0.001
print("B need {:.3f} every weekday".format(d))
字符串类型
字符串类型的定义
1.字符串是定义在双引号“ ”或者单引号‘ ’之间的数据类型
2.字符串类型由多种形式:单引号或者双引号表示单行,三单引号或者三双引号表示多行。前面说过三单引号可以表示注释,实际上,对于没有赋值的字符串程序在处理时会直接跳过。
3.如果要在字符串中输出引号和反斜杆要用转义符 ",但是如果字符串两边是双引号时,字符串内可以直接用单引号,反之亦然,如果用了三单引号,字符串内可以直接使用单引号或者双引号,这也是冗余表示的好处。
字符串的索引与切片
1.字符串是存在索引的,可以通过索引来访问字符串里的字符。索引从零开始,也可以通过负数从后向前访问。
2.切片的高级用法:[ :n]从开头到索引n处,反之[n : ]是从n到结尾,[n: m: k]表示从n开始到m位置每隔k步长选一个。
a = [1, 2, 3, 4, 5, 6, 7]
a[0 : 5: 2] #结果为 [1, 3, 5]
a[ : : -1] #结果为a的反转,意为从开头到结尾以步长为-1得到结果
字符串的操作符
1.字符串可以进行“+”或者“”操作:a + b 返回两字符串合并,3a返回a的三次重复的字符串
2.对于s in x 判断s是否是x的一个子串。
#输入数字来查找对应星期的英文缩写
str = "MONTUEWENTHUFRISATSUN"
x = input();
pos =3* int(x) -3;#必须做一次类型转换,因为索引必须是整数,而input返回的是字符串
print(str[pos: pos+3])
字符串的常用函数
len(x) #计算字符串x的长度
str(x) #将x增加引号变为字符串,注意这和 eval(x) 函数功能是相反的
hex(x) #返回整数x的十六进制数的字符串
oct(x) #返回整数x的八进制数的字符串
chr(x)# 返回字符x的Unicode编码
ord(x)# 返回Unicode编码x的字符
Unicode编码是一种国际性的统一编码,包含所有语言的各种字符。python使用Unicode编码。
for i in range(12):
pirnt(chr(9800 + i ), end = " ") #9800是星座符号的第一个的字符编码
字符串的处理方法
方法:实际上是对象的函数,需要通过a.b来调用。
str.upper() #所有字符大写
#"abcdEFg".upper() >>> "ABCDEFG"
str.lower() #所有字符小写
str.strip() #去除字符串首尾的空格或者指定字符
#"=n= p =n=".strip(" =n") >>> "p" 空格等号n都被去掉了
str.split() #根据指定字符分割字符串
#"a,b,c".split(",") >>> ['a', 'b', 'c']
str.replace() #字符串替代
#"python".replace('n','n123.py') >>> "python123.py"
str.center(width[,fillchar])#表示字符串居中处理,剩余部分用fillchar字符填充
#"p".center(5,"=") >>> "==p=="
str.join(str) #在字符串除最后一个字符每个字符后添加一个字符
#".".join("RIP") >>> "R.I.P" 经常用于字符串的格式化
for var in str :#字符串迭代
字符串类型的格式化
实现是通过<>.format()方法来实现。
通过“槽”来实现,槽与format中的参数是一一对应的。槽通过参数序号和format中的参数对应,同时可以通过槽中格式控制参数{序号:参数}来格式化。
"{1}:计算机{0}的CPU占有率为{2}%".format("c","2021-4-3", 10)
#>>>"2021-4-3:计算机c的CPU占有率为10%"
#填充、对齐、宽度
"{0:=^20}".format("python") #0是序号,=是填充字符,^是居中对齐,20是字符串宽度
#>>>"=======python======="
"{0:*>10}".format("777") #>代表右对齐
#>>>"=======777"
"{0:<10}".format("111") #<代表左对齐,不填就默认填充空格
#>>>"111 "
#千分符,精度,类型
"{0:,.2f}".format(12345.6789)# ,表示千分符,.2f表示浮点数精度为小数点后两位
#>>> 12,345.67
"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)
#分别表示二进制,Unicode,十进制,八进制,十六进制,大写十六进制
#>>> '110101001,Ʃ,425,651,1a9,1A9'
"{0:e},{0:E},{0:f},{0:%}".format(3.14)
#表示科学计数法,大写科学计数法,浮点数形式,百分数形式
#>>>'3.140000e+00,3.140000E+00,3.140000,314.000000%'
time库的应用
time库是处理实践的标准库,可以获取系统时间,计数等
主要有三类函数:时间获取类、时间格式化、程序计时
时间获取
1.time函数
time.time()可以获取一个时间戳,即计算机内部的时间值,代表的是从1970年到现在的以秒为单位的时间
2.ctime()函数
time.ctime()可以获取一个最易读的时间
3.gmtime()
time.gmtiem()可以获取一个作为系统最容易处理的时间格式。
import time
time.time()
#>>>1617457218.2504568
time.ctime()
#>>>'Sat Apr 3 21:41:09 2021'
time.gmtime()
#>>>time.struct_time(tm_year=2021, tm_mon=4, tm_mday=3, tm_hour=13, tm_min=41, tm_sec=28, tm_wday=5, tm_yday=93, tm_isdst=0)
时间格式化
格式化即把时间以特定的模板进行展示,通过相应的模板控制符进行模板的控制。
通过time.strftime(tmp, ts)函数来实现
import time
t = time.gmtime()
timestr = time.strftime("%Y-%m-%d %H:%M:%s",t)
#t实际上就是time.gmtime()获得的时间类
t = time.strptime(timestr,"%Y-%m-%d %H:%M:%s")
#这个函数能把字符串变为系统可以处理的时间类
格式化的参数:
| 参数 | 含义 | 示例 |
|---|---|---|
| %Y | 年份 | 0000 ~ 9999 |
| %m | 月份 | 01~12 |
| %B | 月份全称 | January ~ December |
| %b | 月份简写 | Jan ~ Dec |
| %d | 日期 | 1~31 |
| %A | 星期全称 | Monday ~ Sunday |
| %a | 星期简写 | Mon ~ Sun |
| %H | 24小时制 | 0 ~23 |
| %I | 12小时制 | 1 ~ 12 |
| %p | 上午/下午 | AM/PM |
| %M | 分钟 | 0 ~59 |
| %S | 秒 | 0 ~ 59 |
程序计时应用
程序计时指测量时间起止的过程。
主要包含两个函数的应用:
| 函数 | 示例 |
|---|---|
| time.perf_counter() | 这是一个计时函数,单位为秒通常使用时需要定义起止时间相减得到结果 |
| time.sleep(x) | 这个函数会使得程序在该处等待x秒再继续执行 |
进度条实例
import time
scale = 50
print("{:-^25}".format("程序开始"))
start = time.perf_counter()
for i in range(scale + 1):
a = i * "*"
b = (scale - i) * "-"
c = (i/scale)
end = time.perf_counter()
print("\r{:-^20.2%}[{}>{}]{:.2f}s".format(c, a, b, end-start), end=" ")
time.sleep(0.1)
print("\n"+"程序结束".center(scale//2, "-"))
对于这个实例,有几个问题需要提一下,其一是进度条的刷新是通过每次执行”\r“使得行清零重新输出得到的,因此每次输出不能换行,默认条件下print()中的end="\n",即换行,因而此处应该附带上end=""保证其不换行。这样才能做到反复刷新。
编程作业
三次方程格式化
a = input()
a = eval(a+"**3")
a = str(a)
if( len(a) >=20):
print(a)
else:
print(a.center(20, "-"))
星号三角形
n = int(input())
for i in range(n//2+1):
print(((2*i+1)*"*").center(n, " "))
凯撒密码
import string
alphabet_l = "abcdefghijklmnopqrstuvwxyz"
alphabet_h = alphabet_l.upper()
a = input()
for i in a:
if(i in alphabet_l):
i = alphabet_l[(alphabet_l.find(i)+3)%26]
if(i in alphabet_h):
i = alphabet_h[(alphabet_h.find(i) + 3) % 26]
print(i, end="")
以上习题为python123平台可练习
python123练习网址
以上内容为学习嵩天老师的python语言程序设计第三周内容的笔记。感谢嵩天老师的团队给我们带来这样优质的课程。

浙公网安备 33010602011771号