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) 现场铺名单。注意那个 + 1:range 左含右不含,不加一拍,用户输入的结束值就被漏掉了。

第二,循环体里不 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 当中转站,所以整个程序就是两步走:

步骤1:strptime(字符串, 格式) ------ 按图索骥拆零件。 光给字符串它不知道怎么拆,我得提供一张"模板"告诉它哪个位置是什么:%Y 四位年、%m 月、%d 日、%H:%M:%S 时分秒。strptime 照模板把字符串拆成 struct_time------函数名里的 p 就是 parse(解析),正好和 51 题的 asctime、ctime 形成反向对偶。

步骤2:mktime(struct_time) ------ 组装回时间戳。 "mk" 即 make,把零件时间制造回"自 1970 年起的秒数"。结果默认带小数,我外面套了个 int(),按题意取整。

一个细节:格式串必须和字符串"长得一模一样"

程序里我用两种格式(2025-4-10 和 2025/4/10)各走了一遍流程,代码唯一的改动是把模板里的 - 换成 /。这让我踩过点后明白:占位符的分隔符不是摆设,必须和原文严格对应------模板写 %Y-%m-%d 却喂给它 2025/4/10,strptime 会当场抛 ValueError。另外 %m、%d 对 4 这种一位数也宽容,补不补零都能认。

总结

一句话:strptime 拆、mktime 装,struct_time 当中间人。加上 51 题,时间三种形态的正反两条翻译线我总算走全了------以后不管拿到"文本时间"还是"秒数时间",都知道怎么换乘了。

相关推荐
comyccccc17 分钟前
STM32F407VET6核心板的部分电路绘制学习笔记
笔记·stm32·学习
得物技术18 分钟前
Jev 实战:为AI工作流引入轻量决策层 x10倍提速|得物技术
python·llm·测试
叼烟扛炮22 分钟前
Linux 学习笔记(三十六):并发进阶——读写锁 vs 自旋锁,到底怎么选?
linux·运维·服务器·笔记·学习
reasonsummer26 分钟前
【教学类-07-12】20261028大3班破译电话号码html(手机按钮版本)
python·html
是隼人31 分钟前
buuctf-pwn [极客大挑战 2019]Not Bad(orw+jmp)题解(学习过程持续更新)
学习·安全·pwn入门·ctf入门
摇滚侠32 分钟前
《On Java 中文版 基础卷》阅读笔记 复用 13
java·笔记·python
用户2986985301438 分钟前
Python 将 Word 文档转换为 XML 的实践要点
后端·python·api
薛之谦_41 分钟前
用 Java 实现阿里云式 IAM 子用户管理:架构设计与表结构详解
java·python·阿里云
2601_9520477942 分钟前
金蝶云星空销售订单附件查询接口权威教程(BOS_Attachment)
python·机器人·钉钉
神仙别闹1 小时前
基于Python Yolo实现绝缘子目标检测程序
python·yolo·目标检测