Создание x числа случайной даты рождения и x числа дат, которые по крайней мере 18 лет после соответствующей даты рождения? - PullRequest
0 голосов
/ 12 июня 2019

Я создал список случайных дат рождения, теперь использую его, я хотел бы создать список случайных дат начала, которые начинаются после 1 января 1980 года и по крайней мере через 18 лет после даты рождения.

Я могу получить случайную дату рождения, но я не уверен, как использовать ее для генерации дат начала, которые начинаются после 1 января 1980 года и, по крайней мере, через 18 лет после рождения.

birthdates = []
import time

def strTimeProp(start, end, format, prop):
    """Get a time at a proportion of a range of two formatted times.
    start and end should be strings specifying times formated in the
    given format (strftime-style), giving an interval [start, end].
    prop specifies how a proportion of the interval to be taken after
    start.  The returned time will be in the specified format.
    """

    stime = time.mktime(time.strptime(start, format))
    etime = time.mktime(time.strptime(end, format))

    ptime = stime + prop * (etime - stime)
    return time.strftime(format, time.localtime(ptime))

def randomDate(start, end, prop):
    birthdates.append(strTimeProp(start, end, '%B %d %Y', prop))

for n in range(1000):
    randomDate("January 1 1960", "June 1 2001", random.random())

Это создает список из 1000 дат рождения в формате ['5 января 1974 г., ...], второй список, который я хотел бы создать, был бы похож на [[10 января 1992 г.], ...]

1 Ответ

1 голос
/ 12 июня 2019

Я думаю, что это будет работать для вас:

birthdates = []
import time
import random

def strTimeProp(start, end, format, prop):
    """Get a time at a proportion of a range of two formatted times.
    start and end should be strings specifying times formated in the
    given format (strftime-style), giving an interval [start, end].
    prop specifies how a proportion of the interval to be taken after
    start.  The returned time will be in the specified format.
    """
    if len(start) == 6: 
        start = '0' + start[0] + '0' + start[1:]
    elif len(start) == 7: 
        start = '0' + start

    try:
        stime = time.mktime(time.strptime(start, format))
    except:
        year = start[:-4]

        stime = time.mktime(time.strptime("February 28 " + year, format))
    etime = time.mktime(time.strptime(end, format))

    ptime = stime + prop * (etime - stime)
    return time.strftime(format, time.localtime(ptime))

def randomDate(start, end, prop, list):
    list.append(strTimeProp(start, end, '%B %d %Y', prop))

for n in range(1000):
    randomDate("January 1 1960", "June 1 2001", random.random(), birthdates)

later_dates = []

for date in birthdates:
    month_day = date[:-4]
    year = date[-4:]
    randomDate(month_day + str(int(year) + 18), "June 1 2019", random.random(), later_dates)

Список later_dates будет содержать список желаемых дат.

...