【笔记】《python语言程序设计》——基本数据类型
一、前言
学习就是一个不断的自下而上,自上而下的过程。
前段时间,学着用python实现网站的数据爬取,隐约get到python的一些语法和用法,感觉就是语法不难,关键在于解决问题的思维。
这是需求驱动后的学习。接下来,就需要对python进行系统地了解。
很早之前搜知乎的时候,就搜到MOOC上的一门《python语言程序设计》课程,讲得很好,而且,我还下载了课件,溜了一遍,感觉就挺有趣的。
趁着有了实战经验,就把这门入门课刷了一遍。果然是门好课!很适合小白入门,并系统学习,整个教学过程循序渐进,深入浅出,提纲挈领,很有意思!
课程是北京理工大学嵩天老师的《python语言程序设计》课程,现在已经开了11次课了。课程每个小视频短则几分钟,最长也不超过20分钟,不容易劝退。每章讲解有复习回顾及小结,在平台python123上有每章的练习和测试,直接反馈结果,激发继续学下去的兴趣。
个人感觉,老师说话速度慢了些,调成了2倍速播放,然后,花了大约3天的时间,把所有的视频,课件,练习和测试都刷了一遍,感觉对python的了解更系统了!
趁热打铁,把每章的知识点和练习、测试再进行整理回顾一下。
以下内容均来自课程:《python语言程序设计》 及平台python123,感兴趣的看课程视频,亲自练习,效果更好~
二、知识点
1. 数字类型及操作
-
整数类型:
①可正可负,没有取值范围限制;
②
pow(x,y)
函数:计算Xy,想算多大算多大;③4种进制表示形式:十进制;二进制(以0b或0B开头);八进制(以0o或0O开头);十六进制(以0x或0X开头);
-
浮点数类型:
①带有小数点及小数的数字;
②浮点数取值范围和小数精度都存在限制,但常规计算可忽略;
③取值范围数量级-10307至10308,精度数量级10-16;
④浮点数间运算存在不确定尾数,不是bug;
⑤
round(x,y)
:对x四舍五入,d是小数截取位数;浮点数间运算与比较用round()
函数辅助;不确定尾数一般发生在10-16左右,round()
十分有效;⑥浮点数可以用科学计数法表示:使用字母
e
或E
作为幂的符号,以10为基数。例如,4.3e-3
值为0.0043;9.6E5
值为960000.0; -
复数类型:
①
a+bj
被称为复数,其中,a
为实部,b
为虚部;②例如,
z=1.23e-4+5.6e+89j
,z.real
获得实部;z.imag
获得虚部; -
数值运算操作符:
①操作符是完成运算的一种符号体系
操作符及使用 描述 x+y
x与y之和 x-y
x与y之差 x*y
x与y之积 x/y
x与y之商, 10/3
结果是3.3333333333333335x//y
x与y的整数商, 10//3
结果是3+x
x本身 -y
y的负值 x%y
余数,模运算, 10%3
结果是1x**y
幂函数,x的y次幂;当y是小数时,开方运算 10**0.5
结果是10的平方根x op =y
增强赋值操作符; x+=y
,x-=y
,x*=y
,x/=y
,x//=y
,x%=y
,x**=y
②类型间可以进行混合运算,生成结果为“最宽”类型;整数→浮点数→复数;例如,
123+4.0=127.0
-
数值运算函数:
①一些以函数形式提供的数值运算功能
函数及使用 描述 abs(x)
绝对值, abs(-10.01)
结果为10.01divmod(x,y)
商余,同时输出商和余数, divmod(10,3)
结果为(3,1)pow(x,y[,z])
幂余, (x**y)%z
,[..]
表示参数z可省略round(x[,d])
四舍五入,d是保留小数位数,默认值为0, round(-10.123,2)
结果为-10.12max(x1,x2,…,xn)
最大值,n不限 min(x1,x2,…,xn)
最小值,n不限 int(x)
将x变成整数,舍弃小数部分, int(123.45)
和int(‘123’)
结果分别为123.45和123float(x)
将x变成浮点数,增加小数部分, float(12)
和float(‘1.23’)
结果分别为12和1.23complex(x)
将x变成复数,增加虚数部分; complex(4)
和complex(‘4’)
结果为4+0j
2. 实例3:天天向上的力量
描述:工作日模式要努力到什么水平,才能与每天努力1%一样?
A君:一年365天,每天进步1%,不停歇
B君:一年365天,每周工作5天休息2天,休息日下降1%,要多努力?
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)<pow((1+0.01),365):
dayfactor+=0.001
print('工作日的努力参数是:{:.3f}'.format(dayfactor))
3. 字符串类型及操作
-
字符串的表示:
①由0个或多个字符组成的有序字符序列:字符串由一对单引号或一对双引号表示;字符串是字符的有序序列,可以对其中的字符进行索引;
②字符串有2类共4种表示方法:由1对单引号或双引号表示,仅表示单行字符串;由1对三单引号或三双引号表示,克表示多行字符串;
③字符串中包含双引号:
'这里有个双引号"'
④字符串中包含单引号:
"这里有个单引号'"
⑤字符串中既有单引号又有双引号:
'''这里既有单引号'又有双引号"'''
⑥字符串的序号:正向递增序号和反向递件序号;
⑦字符串的使用:使用
[]
获取字符串中一个或多个字符。索引:<字符串>[M]
;切片:<字符串>[M:N]
(M缺失表至开头,N缺失表至结尾);<字符串>[M:N:K]
,根据步长K对字符串进行切片;"零一二三四五六七八九十"[1:8:2]
结果是“一三五七”;"零一二三四五六七八九十"[::-1]
结果是“十九八七六五四三二一零”⑧字符串的特殊字符:使用转义符
\
,\b
表示回退;\n
表换行(光标移动到下行首;\r
表示回车(光标移动到本行首) -
字符串操作符
操作符及使用 描述 x+y
连接两个字符串x和y n*x
或x*n
复制n次字符串x x in s
如果x是s的子串,返回True,否则返回False -
字符串处理函数
函数及使用 描述 len(x)
返回字符串的长度 str(x)
任意类型x所对应的字符串形式 hex(x)
或oct(x)
整数x的十六进制或八进制小写形式字符串 chr(x)
x为Unicode编码,返回其对应的字符 ord(x)
x为字符,返回其对应的Unicode编码 -
字符串处理方法
方法及使用 描述 str.lower()
或str.upper()
返回字符串的副本,全部字符小写或大写 str.split(sep=None)
返回一个列表,由str根据sep被分隔的部分组成 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 -
字符串类型的格式化
①槽
②格式控制
格式控制.png4.time库的使用
-
time库基本介绍:Python中处理时间的标准库
①计算机时间的表达
②提供获取系统时间并格式化输出功能
③提供系统级精确计时功能,用于程序性能分析
-
时间获取
函数 描述 time()
获取当前时间戳,即计算机内部时间值,浮点数 ctime()
获取当前时间并以易读方式表示,返回字符串 gmtime()
获取当前时间,表示为计算机可处理的时间格式 -
时间格式化
①格式化函数
函数 描述 strftime(tpl,ts)
tpl是格式化模板字符串,用来定义输出效果;<br />ts是计算机内部时间类型变量<br />变成字符串; strptime(str,tpl)
str是字符串形式的时间值;<br />tpl是格式化模板字符串,用来定义输入效果<br />变成计算机可处理的时间格式 ②格式化控制符
格式化字符串 | 日期/时间说明 | 值范围和实例 |
---|---|---|
%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 |
-
程序计时
函数 描述 perf_counter()
返回一个CPU级别的精确使劲计数值,单位为秒;<br />由于这个计数值起点不确定,连续调用差值才有意义 sleep(s)
s是拟休眠的时间,单位是秒,可以是浮点数
5. 实例4:文本进度条
描述:采用字符串方式打印可以动态变化的文本进度条,进度条需要能在一行中逐渐变化
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('执行结束'.center(scale//2,'-'))
三、练习
1. 实例3:天天向上的力量
同上
2.实例4:文本进度条
同上
3.三次方格式化
描述:获得用户输入的一个数字,可能是整数或浮点数,a,计算a的三次方值,并打印输出。
输出结果采用宽度20个字符、居中输出、多余字符采用减号(-)填充。
如果结果超过20个字符,则以结果宽度为准。
num=input()
print(str(pow(eval(num),3)).center(20,'-'))
4. 星号三角形
描述:读入一个整数N,N是奇数,输出由星号字符组成的等边三角形,要求:
第1行1个星号,第2行3个星号,第3行5个星号,依次类推,最后一行共N的星号。
n=eval(input())
for i in range((n+1)//2):
star='*'*i*2+'*'
print(star.center(n,' '))
5. 恺撒密码
描述:恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:
原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
对于原文字符P,其密文字符C满足如下条件:C=(P+3) mod 26
上述是凯撒密码的加密方法,解密方法反之,即:P=(C-3) mod 26
假设用户可能使用的输入包含大小写字母azAZ、空格和特殊符号,请编写一个程序,对输入字符串进行恺撒密码加密,直接输出结果,其中空格不用进行加密处理。使用input()获得输入。
w=input()
c=''
for i in w:
o=ord(i)
if (o>=65)&(o<=90):
c=c+chr((o-62)%26+65)
elif (o>=97)&(o<=122):
c=c+chr((o-94)%26+97)
else:
c=c+i
print(c)
四、测试
1.选择题
-
pow(x, 0.5)能够计算x的平方根,计算负数的平方根将产生:
A 无输出
B ValueError错误
C 程序崩溃
D 复数
>>> pow(-1, 0.5)
(6.123233995736766e-17+1j)
-
以下关于字符串.strip()方法功能说明正确的是:
A 连接两个字符串序列
B 去掉字符串两侧指定字符
C 替换字符串中特定字符
D 按照指定字符分割字符串为数组
"去掉字符串两侧指定字符"对应功能是.strip()
"按照指定字符分割字符串为数组"对应功能是.split()
"替换字符串中特定字符"对应功能是.replace()
"连接两个字符串序列"对应功能是+操作符
-
字符串是一个连续的字符序列,哪个选项可以实现打印字符信息的换行?
A 使用\n B 使用空格 C 使用“\换行” D 使用转义符\\
换行符\n,与C语言中一致。
-
val=pow(2,1000),请用一行代码返回val结果的长度值。
A 以后均不正确
B len(str(val))
C len(val)
D len(pow(2,1000))
len(str(val))首先通过str(val)将数字类型val变成字符串,再通过len()获得字符串长度,即val的数字个数。
-
下面关于time库引用不正确的是?
A from * import time
B from time import strftime
C from time import *
D import time
from * import time 应该是: from time import *。
-
哪个选项不是Python语言的整数类型?
A 88 B 0x9a C 0E99 D 0B1010
十进制:一般表示
二进制:0b 或 0B 开头
八进制:0o 或 0O 开头
十六进制:0x 或 0X 开头
没有0E开头
-
关于整数类型的4种进制表示,哪个选项的描述是正确的?
A 二进制、八进制、十进制、十六进制
B 二进制、四进制、八进制、十六进制
C 二进制、四进制、八进制、十进制
D 二进制、四进制、十进制、十六进制
Python不支持四进制整数。
-
哪个选项是Python语言%运算符的含义?
A x的y次幂
B x与y之商
C x与y之商的余数
D x与y的整数商
%是取余数,与C语言相同。
-
哪个选项是下面代码的执行结果?
name="Python语言程序设计课程" print(name[0],name[2:-2],name[-1])
A P thon语言程序设计 课
B P thon语言程序设计 程
C P thon语言程序设计课 程
D P thon语言程序设计课 课
s[N:M]表示对字符串s的切片操作,从N到M,但不包含M。
-
哪个选项是下面代码的执行结果?
s='PYTHON' print("{0:3}".format(s))
A PYTHON
B PYTHON
C PYTH
D PYT
{0:3}表示输出的宽度是3,但如果字符串超过长度3,则以字符串长度显示。
2.程序设计题
- 平方根格式化
描述:获得用户输入的一个整数a,计算a的平方根,保留小数点后3位,并打印输出。
输出结果采用宽度30个字符、右对齐输出、多余字符采用加号(+)填充。
如果结果超过30个字符,则以结果宽度为准。
a=pow(eval(input()),0.5)
print('{:+>30}'.format('{:.3f}'.format(a)))
- 字符串分段组合
描述:获得输入的一个字符串s,以字符减号(-)分割s,将其中首尾两段用加号(+)组合后输出
s=input()
print(s.split('-')[0]+'+'+s.split('-')[-1])
【笔记】《python语言程序设计》—Python基本语法元素