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 题,时间三种形态的正反两条翻译线我总算走全了------以后不管拿到"文本时间"还是"秒数时间",都知道怎么换乘了。

相关推荐
聪明蛋子哟1 小时前
Python与Java双栈实战:手撸一个支持RAG与Tool Calling的高性能Agent框架
java·开发语言·python
欣欣之王来了1 小时前
Python入门:Jupyter Notebook安装与使用指南
学习·架构·面向对象·项目·python教程
databook1 小时前
什么是范数?用 NumPy 动手算一遍就明白了
python·数学·numpy
JWASX1 小时前
Java 转 go 学习 - kitex(2)
学习·golang
wdfk_prog1 小时前
LWIP教程 03:从 `low_level_input()` 到 `pbuf_free()`——`pbuf` 的数据视图、Chain 与引用计数
运维·网络·笔记·学习
朝朝辞暮i2 小时前
VLA 系统学习第 5 课:神经网络的参数到底是什么?——从 nn.Linear 真正理解 W、 b 和 Gradient
人工智能·python·深度学习·神经网络·vla
XZ-0700012 小时前
week7-文本
python
Java后端的Ai之路2 小时前
01-React基础教程
开发语言·前端·python·react.js·前端框架
我命由我123452 小时前
Photoshop - Photoshop 设计概念
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·学习方法