Python. Поиск и сравнение по словарю
Есть 10 моментов из суток, с временем в часах, минутах и секундах, нужна программа которая сможет делать сравнение на два любых момента и определит, какой из них был раньше. Пробую сделать через цикл for, была идея, делаю просто n1 и n2 через input, А сравнивает так: поиск минимального значение 'h', а если есть равные есть, тогда перейти к сравнению 'm' и аналогично к 's'. Мой код:
ivents={
'1':{'h': 23,'m': 11,'s':32},
'2':{'h': 4,'m': 32,'s':13},
'3':{'h': 6,'m': 14,'s':51},
'4':{'h': 14,'m': 32,'s':1},
'5':{'h': 2,'m': 4,'s':32},
'6':{'h': 21,'m': 58,'s':3},
'7':{'h': 16,'m': 51,'s':6},
'8':{'h': 19,'m': 21,'s':51},
'9':{'h': 17,'m': 32,'s':16},
'10':{'h': 2,'m': 6,'s':19},
}
n1=int(input("n1:"))
n2=int(input("n2:"))
for num in ivents:
if n1[h] != n2[h] in num:
for 'h' in num:
key_min = min(ivents.keys(), key=(lambda k: ivents[k]))
elif n1[m] != n2[m] in num:
for 'm' in num:
key_min = min(ivents.keys(), key=(lambda k: ivents[k]))
else:
for 's' in num:
key_min = min(ivents.keys(), key=(lambda k: ivents[k]))
print(key_min)
Ответы (2 шт):
Автор решения: Jack_oS
→ Ссылка
Реализация преобразования и сравнения времени, как сказал @Kers, возможно, подойдет:
import datetime
events = {
'1':{'h': 23,'m': 11,'s':32},
'2':{'h': 4,'m': 32,'s':13},
'3':{'h': 6,'m': 14,'s':51},
'4':{'h': 14,'m': 32,'s':1},
'5':{'h': 2,'m': 4,'s':32},
'6':{'h': 21,'m': 58,'s':3},
'7':{'h': 16,'m': 51,'s':6},
'8':{'h': 19,'m': 21,'s':51},
'9':{'h': 17,'m': 32,'s':16},
'10':{'h': 2,'m': 6,'s':19},
}
n1 = input('n1: ')
n2 = input('n2: ')
d1 = datetime.datetime.strptime(f'{events[n1]["h"]}:{events[n1]["m"]}:{events[n1]["s"]}', '%H:%M:%S').time()
d2 = datetime.datetime.strptime(f'{events[n2]["h"]}:{events[n2]["m"]}:{events[n2]["s"]}', '%H:%M:%S').time()
if d1 > d2:
print(f'событие {n2} произошло раньше, чем {n1}')
elif d1 < d2:
print(f'событие {n1} произошло раньше, чем {n2}')
else:
print('события произошли одновременно')
PS Хотя, если формат именно такой, как в тесткейсе, проще и понятнее перевести всё в секунды и сравнить два числа... и писАть меньше:
d1_seconds = events[n1]["h"]*3600 + events[n1]["m"]*60 + events[n1]["s"]
d2_seconds = events[n2]["h"]*3600 + events[n2]["m"]*60 + events[n2]["s"]
if d1_seconds > d2_seconds:
print(f'событие {n2} произошло раньше, чем {n1}')
elif d1_seconds < d2_seconds:
print(f'событие {n1} произошло раньше, чем {n2}')
else:
print('события произошли одновременно')
Автор решения: Danis
→ Ссылка
ivents = {
'1': {'h': 23,'m': 11,'s':32},
'2': {'h': 4,'m': 32,'s':13},
'3': {'h': 6,'m': 14,'s':51},
'4': {'h': 14,'m': 32,'s':1},
'5': {'h': 2,'m': 4,'s':32},
'6': {'h': 21,'m': 58,'s':3},
'7': {'h': 16,'m': 51,'s':6},
'8': {'h': 19,'m': 21,'s':51},
'9': {'h': 17,'m': 32,'s':16},
'10': {'h': 2,'m': 6,'s':19},
}
for key, value in ivents.items():
ivents[key] = tuple(value.values())
a = input()
b = input()
print(min(ivents[a], ivents[b]))