当用户输入由空格或逗号分隔的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日
答案 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