Python快速上手练习题
本期内容比较简单,主要是time模块的几个常用函数可以留意一下
practice8
题意
输出 9*9 乘法口诀表。
分析
分行与列考虑,共9行9列,i控制行,j控制列。
这里可以留意一下print函数参数控制的方式 “一段格式”+%+参数表,如果没有后面的参数表就正常输出字符串,
有参数列表就一定要使参数个数和前面格式控制符的个数相等,不然会报错
以下为常用数据类型:
%d 对应 整数
%s 对应 字符串
%f 对应 浮点数
%.2f 控制小数点右边位数的格式,%.位数f (注意有个’.’)
代码
for i in range(1,10):
for j in range(1,i+1):
print("%d*%d=%d"%(j,i,i*j),end=" ")#end=''这个参数可以控制print结尾的字符,默认值为换行符
print("") #这里就体现了end的默认值,换行
practice9
题目
暂停一秒输出。
分析
调用time库中sleep()函数,下面还会介绍一些常用的其他函数,具体看代码
代码
import time
for i in range(1,10):
print("现在是第%d秒"%(i))
time.sleep(1)
#以下为time库中的一些其他有意思的函数
print(time.ctime()) #以可读字符串方式返回时间
print(time.time()) #以浮点数形式返回时间
print(time.gmtime()) #返回计算机可处理类型的时间
print(time.strftime('%Y-%m-%d %H:%M:%S',time.gmtime())) #得到一个格式化的时间
start1 = time.perf_counter() #返回当前时间(浮点数形式),比time()精细得多,统计sleep的时间
time.sleep(2)
end1 = time.perf_counter()
print("perf_counter()的结果",end1-start1)
start2 = time.process_time() #返回当前时间(浮点数形式),比time()精细得多,不统计sleep的时间
time.sleep(2)
end2 = time.process_time()
print("process_time()的结果",end2-start2)
practice10
题目
暂停一秒输出,并格式化当前时间。
分析
参照practice9
不过还是给一下代码
代码
import time
print(time.strftime('%Y-%m-%d %H:%M:%S',time.gmtime()))
time.sleep(1)
print(time.strftime('%Y-%m-%d %H:%M:%S',time.gmtime()))
practice11
题意
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
分析
规律为1,1,2,3,5,8…是熟悉的斐波那契
具体求法可参照practice6,可以自己试试速度,这里放最快的方法
代码
mod = 1000000007 #斐波那契数列后面会极大,为了防止数据过大就模这个数,用了hash的思想来判断结果是否正确
class Matrix:
def __init__(self,a1=0,a2=0,b1=0,b2=0): #初始化矩阵
self.data = [[0 for i in range(2)]for j in range(2)] #python中定义类的数据成员要放在init函数中,放在外面的相当于静态成员变量,类似与c++中加了static的数据成员
self.data[0][0] = a1
self.data[0][1] = a2
self.data[1][0] = b1
self.data[1][1] = b2
def __mul__(self,other): #矩阵相乘的运算符重载
ret = Matrix()
for i in range(2):
for j in range(2):
for k in range(2):
ret.data[i][j] += (self.data[i][k] * other.data[k][j])%mod
ret.data[i][j] %= mod
return ret
def q_pow(a,b): #快速幂,复杂度为O(logn)
ret = Matrix(1,0,0,1)
while b!=0:
if b & 1:
ret = ret * a
a = a*a
b //= 2
return ret
identity = Matrix(1,1,1,0)
print("1\n1")
for i in range(1,40):
ans = q_pow(identity,i)
print(ans.data[0][0]+ans.data[0][1])