Python基础语法练习题(53-54)
接着下面两题。第五十三题遍历打印任意区间耗时计算#编写一个程序该程序将遍历用户指定区间内的所有整数同时计算并输出整个遍历过程所消耗的总时间 #导入time模块 import time #获取用户输入的区间 start int(input(请输入区间开始值)) end int(input(请输入区间结束值)) #定义变量保存循环开始时间perf_counter 是单调高精度计时器比 time.time() 更适合统计代码耗时 start_time time.perf_counter() #定义变量保存遍历过程中的累加结果 total 0 for i in range(start,end 1): total i # 只计算不打印避免控制台输出占据绝大部分耗时 #定义变量保存循环结束时间 end_time time.perf_counter() print(遍历过程所消耗的总时间,end_time - start_time)代码思路分析如下我的设计还是三明治掐表但换了块更准的表框架和 52 题一样干活前按一次表、干活后按一次表相减即耗时。这题我做了三处升级——第一区间交给用户。 两次 int(input()) 拿到起止值range(start, end 1) 现场铺名单。注意那个 1range 左含右不含不加一拍用户输入的结束值就被漏掉了。第二循环体里不 print改成累加。 52 题我发现耗时大头是屏幕输出而不是循环本身所以这次把 print(i) 换成 total i——循环照样满负荷转但不产生任何 I/O量出来才是纯计算的真实耗时。同时 total 变量保证了循环不是空转累加器套路和 49 题验证码拼接一模一样。第三表换成了 time.perf_counter()。 time.time() 是墙上时钟精度一般还可能被系统时间调整干扰perf_counter 是专门的高精度单调计时器只为测量经过了多久而生测毫秒级的代码段比 time.time() 靠谱得多。这也是我第一次体会到同样是掐表工具还分业余和专业。总结一句话问出区间、加一拍铺名单、用累加代替打印、用专业秒表代替日历。这题让我摸到了性能测试的门槛——想让数字可信就得先排除干扰项再选对量具。第五十四题时间字符串转时间戳#给定一个表示时间的字符串要求将其转化为以秒为单位的整数时间戳 #导入time模块 import time #时间字符串(格式1) a1 2025-4-10 23:40:00 #使用time.strptime()将时间字符串转换为时间数组(步骤1) time_array time.strptime(a1, %Y-%m-%d %H:%M:%S) print(time_array) #使用time.mktime()将时间数组转换为时间戳(步骤2) timestamp int(time.mktime(time_array)) print(timestamp) #时间字符串(格式2) a2 2025/4/10 23:40:00 #格式同上修改占位符格式-为/即可 time_array time.strptime(a2, %Y/%m/%d %H:%M:%S) print(time_array) timestamp int(time.mktime(time_array)) print(timestamp)代码思路分析如下我的思路倒着走 51 题的翻译流水线51 题我练的是时间戳 → struct_time → 字符串的正向翻译这题要求反着来拿到人读的字符串最终产出机器读的秒数。但字符串和秒数之间没法一步到位必须借 struct_time 当中转站所以整个程序就是两步走步骤1strptime(字符串, 格式) —— 按图索骥拆零件。 光给字符串它不知道怎么拆我得提供一张模板告诉它哪个位置是什么%Y 四位年、%m 月、%d 日、%H:%M:%S 时分秒。strptime 照模板把字符串拆成 struct_time——函数名里的 p 就是 parse解析正好和 51 题的 asctime、ctime 形成反向对偶。步骤2mktime(struct_time) —— 组装回时间戳。 mk 即 make把零件时间制造回自 1970 年起的秒数。结果默认带小数我外面套了个 int()按题意取整。一个细节格式串必须和字符串长得一模一样程序里我用两种格式2025-4-10 和 2025/4/10各走了一遍流程代码唯一的改动是把模板里的 - 换成 /。这让我踩过点后明白占位符的分隔符不是摆设必须和原文严格对应——模板写 %Y-%m-%d 却喂给它 2025/4/10strptime 会当场抛 ValueError。另外 %m、%d 对 4 这种一位数也宽容补不补零都能认。总结一句话strptime 拆、mktime 装struct_time 当中间人。加上 51 题时间三种形态的正反两条翻译线我总算走全了——以后不管拿到文本时间还是秒数时间都知道怎么换乘了。