主要是time库,分支结构,循环结构,random库,报错处理
Time库
函数一览
time.time()
time.ctime()
time.gmtime
time.strftime(tpl,ts)
time.strptime(str.tpl)
time.perf_counter()
time.sleep(s)
获取时间
time.time()
获取当前电脑的时间戳,即计算机内部时间值,以浮点数形式输出,是一个很长很奇怪的数字。
其表示的意义是从1970年1月1日0点0分开始,到当前时间的以秒为单位的数值……所以它有什么用
time.ctime()
这个比上一个靠谱多了,这个输出的形式是一个字符串,输出的是人类易读的形式
输出的样子是这样的:Mon Jul 29 19:28:12 2019
time.gmtime()
这个获取时间的方法可以获得计算机可以处理的时间格式,是一种结构体形式(这里是这么叫吗?)print结果输出如下:time.struct_time(tm_year=2019, tm_mon=7, tm_mday=29, tm_hour=11, tm_min=29, tm_sec=34, tm_wday=0, tm_yday=210, tm_isdst=0)
这个函数获得的值可以在其它函数中使用
时间格式化
格式化字符
所有的格式化模板字符串都是以%+字符
的形式构成的,用在相关函数中
%Y
:表示年份,取值范围0000~9999%m
:表示月份,取值范围01~12%B
:表示月份的名称,取值范围January~December%b
:表示月份名称的缩写,取值范围Jan~Dec%d
:表示日期,取值范围01~31%A
:表示星期几,取值范围Monday~Sunday%a
:表示星期几:取值范围Mon~Sun%H
:表示小时(24小时制):01~24%I
:表示小时(12小时制):01~12%p
:表示上下午:AM或PM%M
:表示分钟:00~59%S
:表示秒:00~59
time.strftime(tpl,ts)
其中tpl是格式化模板字符串,用来定义输出效果;ts是计算机内部时间类型变量(即通过gmtime()得到的结果)
tpl必须以字符串的形式输入,除了格式化字符外其它的字符都会保留,例:
t=time.gmtime()
print(time.strftime("%Y-%m-%d %H:%M:%S", t)
结果会输出2019-07-29 11:53:16
这个时区不是中国的时区,所以会有差别
time.strptime(str,tpl)
与time.strftime作用相反,这个函数是把时间转化为gmtime那样结构体的形式
str的输入是以字符串的形式,并在tpl中说明这是怎样形式的字符串,然后返回结构体,如:
timeStr='2019-7-29 20:53:49
print(time.strptime(timeStr, "%Y-%m-%d %H:%M:%S")
输出结果time.struct_time(tm_year=2019, tm_mon=7, tm_mday=29, tm_hour=20, tm_min=53, tm_sec=49, tm_wday=0, tm_yday=210, tm_isdst=0)
计时
time.perf_counter()
精准的测量一个时间值,单位为秒
每次调用返回一个当前时间值,所以如果想计时要调用两次
start = time.perf_counter()
end = time.perf_counter()
time = end-start
sleep(s)
休眠若干秒,单位是秒,可以是浮点数
分支结构
单分支结构
if <条件>:
<语句>
True执行,False不执行,当然也可以if True:
这样来写
二分支结构
if <条件>:
<语句1>
else:
<语句2>
此外要知道另一种紧凑形式的写法
<语句1> if <条件> else <语句2>
比如可以用在一个print里,例:一个猜谜的结果可以这么写
print("猜{}了".format("对" if <条件> else "错"))
这种紧凑形式不支持在语句中进行赋值等操作,只支持表达式形式
多分支结构
if <条件1>:
<语句1>
elif <条件2>:
<语句2>
elif <条件...>:
<语句...>
else :
<语句n>
注意取值范围的覆盖就好了
操作符
== ; != ; > ; < ; <= ; >=
A and B ; A or B ; not A
上面和C一样,下面是与或非
可以有if not True
这样的写法,即False
循环
与C类似
for … in …
for <循环变量> in <遍历结构> :
<语句块>
for i in range(N)
O(N)for i in range(M , N [,K] )
for c in str
字符串的遍历,可以遍历字符串中每个字符进行操作,c可以用任意字符,只是习惯for item in ls
对列表遍历,ls是一个列表,item可以用任意字符,只是习惯for line in fi
对文件遍历,fi是一个文件标识符,遍历其每行,进行循环
while …
while <条件>:
<语句块>
如果是while True这样的条件的话,可以用ctrl+c来退出
break和continue
与C基本一样
break跳出本个最内层的循环体,执行循环后的语句
continue跳出本次循环,执行下一次循环
都可以与while和for搭配使用
for … in …else与while …else
for ... in ... :
<语句块1>
else :
<语句块2>
while ...:
<语句块1>
else :
<语句块2>
仅当循环中出现break时有用,当循环没有被break跳出时,执行else后的语句,continue不会触发
random库
使用随机数的标准库
基本随机数函数
random.seed()
random.random()
---
扩展随机数函数
random.randint()
random.getrandbits()
random.uniform()
random.randrange()
random.choice()
random.shuffle()
与C中的随机数函数类似,它并不能产生真正的随机数,而是通过某种算法产生伪随机数,如果在给定相同的随机数种子情况下,则每次数字出现的顺序是一定的
random.seed()
初始化给定的随机数种子,不填时默认使用当前系统时间,在不使用seed函数直接使用random.random时,也默认使用系统时间做种子
种子只需要调用一次,不使用seed函数时,也是按第一次调用random函数时的系统时间做种子
如果多次调用seed,就每次按照新的seed给出随机数,使用相同的seed产生相同的序列
random.random()
随机产生一个[0.0 ,1.0)之间的小数
random.randint(a,b)
生成一个[a,b]之间的整数
random.randrange(m,n[,k])
生成一个[m,n)生成一个mn之间以k为步长的随机整数
如random.randrange(10,100,10)
结果会出现10,20…中的某一个
random.getrandbits(k)
生成一个k比特长的随机整数
random.uniform(a,b)
生成一个[a,b]之间的随机小数
random.choice(seq)
从序列seq中随机选择一个元素
如random.choice([0,1,2,3,4,5,6,7,8,9])
从中随机选择一个
random.shuffle(seq)
将序列seq中的元素随机排列,返回打乱后的序列
报错处理
使用保留字try ; except [; else ; finally]
即有可能报错的地方使用,比如
a=input("请输入一个整数")
print(a**2)
如果用户输入了一个字符,程序就会报错,所以可以使用try except
try :
a=input("请输入一个整数")
print(a**2)
except :
print("请输入一个整数")
这样当第一部分报错时,程序依然可以进行,但是会执行except后的内容
也可以在except后加报错的类型,如except NameError
这样仅当出现NameError这样的错误时才执行except后的语句
还有一种样子是
try :
<语句1>
except :
<语句2>
else :
<语句3>
finally :
<语句4>
else仅当在<语句1>执行成功,未执行<语句2>时执行,finally不管怎样都执行时
else的用法与循环中else的用法一样