我正在处理多个时间范围。我必须计算可用时间的效率(即分数)。这个问题可以和任何官僚机构相比。你知道吗
我只是简单地使用了多个if-else语句,有没有更好的方法来处理这类问题,因为代码太长了。 查询时间以元组形式给出,开放时间以元组列表形式给出。你知道吗
def efficiencyRatio(inquiryTime, openingHours):
if len(openingHours) > 1:
----code remain-----
else:
if inquiryTime[0] >= openingHours[0][0] and inquiryTime[1] <=
openingHours[0][1]:
return 1
elif inquiryTime[0] >= openingHours[0][1] or inquiryTime[1] <=
openingHours[0][0]:
return 0
elif inquiryTime[0] < openingHours[0][0] and inquiryTime[1] <=
openingHours[0][1]:
totalInquiryTime = inquiryTime[1] - inquiryTime[0]
usableInquiryTime = inquiryTime[1] - openingHours[0][0]
efficiency = usableInquiryTime / totalInquiryTime
elif inquiryTime[0] >= openingHours[0][0] and inquiryTime[1] >
openingHours[0][1]:
totalInquiryTime = inquiryTime[1] - inquiryTime[0]
usableInquiryTime = openingHours[0][1] -inquiryTime[0]
efficiency = usableInquiryTime / totalInquiryTime
elif inquiryTime[0] <= openingHours[0][0] and inquiryTime[1] >=
openingHours[0][1]:
totalInquiryTime = inquiryTime[1] - inquiryTime[0]
usableInquiryTime = openingHours[0][1] - openingHours[0][0]
efficiency = usableInquiryTime / totalInquiryTime
我的问题的输入和输出如下。你知道吗
Inquiry Time Opening Time Answer
(10, 18) [(10, 12), (14, 16)] 0.50
(10, 12) [(09, 14)] 1.00
(08, 12) [(00, 10)] 0.50
如果我理解正确,我会通过引入一些更简单的操作来简化代码
overlap
来计算两个间隔之间的重叠,并duration
来计算间隔的(绝对)持续时间。你知道吗请注意: -对于最大界限在最小界限之前的输入间隔,代码还有额外的逻辑。 输出总是采用
(min_bound, max_bound)
格式。 -open_intervals
应该是非重叠的,这就是在assert()
中实现的附加逻辑的含义为了测试这项工作是否适用于您的用例,我们可以:
编辑:添加了更多的输入检查。你知道吗
相关问题 更多 >
编程相关推荐