python从输入序列中获取最大日期和最大时间

时间:2018-08-10 05:59:44

标签: python-3.x date time

当用户输入由空格或逗号分隔的10-12个数字时,我想获得最长日期和最长时间

我尝试使用日期代码,但无法创建用于获取日期最大月份的逻辑 我所做的工作是先按降序对列表进行排序,然后在结果列表中检查是否该数字小于或等于1,然后将其放在第0个索引上,然后如果第0个索引号是1,则将其放在第1个数字上索引将小于或等于2

digits = [int(x) for x in input("Enter the digits").split(",")]
date = []

print(digits)

for x in range(0, len(digits)):
    for y in range(0, len(digits) - x - 1):
        if digits[y] <= digits[y + 1]:
            temp = digits[y]
            digits[y] = digits[y + 1]
            digits[y + 1] = temp

print(digits)

for x in range(0, len(digits)):
    if digits[x] <= 1:
        date.insert(0, digits[x])
        break

digits.remove(digits[x])
print("digits ", digits)
print(date)

for y in range(0, len(digits) - 1):
    if date[0] == 1:
        while digits[y] >= 0 and digits[y] <= 2:
            if digits[y] >= digits[y + 1]:
                date.insert(1, digits[y])
                digits.remove(digits[y])
                break
    if date[0] < 1:
        while digits[y] >= 0 and digits[y] <= 9:
            if digits[y] >= digits[y + 1]:
                date.insert(1, digits[y])
                digits.remove(digits[y])
                break
    break
print("digits", digits)

for x in range(0, len(digits)):
    if digits[x] <= 3:
        date.insert(2, digits[x])
        break

digits.remove(digits[x])
print(date)

print("digits", digits)

for y in range(0, len(digits)):
    if date[2] == 3:
        while digits[y] >= 0 and digits[y] <= 1:
            if digits[y] >= digits[y + 1]:
                date.insert(3, digits[y])
                digits.remove(digits[y])
                break
    if date[2] < 3:
        while digits[y] >= 0 and digits[y] <= 9:
            if digits[y] >= digits[y + 1]:
                date.insert(3, digits[y])
                digits.remove(digits[y])
                break
    break

print(date)

当我输入内容时,现在在上面的代码中

input : 1,0,0,1,1
output :
[1, 0, 0, 1, 1]
[1, 1, 1, 0, 0]
digits  [1, 1, 0, 0]
[1]
digits [1, 0, 0]
[1, 1, 1]
digits [0, 0]
[1, 1, 1, 0]

所以这里1,1,1,0是11个月,而10是天 因此格式应为包含零的MMDD 但是当我输入其他输入

input : 1,2,3,1,1
output :
[1, 2, 3, 1, 1]
[3, 2, 1, 1, 1]
digits  [3, 2, 1, 1]
[1]
digits [3, 2, 1, 1]
[1, 3]
digits [2, 1, 1]
Traceback (most recent call last):
File "date.py", line 51, in <module>
    if date[2] == 3:
IndexError: list index out of range

在这里,我希望1,2,3,1分别为12月和31日

1 个答案:

答案 0 :(得分:2)

import datetime, itertools

dates = []
try:
    digits = [int(x) if int(x) < 10 else 100 for x in input("Enter the digits").split(",")]
    if 100 in digits:
        raise ValueError('Must be digits and not numbers')
    date_perms = itertools.permutations(digits, 4)
    for date in date_perms:
        dates.append((date[0]*10+date[1], date[2]*10+date[3]))
except ValueError as e:
    print(e)

for i, date in enumerate(dates):
    try:
        dates[i] = datetime.datetime(year=1, month=date[0], day=date[1])
    except ValueError as e:
        dates[i] = datetime.datetime(1,1,1,1)
if len(dates) > 0:
    maximum = max(dates)
    if maximum.hour == 1:
        print('None of the combinations created a valid date')
    else:
        print('Month:', maximum.month, 'Day:', maximum.day)

我认为这可以满足您的需求。 itertools.permutations创建给定数字的所有可能组合。
第二个try-except块将错误日期替换为Year=1, month=1, day=1, hour=1。其他人将有0小时。

另外,请注意,我稍微替换了您的输入列表理解。以前它允许非整数输入和非数字输入。输入一个非数字(> 9)时,我在列表中放置一个100,然后检查是否有一个并抛出异常。

根据评论进行编辑:

dates = []
try:
    digits = [int(x) if int(x) < 10 else 100 for x in input("Enter the digits").split(",")]
    if 100 in digits:
        raise ValueError('Must be digits and not numbers')
    datetime_perms = itertools.permutations(digits, 8)
    for date_time in datetime_perms:
        convert_date = []
        for skip in range(0,8,2):
            # Create a list that will look like [Month, Day, Hour, Minute]
            convert_date.append(date_time[skip]*10+date_time[skip+1])
        dates.append(convert_date)
except ValueError as e:
    print(e)

for i, date in enumerate(dates):
    try:
        dates[i] = datetime.datetime(year=1, month=date[0], day=date[1], hour=date[2], minute=date[3])
    except ValueError as e:
        print(dates[i])
        dates[i] = datetime.datetime(1,1,1,1,1,1,1)
if len(dates) > 0:
    maximum = max(dates)
    if maximum.microsecond == 1:
        print('None of the combinations created a valid date')
    else:
        print('Month:', maximum.month, 'Day:', maximum.day, 'Hour:', maximum.hour, 'Minute:', maximum.minute)

这应该做您所需要的。对于1,2,3,4,3,2,1,0的输入,我收到了Month: 12 Day: 31 Hour: 23 Minute: 40

的输出