Python生成10个小时不重复随机时刻 实现任意两时刻先后比较
Python 单日时刻存储与比较功能实现
需求回顾
存储单日10个时刻数据,每个时刻包含小时(取值范围023)、分钟(取值范围059)、秒(取值范围0~59),要求10个时刻的小时值不可重复,支持任选两个时刻比较当日发生时间的先后顺序。
原有代码问题
- 小时生成用
random.randint随机取值,未做去重处理,可能出现重复小时,不符合规则 - 拼接时间数据时遗漏秒字段,仅存储了小时、分钟信息,时间数据不完整
- 未实现时间比较核心逻辑,
while True交互循环为空,功能未串联 - 存在
num_of_H、num_of_M两个重复冗余变量,无实际作用
完整实现代码
import random # 生成10个不重复的小时值(0~23无放回抽样) hours = random.sample(range(24), 10) # 生成对应10个分钟、秒值 minutes = [random.randint(0, 59) for _ in range(10)] seconds = [random.randint(0, 59) for _ in range(10)] # 组装为字典:key为时刻序号0~9,value为(时,分,秒)元组 time_map = {idx: (h, m, s) for idx, (h, m, s) in enumerate(zip(hours, minutes, seconds))} # 打印所有生成的时刻供用户选择 print("已生成10个小时不重复的时刻,对应关系如下:") for idx, (h, m, s) in time_map.items(): print(f"序号{idx}: {h:02d}:{m:02d}:{s:02d}") # 交互循环 while True: user_input = input("\n请输入两个要比较的时刻序号(用空格分隔,输入q退出程序):").strip() if user_input.lower() == 'q': print("程序退出") break try: idx1, idx2 = map(int, user_input.split()) # 校验序号范围 if idx1 not in time_map or idx2 not in time_map: print("输入错误:序号必须在0~9之间,请重新输入") continue t1 = time_map[idx1] t2 = time_map[idx2] # 利用元组逐位比较特性直接判断先后 if t1 < t2: print(f"序号{idx1}的时刻({t1[0]:02d}:{t1[1]:02d}:{t1[2]:02d})早于序号{idx2}的时刻({t2[0]:02d}:{t2[1]:02d}:{t2[2]:02d})") elif t1 > t2: print(f"序号{idx2}的时刻({t2[0]:02d}:{t2[1]:02d}:{t2[2]:02d})早于序号{idx1}的时刻({t1[0]:02d}:{t1[1]:02d}:{t1[2]:02d})") else: print(f"序号{idx1}和序号{idx2}的时刻完全相同") except ValueError: print("输入格式错误,请输入两个合法数字序号,或输入q退出")
关键实现说明
- 不重复小时生成:使用
random.sample(range(24), 10)做无放回随机抽样,一次生成10个互不重复的小时值,不需要额外写去重重试逻辑 - 时间比较逻辑:Python元组默认按元素顺序逐位对比,
(时1,分1,秒1)和(时2,分2,秒2)对比时,会先判断小时大小,小时相等再判断分钟,分钟相等再判断秒,完全匹配单日时间先后的判断规则,代码简洁无冗余 - 交互容错:对用户输入做异常捕获,对格式错误、序号超出范围的情况给出明确提示,不会因非法输入直接崩溃
内容的提问来源于stack exchange,提问作者Kamel Avad
相关产品推荐
相关产品推荐

