Case1 天天向上的力量:
工作日工作的力量:使用for循环语句(注意与c++的使用不同,在for和if后面都要加冒号)
这个程序自己写的时候没有保留两位小数是因为什么呢?写成了{:2f},少了一个.,应该是{:.2f};
#daydayup_workday
dayup=1.0
dayfactor = 0.01
for i in range(365):
if i%7 in [6,0]:
dayup *= (1-dayfactor)
else:
dayup *= 1+dayfactor
print("工作日的力量:{:.2f}".format(dayup))
问:工作日要进步多少才能与每天都进步的程度一样?
#daydayupQ4.py
def dayUp(df): #定义一个函数用于计算“力量”
dayup = 1;
for i in range(365):
if i%7 in [0,6]:
dayup *= 1-0.01
else:
dayup *= 1+df
return dayup
df = 0.01
while dayUp(df)<37.78:
df += 0.001
print("工作日的努力参数为:{:.3f}".format(df))
字符串格式化输出:
case2 如何产生一个进度条?
需求分析:采用字符串方式打印可以动态变化的文本进度条,并且进度条需要能在一行中逐渐变化
问题:
Q1:如何获得文本进度条的变化时间?sleep
单行动态刷新:
刷新的本质:用后打印的字符覆盖之前打印的字符
不能换行:print()始终在同一行输出 end = ''
要可以回退,打印后光标回到之前的位置 \r实现
import time #引入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.05)
print("\n"+"执行结束".center(scale//2,'-'))
time库函数
时间获取: time() ctime() gmtime()
时间格式化: strftime() strptime()
程序计时: 测量时间:perf_counter() ; 产生时间sleep()
>>> import time #引入time库
>>> time.time() #获取当前时间戳,即计算机内部时间;为浮点数
1523097843.3245733
>>> time.ctime() #获取当前时间并以易读格式表示,返回字符串
'Sat Apr 7 18:44:14 2018'
>>> time.gmtime() #获取当前时间,表示为计算机可处理的时间格式
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=7, tm_hour=10, tm_min=44, tm_sec=25, tm_wday=5, tm_yday=97, tm_isdst=0)
>>> t = time.gmtime()
>>> time.strftime("%Y-%m-d% %H:%M:%S",t) #将计算机可处理的时间格式表示为定制的时间格式
>>> time.strftime("%Y-%m-%d %H:%M:%S",t)
'2018-04-07 10:45:01'
>>> timestr = time.strftime("%Y-%m-%d %H:%M:%S",t)
>>> time.strptime(timestr,"%Y-%m-%d %H:%M:%S")
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=7, tm_hour=10, tm_min=45, tm_sec=1, tm_wday=5, tm_yday=97, tm_isdst=-1)
strftime()
perf_counter() :返回一个CPU级别的精确时间计数值,单位为s,这个计数值起点不确定,所以一般是采用差值
sleep(s) : s拟休眠的时间,单位是s,可以是浮点数// 程序将等待3.3秒后再退出。