Как генерировать только 14 строчек
Всем привет,как сделать что бы скрипт генерировал только 14 строчек? иногда бывает что 13 генерирует мне нужно строго 14.
import datetime as DT
import random
date_fmt = '%m/%d/%Y:%H:%M'
step = DT.timedelta(minutes=5)
start_date = DT.datetime.strptime('4/1/2022:08:00', date_fmt)
last_date = DT.datetime.strptime('4/2/2022:8:00', date_fmt)
def create_time(start_date, last_date):
timatable = []
a = 1
while start_date <= last_date:
print(start_date, a)
timatable.append(start_date)
step2 = DT.timedelta(hours=random.uniform(1.5, 2))
start_date += step
start_date += step2
a += 1
return timatable
create_time(start_date,last_date)
Результат программы
2022-04-01 08:00:00 1
2022-04-01 10:04:36.522766 2
2022-04-01 11:48:02.639554 3
2022-04-01 13:38:39.613229 4
2022-04-01 15:43:19.774118 5
2022-04-01 17:21:20.608240 6
2022-04-01 19:10:34.335244 7
2022-04-01 20:49:17.607405 8
2022-04-01 22:40:55.065865 9
2022-04-02 00:19:10.065549 10
2022-04-02 02:21:46.418680 11
2022-04-02 04:14:05.954035 12
2022-04-02 06:13:24.821632 13
Ответы (1 шт):
Автор решения: Эникейщик
→ Ссылка
Я бы перевел диапазон в итератор (юникс-время, например, range (start, stop)) и взял бы оттуда 14 значений (random.choices).
import datetime as DT
import time
import random
date_fmt = '%m/%d/%Y:%H:%M'
start_date = DT.datetime.strptime('4/1/2022:08:00', date_fmt)
last_date = DT.datetime.strptime('4/2/2022:8:00', date_fmt)
start = int(time.mktime(start_date.timetuple())) # unix-time - начало
end = int(time.mktime(last_date.timetuple())) # unix-time - конец
timatable = random.choices(range(start, end), k=14) # 14 значений из указанного промежутка
Обратите внимание, что результат НЕ СОРТИРОВАН. Поэтому, если данные нужны хронологически, то нужно отсортировать. Ну и привести в нужный вид, потому что сейчас в timatable тоже юникс-время, а не datetime.