Python如何获取循环输出首尾值并将秒级结果改为分钟级输出?
解决方案
实现思路
- 针对仅取首尾符合条件值的需求:新增两个变量分别存储首次命中
eph < 0条件的结果、末次命中该条件的结果,遍历过程中不再逐次打印,仅更新存储变量,遍历结束后统一输出两个存储值即可 - 针对输出频率调整为每分钟一次的需求:将原循环按秒遍历的逻辑改为按60秒步长遍历,单次迭代对应1分钟的时间间隔,同时降低无效遍历次数提升运行效率
修改后完整代码
import swisseph as swe # 原代码遗漏的依赖导入,按需补充即可 from datetime import datetime, timedelta from astropy.time import Time start_date_time = datetime(2021, 1, 30, 15, 00, 00) end_date_time = datetime(2021,1, 30,16,00,00) # 计算总分钟数,按分钟为步长遍历 time_diff_min = int((end_date_time - start_date_time).total_seconds() // 60) first_res = None last_res = None for i in range(time_diff_min + 1): # 每次迭代加60秒,对应1分钟间隔 day = start_date_time + timedelta(seconds=i * 60) dt = Time(day) jd = dt.jd eph = swe.calc_ut(jd,2)[0][3] if eph < 0: current_val = f"{dt} {eph}" if first_res is None: first_res = current_val last_res = current_val # 输出符合要求的首尾结果 print(first_res) print(last_res)
可选适配方案
如果你的业务逻辑要求必须每秒计算一次,仅调整打印频率为每分钟一次,可保留原每秒遍历的逻辑,新增打印计数器实现即可:
import swisseph as swe from datetime import datetime, timedelta from astropy.time import Time start_date_time = datetime(2021, 1, 30, 15, 00, 00) end_date_time = datetime(2021,1, 30,16,00,00) time_diff = int((end_date_time - start_date_time).total_seconds()) first_res = None last_res = None print_counter = 0 for i in range(time_diff): day = (start_date_time + timedelta(0, i)) dt = Time(day) jd =dt.jd eph = swe.calc_ut(jd,2)[0][3] if eph < 0: current_val = f"{dt} {eph}" if first_res is None: first_res = current_val last_res = current_val # 每60次符合条件的结果打印一次,即对应每分钟打印一次 if print_counter % 60 == 0: print(current_val) print_counter += 1 # 最后输出首尾符合条件的结果 print("首条结果:", first_res) print("末条结果:", last_res)
内容的提问来源于stack exchange,提问作者Butterfly Fiziks
相关产品推荐
相关产品推荐

